0

我正在打开 4 个运行宏的不同 xlsm 文件。宏从单元格中读取数据。宏单独工作,但在一起会搞砸。因为

Cells(1, 1).Value

取自活动工作表,而不是我想要的工作表。

反正有没有像

workbook("example1").sheet("sheet1").Cells(1, 1).Value
workbook("example2").sheet("sheet1").Cells(1, 1).Value

?

编辑:(感谢Gimp)我试过了

Dim oWorkSheet As Worksheet    
Set oWorkSheet = Workbooks("example1.xlsm").Sheets("sheet1")
    oWorkSheet.Cells(1, 1).Value

并出现运行时错误

"Object doesn't support this property and method"
4

2 回答 2

3

是的,如果您没有完全限定您的对象,这是一个非常常见的问题。让我们举个例子。如果我们有 4 个工作簿并且所有四个工作簿都有名为“Sheet1”的工作表,那么我们应该如何确保从正确的单元格中获取数据?

Cells(1, 1).Value

将始终从当前活动工作表中获取数据,这可能不是您真正想要的工作表。

如果您通过宏打开 4 个文件,那么这是正确的做法。

Sub Sample()
    Dim wb1 As Workbook, wb2 As Workbook, wb3 As Workbook, wb4 As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, ws4 As Worksheet

    Set wb1 = Workbooks.Open("C:\File1.xlsx")
    Set ws1 = wb1.Sheets("Sheet1")

    Set wb2 = Workbooks.Open("C:\File2.xlsx")
    Set ws2 = wb2.Sheets("Sheet1")

    Set wb3 = Workbooks.Open("C:\File3.xlsx")
    Set ws3 = wb3.Sheets("Sheet1")

    Set wb4 = Workbooks.Open("C:\File4.xlsx")
    Set ws4 = wb4.Sheets("Sheet1")

    '~~> Now you can work with the relevant cells
    Debug.Print ws1.Cells(1, 1).Value
    Debug.Print ws2.Cells(1, 1).Value
    Debug.Print ws3.Cells(1, 1).Value
    Debug.Print ws4.Cells(1, 1).Value
End Sub

如果您没有通过宏打开这四个文件,您仍然可以将它们设置为 wb1、wb2 等,然后按上述方式工作。

于 2012-08-16T14:36:33.377 回答
2

是的,使用:

workbooks("example1.xlsm").sheets("sheet1").Cells(1, 1).Value
workbooks("example2.xlsm").sheets("sheet1").Cells(1, 1).Value

更新 您的工作簿或工作表名称不起作用。

尝试msgbox Workbooks("example1.xlsm").name如果可行,那么您的问题可能与该sheets()部分有关。如果没有,那么您可能需要完全限定该部分,例如Workbooks("C:/Folder1/example1.xlsm")

于 2012-08-16T14:28:52.820 回答