2012-12-09 201 views
0

我對VBA相當新,所以這可能是一個愚蠢的問題。 我在我的用戶表單上有兩個按鈕,一個用於搜索文件,一個用於輸入。 (這只是我正在做的簡化)。每當我收到錯誤'下標超出範圍',但我不知道爲什麼。誰能幫幫我嗎?非常感謝VBA下標超出範圍

Public file as Variant 

Private Sub cmdBrowse_Click() 
file = Application.GetOpenFilename 
If file = False Then 
    MsgBox "There is no file selected.", vbCritical, "Warning" 
End If 
End Sub 

Private Sub cmdInput_Click() 
Cells(2, 2).Value = Workbooks(file).Worksheets(1).Cells(2, 2).Value 
End Sub 
+2

「(這只是我在做什麼的簡化)。」 - 張貼實際的代碼... –

+0

但問題是,總是在相同的地點。它始終是「Cells(2,2).Value = Workbooks(file).Worksheets(1).Cells(2,2).Value」這是給出錯誤。我只是想不通爲什麼 – user1888663

+2

你可以在調試器中一步一步...我懷疑它是'文件' –

回答

0

從Excel的幫助 - 「顯示標準的打開對話框,並從用戶得到的文件名沒有真正打開任何文件。」您需要打開工作簿,所以像:

Private Sub cmdBrowse_Click() 
file = Application.GetOpenFilename 
If file = False Then 
    MsgBox "There is no file selected.", vbCritical, "Warning" 
    Exit Sub 
End If 
Workbooks.Open file 
End Sub 

編輯:Application.Workbooks屬性纔會完整的文件路徑,這是由GetOpenFileName返回。所以在第二個子文件中,你不需要整個文件路徑。您的代碼應該從完整路徑只提取該文件的名稱:

Private Sub cmdInput_Click() 
Dim FileName as string 

FileName = Mid(file,InStrRev(file,Application.PathSeparator)+1,99) 
Cells(2, 2).Value = Workbooks(FileName).Worksheets(1).Cells(2, 2).Value 
End Sub 
+0

謝謝,但它仍然是相同的。 – user1888663

+0

編輯。如果這不起作用,請自行進行一些調試,以便您可以提供一些細節。 –

+0

這工作!非常感謝!但我真的不明白你在那裏做了什麼..是不是你想要文件的名稱? 所以從字符串'文件'你想要一個從InStrRev(文件,Application.PathSeparator)+1.99開始的較小的字符串'文件名'。 InStrRev返回Application.PathSeperator從'file'中右邊的位置。但爲什麼是+1,99? – user1888663