【发布时间】:2014-11-01 16:55:24
【问题描述】:
我正在尝试编写一个 VBA 宏来从另一个工作簿导入工作表。我在“复制”行收到“下标超出范围”错误。文件可以正确打开,但我不确定之后出了什么问题。
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim lastdate As String, filename As String
lastdate = Format(sheet_1.Range("D11") - 7, "ddmmyy")
filename = "C:\Dir\file " & lastdate & ".xlsm"
Workbooks.Open (filename)
Workbooks(filename).Worksheets(2).Copy after:=ThisWorkbook.Worksheets(1)
Workbooks(filename).Close
Application.ScreenUpdating = True
Application.DisplayAlerts = False
End Sub
编辑:错误更改为“下标超出范围”,代码已更改,因此索引引用了工作表。
代码 v2:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim lastdate As String, filename As String
lastdate = Format(sheet1.Range("D11") - 7, "ddmmyy")
filename = "C:\Dir\file " & lastdate & ".xlsm"
Dim wbk As Workbook
wbk = Workbooks.Open(filename)
wbk.Worksheets(2).Copy after:=ThisWorkbook.Worksheets(1)
wbk.Close
End Sub
【问题讨论】:
-
sheet_3和sheet_1的维度在哪里,它们的数据类型和值是什么? -
这是我试图阻止你在不保存的情况下关闭:我想你最后想要
Application.DisplayAlerts = True。此外,在将其设置为False时,您应该始终进行错误处理,否则您很快就会遇到意外。 -
您好,我在上面进行了编辑。我使用 sheet_3 和 sheet_1 作为占位符来稍微简化代码,这导致了部分错误。但是,仍然存在一个潜在问题 - 当我使用索引执行相同操作时,我得到一个“下标超出范围”错误(我认为这是原始错误)。
-
让-弗朗索瓦,你是对的。抱歉,打错字了!
-
@Jean-FrançoisCorbett
Application.DisplayAlerts。根据帮助,“如果您将此属性设置为 False,Microsoft Excel 会在代码完成时将此属性设置为 True,除非您正在运行跨进程代码。”