打开工作簿后在Excel中运行宏

打开工作簿后在Excel中运行宏,excel,vba,Excel,Vba,我想在工作簿打开后立即运行宏,因为出于某些原因,宏需要在打开工作簿之前运行宏工作簿_激活不是一个选项,因为宏会打开其他文件,因此会导致无限循环 如果我从VBA编辑器运行宏,它工作得非常好,但它总是抛出 运行时错误1004:对象\u Global的方法单元格无效 失败 当我真正打开工作簿时 这是我使用的代码: Private Sub Workbook_Open() Call updateColumn("sheet", "Tabelle2", 1, 2) Call updateColumn(

我想在工作簿打开后立即运行宏,因为出于某些原因,宏需要在打开工作簿之前运行宏<代码>工作簿_激活不是一个选项,因为宏会打开其他文件,因此会导致无限循环

如果我从VBA编辑器运行宏,它工作得非常好,但它总是抛出

运行时错误1004:对象
\u Global
的方法
单元格
无效 失败

当我真正打开工作簿时

这是我使用的代码:

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
这些行基本上计算列中的元素。同样,如果我在工作簿打开时运行它,它工作得很好,但在实际打开文件时总是抛出错误

我希望这里有人能帮助我

问候


Michael

单元格
不符合特定工作簿或工作表的要求。因此,它返回到全局
单元格
,默认情况下使用任何工作表的
单元格
对象。未能正确确定对象的范围就像是1004个错误的#1原因。看

更改此项:

Set adb = Workbooks.Open(report.Path & "/ADB.xls")
rownumber = Cells(adb.Sheets(adbSheet).Rows.Count, 1).End(xlUp).row
因为在上面的
单元格
语句中,
单元格
指的是
ActiveSheet
(默认情况下),它可能是也可能不是
adbSheet
名称。如果该工作表未激活,则会出现错误

为此,为了确保您已将
单元格限定为
adb
工作簿对象和
adbSheet
工作表

Set adb = Workbooks.Open(report.Path & "/ADB.xls")
With adb.Sheets(adbSheet)
    rowNumber = .Cells(.Rows.Count,1).End(xlUp).Row
End With

单元格
不符合特定工作簿或工作表的要求。因此,它返回到全局
单元格
,默认情况下使用任何工作表的
单元格
对象。未能正确确定对象的范围就像是1004个错误的#1原因。谢谢你的回复。rownumber现在可以工作了,但是错误现在会出现在thte
N=report.Sheets(sheetname).Cells(Rows.Count,“E”).End(xlUp).row+1
中,我不完全确定如何修复它,因为它应该只计算“E”列中的条目。这两个问题的性质是相同的。您有
行。再次计数
,该行不符合特定工作表的条件。
单元格
范围
,等等,这些都是
工作表
的子对象/属性,如果您没有针对特定工作表显式分配它们,Excel总是会将它们解释为
ActiveSheet.
,由于许多原因,这很容易失败。在这种情况下,您试图定义一个跨多个工作表的范围,这是不允许的。非常感谢,我已经解决了。它现在工作得很好。