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