2012-08-16 76 views
0

我打開4個運行宏的不同xlsm文件。 該宏從單元中讀取數據。 這些宏可以單獨工作,但它們會一起搞砸。 因爲vba多張衝突

Cells(1, 1).Value 

從活動片取出,而不是從我想要的片材。

反正是有spicify像

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

材料了嗎?

編輯:(感謝瘸子) 我試圖

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

宏是否打開文件? – 2012-08-16 14:30:43

+0

考慮使用此處所述的Excel對象模型:http://stackoverflow.com/a/7402165/649687 – JMax 2012-08-16 14:34:32

回答

2

是,使用:

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

更新 其任您的工作簿或工作表名稱不是w工作會有。

嘗試msgbox Workbooks("example1.xlsm").name如果這樣工作,那麼您的問題可能與sheets()部分。如果它沒有,那麼你可能需要完全符合條款Workbooks("C:/Folder1/example1.xlsm")

+0

缺少工作簿中的「s」? – 2012-08-16 14:38:47

+0

謝謝。 @SiddharthRout – danielpiestrak 2012-08-16 14:43:53

+0

我試過=>設置oWorkSheet = Workbooks(「RT_stocks.xlsm」)。表(「股票」) – devmonster 2012-08-16 15:07:36

3

是的這是一個非常普遍的問題,如果你沒有完全限定你的對象。我們舉個例子吧。如果我們有4個工作簿,並且所有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等,然後根據上面提到的工作。