首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以跳过宏Excel中的一步吗?

我可以跳过宏Excel中的一步吗?
EN

Stack Overflow用户
提问于 2022-01-09 15:52:39
回答 2查看 290关注 0票数 -1

目前,我有一个日常任务,将数据从一个电子表格复制到另一个电子表格。

我为此创建了一个宏,但是我得到了一个新的数据表,可以用一个新的日期复制每天的数据,所以当我运行Macro时,会得到运行时9错误。

只要更改VBA中的日期,就可以很容易地解决问题,但它违背了自动执行日常任务的目的。

是否有跳过此步骤或脚本忽略错误的情况?

代码语言:javascript
运行
复制
    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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-11 17:11:20

我设法解决了我一直面临的问题。

当跨两个工作簿工作时,通过结束复制工作簿上的宏记录而不是日期为09_01_2022的工作簿,这意味着我能够在其他工作簿上运行相同的宏。

票数 0
EN

Stack Overflow用户

发布于 2022-01-09 21:31:33

一个可能的答案

我想在这里的某个地方,我得到了一个比评论中的更好的答案,而且我可以在这里添加图片。

Excel实例

假设您没有拼写错误的文件名,我认为您可能无意中运行了多个Excel实例。您可以通过右键单击任务栏并打开任务管理器并寻找多个强项的外观来检查这一点,也可以在VBA编辑器的Project中查看。我在下面重新描述了这种情况:

因此,上面看到的是打开了两个工作簿,加上任务管理器上的"Microsoft (3)“实例中的VBA编辑器,然后我强制执行了第二个实例,并在另一个实例中创建了一个工作簿"WB_in_another_Excel_instance.xlsx”。注意,在作为第一个实例的一部分的VBA编辑器中,您无法在列表中看到这个其他工作簿/项目。如果你有类似的情况,这将是你的台词的一个解释.

代码语言:javascript
运行
复制
Windows("09_01_2022_data.xlsx").Activate  ' Error here

...to不管用。VBA代码将看不到另一个实例,而复制、激活该工作簿将给您提供运行时9错误。看看那个。

代码的另一种方法

由于不知道代码的全部范围,我获得了一些许可,并试图向您展示另一种执行代码的方法,这样您就不需要依赖.Activate并提高您的VBA技能。

代码语言:javascript
运行
复制
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。然后,如果您需要更改一个范围或工作簿名称,或者其他什么,您只需要在一个地方更改它。只是在你的脚本中考虑的东西,使它更有效率。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70642997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档