【发布时间】:2018-07-27 11:18:44
【问题描述】:
我想在工作簿打开后立即运行宏,因为某些原因宏需要之前打开工作簿。 Workbook_activate 不是一个选项,因为宏会打开其他文件,因此会导致无限循环。
如果我从 VBA 编辑器运行该宏,它运行得非常好,但它总是抛出
运行时错误 1004:对象
_Global的方法Cells具有 失败
当我真正打开工作簿时。
这是我正在使用的代码:
Private Sub Workbook_Open()
Call updateColumn("sheet", "Tabelle2", 1, 2)
Call updateColumn("sheet", "Tabelle2", 5, 1)
Call updateSG("Tabelle2", "sheet")
End Sub
updateColumn 通过打开另一个 excel 文件并从那里同步数据来更新给定的列。它工作正常,所以我不会在这里讨论它。
问题总是在updateSG 子中。它与updateColumn 基本相同,但它也会遍历另一个文件并将所需的条目排序到相应的列中。
Private Sub updateSG(sheetname As String, adbSheet As String)
Dim adb As Workbook
Dim report As Workbook
Dim row As Range
Dim fak As String
Dim N As Long
Dim rownumber As Long
Set report = Workbooks("thisfile.xlsm")
Set adb = Workbooks.Open(report.Path & "/ADB.xls")
rownumber = Cells(adb.Sheets(adbSheet).Rows.Count, 1).End(xlUp).row
For i = 2 To rownumber
fak = adb.Sheets(adbSheet).Cells(i, 1).Value
Select Case fak
Case "E"
N = report.Sheets(sheetname).Cells(Rows.Count, "C").End(xlUp).row + 1
report.Sheets(sheetname).Cells(N, "C").Value = adb.Sheets(adbSheet).Cells(i, 3)
Case "G"
N = report.Sheets(sheetname).Cells(Rows.Count, "D").End(xlUp).row + 1
report.Sheets(sheetname).Cells(N, "D").Value = adb.Sheets(adbSheet).Cells(i, 3)
Case "I"
N = report.Sheets(sheetname).Cells(Rows.Count, "E").End(xlUp).row + 1
report.Sheets(sheetname).Cells(N, "E").Value = adb.Sheets(adbSheet).Cells(i, 3)
Case "M"
N = report.Sheets(sheetname).Cells(Rows.Count, "F").End(xlUp).row + 1
report.Sheets(sheetname).Cells(N, "F").Value = adb.Sheets(adbSheet).Cells(i, 3)
Case "P"
N = report.Sheets(sheetname).Cells(Rows.Count, "G").End(xlUp).row + 1
report.Sheets(sheetname).Cells(N, "G").Value = adb.Sheets(adbSheet).Cells(i, 3)
Case "T"
N = report.Sheets(sheetname).Cells(Rows.Count, "H").End(xlUp).row + 1
report.Sheets(sheetname).Cells(N, "H").Value = adb.Sheets(adbSheet).Cells(i, 3)
End Select
Next
For i = 3 To 8
report.Sheets(sheetname).Columns(i).RemoveDuplicates Columns:=Array(1)
Next
Workbooks("ADB.xls").Close SaveChanges:=False
结束子
问题出在线路上
rownumber = Cells(adb.Sheets(adbSheet).Rows.Count, 1).End(xlUp).row
选择案例中的行将作为
N = report.Sheets(sheetname).Cells(Rows.Count, "C").End(xlUp).row + 1
这些行基本上计算列中的元素。同样,如果我在工作簿打开时运行它,它可以完美运行,但在我实际打开文件时总是抛出错误。
我希望这里有人可以帮助我。
亲切的问候
迈克尔
【问题讨论】:
-
Cells不符合特定工作簿或工作表的条件。因此,它回退到全局Cells,默认使用 whatever worksheet is Active 的Cells对象。未能正确确定对象的范围就像 1004 错误的第一大原因。见this