2013-11-24 176 views
0

我使用VBA在Excel中創建了自定義函數。我試圖使用Workbooks.Open(path)命令從不同的工作簿中獲取數據。這裏是我的代碼:Excel VBA無法訪問外部工作簿上的工作表

Option Explicit 

Function TestFunction() As String 
    mySub 
    TestFunction = "Success." 
End Function 


Sub mySub() 

    Dim path As String 
    Dim wk As Workbook 

    path = "C:\Users\jg\Desktop\machine_data.xlsm" 
    Set wk = Workbooks.Open(path) 

    Dim ws As Worksheet 
    Set ws = wk.Sheets(1) 
    Debug.Print ws.Range("A2") 
End Sub 


Sub Test() 
    Debug.Print (TestFunction()) 
End Sub 

現在我的問題是這樣的:

當我運行Sub Test()從Excel一切VBA環境內的工程按計劃進行。打開machine_data.xlsm,調試中出現A2字段。

一旦我找到工作簿,並在其中定義了此模塊並鍵入=TestFunction()到一個單元格中,我得到一個#VALUE!。該文件也不會被打開。

如果我評論這兩條線:

Set ws = wk.Sheets(1) 
    Debug.Print ws.Range("A2") 

上就會顯示Success!,但文件仍打不開。

我在做什麼錯?這兩個工作簿都是.xlsm文件。我使用的是Microsoft Office Excel 2007中

+1

一個UDF只能返回一個值 - 看看[This](http://stackoverflow.com/questions/6045826/excel-vba-function-to-turn-activecell-to-bold)。 – DaveU

+0

@DaveU我已閱讀過這個是的,但不是打開一個外部工作簿,只從它讀取,並根據讀取值返回一個不同的值允許?因爲這似乎不可能。我不更改'machine_data.xlsm'文件中的任何值。 – Octoshape

+0

@DaveU沒關係我選擇了不同的解決方法(見下面我自己的答案) – Octoshape

回答

0

由於DaveU已經聲明UDF只能返回值。我發現了一個不同的解決方法,只需從VBA環境中調用該函數,即可根據需要修改單元格內容。

0

只要將一切從mySub進入測試功能,如果一切順利有測試函數返回單元格的值。所以testFunc = ws.Range(「A2」)。

+0

仍然得到'#VALUE!''複製到mySub''TestFunction()'時。 – Octoshape