2014-07-16 75 views
-1

我收到錯誤下標超出範圍(錯誤9)在vba中。我無法找到問題,我到處搜索它。我的代碼要求用戶輸入工作簿名稱,然後在用戶選擇工作表後請求選擇工作表。它將在兩張紙之間複製和粘貼。是否有人可以幫助我,這裏是我的代碼,如果你運行它,那麼你會看到錯誤感謝下標超出範圍(錯誤9)在vba

 Function WorksheetExists(WSName As String) As Boolean 
     On Error Resume Next 
      WorksheetExists = Worksheets(WSName).Name = WSName 
     On Error GoTo 0 
     End Function 

     Sub Button1_Click() 
      Dim shname As String 
      Dim wb As String 
      wb = Application.GetOpenFilename 
       If wb <> "False" Then Workbooks.Open wb 

      Do Until WorksheetExists(shname) 
      shname = InputBox("Enter sheet name") 
       If Not WorksheetExists(shname) Then 
       MsgBox shname & " doesn't exist!", vbExclamation 
       Else 
        WSName = shname 

        Sheets(shname).Select 


     ActiveWorkbook.Worksheets("Sheet1").Cells(1, 1) = Workbooks(Dir(wb)).Worksheets(shname).Cells(1, 1) 


     End If 
      Loop 


     End Sub 
+0

你有「Option Explicit」嗎? (確實如此。) – dcromley

+0

工作簿'book11'從哪裏來?它是否在excel的相同實例中打開? – RowanC

+0

book11這是活動工作簿,並試圖打開另一個工作簿,並選擇一個工作表,然後複製和粘貼兩張紙 – user3793997

回答

0

兩個潛在這裏的問題:

  1. 當你這樣做:Workbooks(wb)wb持有整個文件路徑到您的工作簿。您只需要工作簿的名稱,而不是整個路徑。在最簡單的情況下,您可以用Dir(wb)代替wb,但使用其他方法更通用。有關如何從路徑中提取文件名的信息,請參閱this SO question

  2. 我假設「Book11」是有效的,但您需要確保它適用於所有情況。另外,確保「Sheet1」對「Book11」也有效。這是一些硬編碼索引,我只能假設你沒有問題。

+0

我試着做wb.shname.cells(1,1)= sheets(「 (1,1)仍然相同的錯誤,如果你運行我的代碼,那麼你會看到,它顯示錯誤,當我嘗試複製和粘貼兩張紙 – user3793997

+0

'wb'只是一個字符串,而不是' Workbook'對象,所以'wb.shname'沒有意義。 – djikay

+0

它是一個字符串打開工作簿,然後選擇工作表 – user3793997