我正在打开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"
答案 0 :(得分:3)
是的,如果您没有完全限定对象,这是一个非常常见的问题。我们来举个例子吧。如果我们有4个工作簿,并且所有四个都有Sheet称为“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等,然后按上述方式工作。
答案 1 :(得分: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")