目前,我有一个日常任务,将数据从一个电子表格复制到另一个电子表格。
我为此创建了一个宏,但是我得到了一个新的数据表,可以用一个新的日期复制每天的数据,所以当我运行Macro时,会得到运行时9错误。
只要更改VBA中的日期,就可以很容易地解决问题,但它违背了自动执行日常任务的目的。
是否有跳过此步骤或脚本忽略错误的情况?
Selection.AutoFilter
ActiveSheet.Range("$A$1:$F$8").AutoFilter Field:=1, Criteria1:=Array("Fri", _
"Mon", "Thu", "Tue", "Wed"), Operator:=xlFilterValues
Range("A2:F6").Select
Selection.Copy
Windows("Calc.xlsx").Activate
Application.CutCopyMode = False
Selection.Copy
Windows("09_01_2022_data.xlsx").Activate ' Error here
Application.CutCopyMode = False
Selection.Copy
Windows("Calc.xlsx").Activate
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Windows("09_01_2022_data.xlsx").Activate
End Sub
发布于 2022-01-11 17:11:20
我设法解决了我一直面临的问题。
当跨两个工作簿工作时,通过结束复制工作簿上的宏记录而不是日期为09_01_2022的工作簿,这意味着我能够在其他工作簿上运行相同的宏。
发布于 2022-01-09 21:31:33
一个可能的答案
我想在这里的某个地方,我得到了一个比评论中的更好的答案,而且我可以在这里添加图片。
Excel实例
假设您没有拼写错误的文件名,我认为您可能无意中运行了多个Excel实例。您可以通过右键单击任务栏并打开任务管理器并寻找多个强项的外观来检查这一点,也可以在VBA编辑器的Project中查看。我在下面重新描述了这种情况:
因此,上面看到的是打开了两个工作簿,加上任务管理器上的"Microsoft (3)“实例中的VBA编辑器,然后我强制执行了第二个实例,并在另一个实例中创建了一个工作簿"WB_in_another_Excel_instance.xlsx”。注意,在作为第一个实例的一部分的VBA编辑器中,您无法在列表中看到这个其他工作簿/项目。如果你有类似的情况,这将是你的台词的一个解释.
Windows("09_01_2022_data.xlsx").Activate ' Error here
...to不管用。VBA代码将看不到另一个实例,而复制、激活该工作簿将给您提供运行时9错误。看看那个。
代码的另一种方法
由于不知道代码的全部范围,我获得了一些许可,并试图向您展示另一种执行代码的方法,这样您就不需要依赖.Activate
并提高您的VBA技能。
Sub test2()
Dim wb_Date_Data As Workbook
Dim wb_Calc As Workbook
Dim rng_filter As Range
Set wb_Calc = ThisWorkbook
Set wb_Date_Data = Workbooks.Add ' Create new workbook and save it with name later.
Set rng_filter = wb_Calc.Sheets(1).Range("A1:F8")
With rng_filter
.AutoFilter Field:=1, Criteria1:=Array("Fri", _
"Mon", "Thu", "Tue", "Wed"), Operator:=xlFilterValues
.SpecialCells(xlCellTypeVisible).Copy Destination:=wb_Date_Data.Sheets(1).Range("B2")
With .Parent ' .Parent object is generic, but in this case is referring to the worksheet of the range "rng_filter"
.ShowAllData
.AutoFilterMode = False
End With
End With
With wb_Date_Data
Application.DisplayAlerts = False ' If you are overwriting an existing file in the next step, this turns off the notification.
.SaveAs ("B:\OneDrive\Desktop\" & Format(Date, "MM_DD_YYYY") & "_data.xlsx") ' Save the file with dynamic date name (USA date format)
Application.DisplayAlerts = True ' But good practice to turn it back on quickly!
.Close savechanges:=True
End With
wb_Calc.Activate ' Not necessary, but wanted to show you can use the obj variable _
' plus, I sometimes want my macro to end on a specific workbook when working with several.
End Sub
上述方法允许宏自动创建、命名和保存带有日期的工作簿,而无需更改它。我还将向您展示如何使用对象变量为范围或工作簿赋值(我也可以分配工作表,但没有),在其中一次在一个地方进行赋值,然后使用var。然后,如果您需要更改一个范围或工作簿名称,或者其他什么,您只需要在一个地方更改它。只是在你的脚本中考虑的东西,使它更有效率。
https://stackoverflow.com/questions/70642997
复制相似问题