Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3323|回复: 14

[已解决]关于工作薄分解代码出错求助?

[复制链接]
发表于 2013-8-22 11:06 | 显示全部楼层 |阅读模式
本帖最后由 nancy66317 于 2013-8-22 11:18 编辑

QQ截图20130822110041.jpg    今天看一个关于工作薄分解的代码时,总是提示出错,但怎么也找不到原因,请各位路过的大侠帮忙看一下,谢谢! 分解工作薄.rar (12.25 KB, 下载次数: 13)
 楼主| 发表于 2013-8-22 11:11 | 显示全部楼层
Sub 分表()
Dim Pat As String, M As String, Bm As Workbook
Dim H As Long, H1 As Long, Sa As Long
c = Application.InputBox(Prompt:="请输入目标参照列数字:", Type:=1)
Dim Arr As Variant
  Application.ScreenUpdating = False
  Pat = ThisWorkbook.Path & "\"
  With Sheet1
    H = .Range("A65536").End(xlUp).Row
    For H1 = 2 To H
      If M = "" Then M = Cells(H1, c)   '记录要生成的工作薄 名称
      If Cells(H1, c) = M Then
        If Sa = 0 Then Sa = H1    '记录起 始位置
        If Cells(H1 + c, 1) <> M Then
          Set Bm = Workbooks.Add(1)   '新建一个工作薄,且只有一个工作表
          Bm.SaveAs Pat & M   '新建的工作薄 命名另存
          With Bm.Sheets(1).Range("A1")
            .Resize(, 7).Value = Sheet1.Range("A1:G1").Value    '写入表头
            .Offset(1).Resize(H1 - Sa, 7) = Sheet1.Range(Sheet1.Cells(Sa, "A"), Sheet1.Cells(H1, "G")).Value
            '写入数据
          End With
          Bm.Close True   '关闭这个新建的工作薄
          M = ""    '清空 表名
          Sa = 0    '清空 起始位置
        End If
      End If
    Next
  End With
  Application.ScreenUpdating = True
  MsgBox "工作薄已生成,并已保存到 " & Pat & " 文件夹中", , "完成"
End Sub
回复

使用道具 举报

 楼主| 发表于 2013-8-22 11:12 | 显示全部楼层
代码是打开表格,按F11进入模版1就能看到!
回复

使用道具 举报

发表于 2013-8-22 11:24 | 显示全部楼层
最好再说哈你要做什么 达到什么效果
回复

使用道具 举报

 楼主| 发表于 2013-8-22 11:27 | 显示全部楼层
把一个表,按某列,如此表,按品牌(第4列)分解成多个工作薄

回复

使用道具 举报

发表于 2013-8-22 11:33 | 显示全部楼层
本帖最后由 爱疯 于 2013-8-22 11:41 编辑

Sub 分表()
    Dim Pat As String, M As String, Bm As Workbook
    Dim H As Long, H1 As Long, Sa As Long
   
    c = Application.InputBox(Prompt:="请输入目标参照列数字:", Type:=1)
    Dim Arr As Variant
    Application.ScreenUpdating = False
    Pat = ThisWorkbook.Path & "\"
    With Sheet1
        H = .Range("A65536").End(xlUp).Row
        For H1 = 2 To H
            If M = "" Then M = Cells(H1, c)   '记录要生成的工作薄 名称
            If Cells(H1, c) = M Then
                If Sa = 0 Then Sa = H1    '记录起 始位置
                If Cells(H1+1, c) <> M Then
                    Set Bm = Workbooks.Add(1)   '新建一个工作薄,且只有一个工作表
                    Bm.SaveAs Pat & M   '新建的工作薄 命名另存
                    With Bm.Sheets(1).Range("A1")
                        .Resize(, 7).Value = Sheet1.Range("A1:G1").Value    '写入表头
                        .Offset(1).Resize(H1 - Sa+1, 7) = Sheet1.Range(Sheet1.Cells(Sa, "A"), Sheet1.Cells(H1, "G")).Value
                        '写入数据
                    End With
                    Bm.Close True   '关闭这个新建的工作薄
                    M = ""    '清空 表名
                    Sa = 0    '清空 起始位置
                End If
            End If
        Next
    End With
    Application.ScreenUpdating = True
    MsgBox "工作薄已生成,并已保存到 " & Pat & " 文件夹中", , "完成"
End Sub

是要改成这样吗
回复

使用道具 举报

 楼主| 发表于 2013-8-23 09:16 | 显示全部楼层
爱疯 发表于 2013-8-22 11:33
Sub 分表()
    Dim Pat As String, M As String, Bm As Workbook
    Dim H As Long, H1 As Long, Sa As ...

为什么这里写成.Offset(1).Resize(H1 - Sa + 1, 7)和.Offset(1).Resize(H1 - Sa , 7)结果是一样的呢?
回复

使用道具 举报

发表于 2013-8-23 09:40 | 显示全部楼层
nancy66317 发表于 2013-8-23 09:16
为什么这里写成.Offset(1).Resize(H1 - Sa + 1, 7)和.Offset(1).Resize(H1 - Sa , 7)结果是一样的呢?

.Offset(1).Resize(H1 - Sa + 1, 7)


.Offset(1).Resize(H1 - Sa , 7)结果是一样的呢?
不对,少了本次划分中的最后1个。
回复

使用道具 举报

 楼主| 发表于 2013-8-23 10:01 | 显示全部楼层
爱疯 发表于 2013-8-23 09:40
.Offset(1).Resize(H1 - Sa + 1, 7)

但是还有一个问题,分解后日期显示不正常(变为数字了),另外第二列显示也不完整,能不能不改变格式粘贴呢?
回复

使用道具 举报

发表于 2013-8-23 10:09 | 显示全部楼层
Sub 分表()
    Dim Pat As String, M As String, Bm As Workbook
    Dim H As Long, H1 As Long, Sa As Long
   
    c = Application.InputBox(Prompt:="请输入目标参照列数字:", Type:=1)
    Dim Arr As Variant
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Pat = ThisWorkbook.Path & "\"
    With Sheet1
        H = .Range("A65536").End(xlUp).Row
        For H1 = 2 To H
            If M = "" Then M = Cells(H1, c)   '记录要生成的工作薄 名称
            If Cells(H1, c) = M Then
                If Sa = 0 Then Sa = H1    '记录起 始位置
                If Cells(H1 + 1, c) <> M Then
                    Set Bm = Workbooks.Add(1)   '新建一个工作薄,且只有一个工作表
                    Range("b:b").NumberFormat = "@"
                    Bm.SaveAs Pat & M   '新建的工作薄 命名另存
                    With Bm.Sheets(1).Range("A1")
                        .Resize(, 7).Value = Sheet1.Range("A1:G1").Value    '写入表头
                        .Offset(1).Resize(H1 - Sa + 1, 7) = Sheet1.Range(Sheet1.Cells(Sa, "A"), Sheet1.Cells(H1, "G")).Value
                        '写入数据
                    End With
                    Range("a1").CurrentRegion.EntireColumn.AutoFit
                    Bm.Close True   '关闭这个新建的工作薄
                    M = ""    '清空 表名
                    Sa = 0    '清空 起始位置
                End If
            End If
        Next
    End With
    Application.ScreenUpdating = True
    MsgBox "工作薄已生成,并已保存到 " & Pat & " 文件夹中", , "完成"
End Sub
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 13:05 , Processed in 0.476683 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表