Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将所有具有实际数据范围的图纸复制到新工作簿中,同时保留旧图纸名称_Excel_Vba - Fatal编程技术网

Excel 将所有具有实际数据范围的图纸复制到新工作簿中,同时保留旧图纸名称

Excel 将所有具有实际数据范围的图纸复制到新工作簿中,同时保留旧图纸名称,excel,vba,Excel,Vba,我必须只复制具有实际数据范围的每张图纸 我试了两个密码。一种是创建新工作簿、工作表和重命名工作表。另一个是用于复制实际数据范围。两者都很好。当我试图结合这两个代码时,它不再起作用了 Sub dural() Dim b1 As Workbook, b2 As Workbook Set b2 = ActiveWorkbook Set b1 = Workbooks.Add For Each sh2 In b2.Sheets Set sh1 = b1.Sheets

我必须只复制具有实际数据范围的每张图纸

我试了两个密码。一种是创建新工作簿、工作表和重命名工作表。另一个是用于复制实际数据范围。两者都很好。当我试图结合这两个代码时,它不再起作用了

Sub dural()
   Dim b1 As Workbook, b2 As Workbook

   Set b2 = ActiveWorkbook
   Set b1 = Workbooks.Add

   For Each sh2 In b2.Sheets
      Set sh1 = b1.Sheets.Add
      sh1.Name = sh2.Name

'   Show hide Columns and Rows
      sh2.Columns.EntireColumn.Hidden = False
         Rows.EntireRow.Hidden = False
'   Unfilter
    If sh2.FilterMode = True Then
        sh2.ShowAllData
    End If

'   Copy and Paste
    sh2.Range("A1").Resize(Cells.Find(What:="*", SearchOrder:=xlRows, _
        SearchDirection:=xlPrevious, LookIn:=xlValues).Row, _
        Cells.Find(What:="*", SearchOrder:=xlByColumns, _
        SearchDirection:=xlPrevious, LookIn:=xlValues).Column).Copy _
        sh1.Range("A1")

   Next sh2
End Sub

它给出了运行时错误。这是因为“复制和粘贴注释”下的代码。

看起来您复制和粘贴了代码,然后试图拼接它,但实际上并没有理解它。考虑到这一点,我不知道这是否真的对你有帮助,因为你不会学到任何东西

这就是说,这将执行您想要的操作,并且它将在生成当前错误的工作簿中工作

Sub dural()
    Dim b1 As Workbook, b2 As Workbook
    Dim sh1 As Worksheet, sh2 As Worksheet

    Set b2 = ActiveWorkbook
    Set b1 = Workbooks.Add

    For Each sh2 In b2.Sheets
        With sh2
            Set sh1 = b1.Sheets.Add
            sh1.Name = .Name

            '   Show hide Columns and Rows
            .Columns.EntireColumn.Hidden = False
            .Rows.EntireRow.Hidden = False

            '   Unfilter
            If .FilterMode = True Then .ShowAllData

            '   Copy and Paste
            .UsedRange.Copy sh1.Range(.UsedRange.Address)
        End With
    Next sh2
End Sub

请注意,没有有用的错误描述是不起作用的。另外,有必要告诉您在哪一行中出现了哪一个错误。请用你的问题来添加这些信息。它给了你什么错误?我只修改了一行,它非常适合我。如果是sh1.Name.Name,那么是sh1.Name=.Name。我不知道vba。在我的办公室,excel用户意外地保存了一些不可见的设置。工作簿变大且无响应。所以,这就是为什么我想做这个代码。谢谢你。我将开始学习一些vba技能。很好地发现了潜在的错误,它几乎保证会很快弹出。如果您觉得可以,可以尝试创建一个循环,在图纸名称已经存在的情况下为其添加后缀,或者提示用户指定图纸名称。