2014-07-07 80 views
0

我試圖將字符串值(列標題)從另一個工作簿中的4行作爲字幕的工作簿中的複選框,在那裏我運行的代碼複製檢索列標題。這是我迄今爲止,它是不工作,因爲它顯示錯誤消息「下標超出範圍,運行時錯誤9」這裏是我有什麼。彈出錯誤消息後,下面標記的行突出顯示。請有人能幫助我嗎?非常感謝你。不能從另一個工作簿

Function CallFunction(SheetName As Variant) As Long 

Dim text As String 
Dim titles(200) As String ' Dim titles(200) As String ' Array 
Dim nTitles As Integer 
Dim wks As Worksheet 
Dim myCaption As String 

PathName = Range("F22").Value 
Filename = Range("F23").Value 
TabName = Range("F24").Value 

ControlFile = ActiveWorkbook.Name 
Workbooks.Open Filename:=PathName & "\" & Filename 
ActiveSheet.Name = TabName 

Set wks = Workbooks("Filename").Worksheets(SheetName).Activate ' <= Highlights this line **** 

For i = 1 To 199 
    If Trim(wks.Cells(4, i).Value) = "" Then 
     nTitles = i - 1 
     Exit For 
    End If 
     titles(i - 1) = wks.Cells(4, i).Value 
Next 

i = 1 

For Each cell In Range(Sheets("Sheet1").Cells(4, 1), Sheets("Sheet1").Cells(4, 1 + nTitles)) 

    myCaption = Sheets("Sheet1").Cells(4, i).Value 

    With Sheets("Sheet1").checkBoxes.Add(cell.Left, _ 
     cell.Top, cell.Width, cell.Height) 
     .Interior.ColorIndex = 12 
     .Caption = myCaption 
     .Characters.text = myCaption 
     .Border.Weight = xlThin 
     .Name = myCaption 
    End With 

    i = i + 1 
Next 
End Function 
+1

下標出-O f範圍通常表示指定的工作表在工作簿「工作表」集合中不存在。 –

回答

2

標外的範圍通常表明一個指定的工作表不工作簿Worksheets集合中存在。

否則,你確定由FileName指定的工作簿已經打開?如果不是,那會引起同樣的錯誤。確保A)文件已經打開(或使用Workbooks.Open方法打開它),並且B)確保這樣的工作表已經存在(如果不存在,則需要先創建它,然後才能通過以下方式引用它):名稱)。

更新

你有Workbooks("FileName")其中 「filename」 是一個字符串。嘗試將其更改爲簡單Filename(不帶引號)(這似乎是明顯的錯誤)。

另外值得一檢查:

我也觀察到這一行:

ActiveSheet.Name = TabName 

如果SheetName命名的表是活躍工作簿打開時,則該行會有效地將其重命名,所以你將不能夠通過SheetName引用它,而是你必須通過Worksheets(TabName)引用它。另外,翻轉兩條線,讓你激活重命名之前到:

Set wks = Workbooks(Filename).Worksheets(SheetName).Activate 
ActiveSheet.Name = TabName 

對於進一步閱讀:避免使用激活/選擇方法,他們是混亂,使你的代碼更難理解和維護:

How to avoid using Select in Excel VBA macros

如果是這樣的話,那麼你可以做簡單:

Workbooks(Filename).Worksheets(SheetName).Name = TabName 
+0

好吧,我會檢查A)和B) –

+1

也有可能是'ActiveSheet.Name = TabName'實際上是重命名,你希望以後激活的幾行的工作表。 –

+0

非常感謝您的幫助。我的代碼中亂七八糟。 –

相關問題