【发布时间】:2020-07-16 19:58:50
【问题描述】:
底部的代码
嗨,我刚刚修复了这个宏。人们告诉我它以前有效。 这个宏应该只复制可见的过滤数据(主要是动态表),并创建一个新的 Excel 文件,其中包含所有相同的工作表,但只复制和粘贴可见数据(工作表),没有动态表。这是为了减轻文件的重量,但不是为了制作精确的副本。
您应该使用要传输数据的文件打开此文件,然后在要复制的文件中运行宏。
首先,'Sheets(Pages).Select' 出现方法错误(我从.Activate 切换)并且它起作用了。
在那之后'NewBook.Sheets(1).Range("A1:BZ500").Select' 是范围的方法错误,所以我把它分成两行:
'NewBook.Sheets(1).activate'
'Range("A1:BZ500").Select'
这解决了这个错误。
之后,该行出现名称归属错误(如名称已被使用):
NewBook.Sheets(1).Name = OldBook.Sheets(Page).Name ( i tried a spy but ieverything was ok) so I decided to write it like NewBook.Sheets(1).Name = OldBook.Sheets(Page).Name + Cstr(Page)
它解决了错误,但宏仍然没有做它应该做的事情:
Set OldBook = ActiveWorkbook
Set NewBook = Workbooks.Add
NewBook.Worksheets(1).Name = "Vide"
OldBook.Activate
For Page = 1 To Sheets.Count - 1
OldBook.Activate
Sheets(Page).Activate
Sheets(Page).Copy Before:=NewBook.Sheets(1)
NewBook.Activate
NewBook.Sheets(1).Name = OldBook.Sheets(Page).Name
NewBook.Sheets(1).Range("A1:BZ500").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next
End Sub
以下是我的更正:
Sub Fichier_Plat()
Code_optimizer (True)
Set OldBook = ActiveWorkbook
Set NewBook = Workbooks.Add
NewBook.Worksheets(1).Name = "Vide"
OldBook.Activate
For Page = 1 To Sheets.Count - 1
OldBook.Activate
Sheets(Page).Activate
Sheets(Page).Copy Before:=NewBook.Sheets(1)
NewBook.Activate
NewBook.Sheets(1).Name = OldBook.Sheets(Page).Name + CStr(Page)
NewBook.Sheets(1).Activate
Range("A1:BZ500").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next
Code_optimizer (False)
End Sub
【问题讨论】:
标签: excel vba error-handling