无法从其他工作簿中检索列标题

时间:2014-07-07 20:50:31

标签: excel-vba vba excel

我正在尝试将第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 个答案:

答案 0 :(得分:2)

下标超出范围通常表示工作簿Worksheets集合中不存在指定的工作表。

否则,您确定FileName指定的工作簿是否已打开?如果没有,那将引发同样的错误。

确保A)文件已经打开(或使用Workbooks.Open方法打开它),并且B)确保这样的工作表已经存在(如果没有,你需要先创建它然后才可以按名称引用它。

<强>更新

您有Workbooks("FileName")其中&#34;文件名&#34;是一个字符串文字。尝试将其更改为Filename(不带引号)(这看起来像是OBVIOUS错误)。

还值得一试:

我也观察到这一行:

ActiveSheet.Name = TabName

如果工作簿打开时SheetName指定的工作表活动,那么该行将有效地重命名它,因此您无法通过{{1}引用它但是,您必须通过SheetName引用它。或者,翻转两行,以便在重命名之前激活

Worksheets(TabName)

进一步阅读:避免使用Activate / Select方法,它们令人困惑,使您的代码难以解释和维护:

How to avoid using Select in Excel VBA macros

如果是这种情况,那么你可以做到:

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