Excel VBA 在 Office 2007 中抛出下标的范围,但在 Office 2013 中则不然



我有一个排行榜电子表格,用户使用它来整理多个事件的结果(结果电子表格)。 用户单击一个按钮从另一个电子表格获取结果,这将运行显示文件对话框的子例程 (msoFileDialogFilePicker) 以获取结果文件的路径,然后子例程打开文件并在尝试提取分数之前执行一些基本检查。 在 office 2013(初始开发环境)中一切似乎都运行良好,但是当我尝试在 Office 2007 中测试电子表格的兼容性时(因为某些用户可能不是最新版本的 excel),当结果电子表格文件由 vba 子例程打开时,我收到错误。

我已经搜索了许多与vba错误9(下标超出范围)问题相关的答案,但我似乎找不到可以解释为什么excel 2007和2013之间存在问题的答案。 正如我所说,在Office 2013中一切正常。

错误在以下行抛出:-

If tmpWB.Worksheets("Sheet1").Name <> "Gala Results" Then

工作表名称的拼写正确,工作表存在于结果文件中等。

Sub Gala1_GetResults_Click()
Dim MSG_Response, MSG_Overwrite As Integer
Dim Response, Overwrite As Boolean
Dim sumTeamA, sumTeamB, sumTeamC, sumTeamD, sumTeamE As String
Dim sht_Results, sht_Summary As Worksheet
Dim rng_ResultsTeams, rng_sumTeam, cel, rng_tmpTeams, rng_AGTeam As Range
Dim tmpWB As Workbook
Dim tmp_ScoreCol, tmp_ScoreRow, tmp_Score, tmp_TeamCol, tmp_TeamRow As 
Integer
Dim tmp_Team, tmp_Division, str_Division As String
'some code lives here to get the filename and check it hasn't been 
'previously used etc.
'open the results file
Set tmpWB = Workbooks.Open(strResultsPath)
'check the file has the correct sheet
If tmpWB.Worksheets("Sheet1").Name <> "Gala Results" Then
'sheet doesn't exist, wrong file openend
MsgBox "Worksheet Gala Results not present in selected file," & 
vbCrLf & _
"please check file selected is a valid gala results file.", 
vbOKOnly, "Get Results - Error"
Exit Sub
End If
Set sht_Results = Workbooks(tmpWB.Name).Worksheets("Gala Results")
Set rng_ResultsTeams = sht_Results.Range("F17,I17,L17,O17, R17")
tmp_Division = sht_Results.Range("C10").Value
'more code lives here to extract the score values and to place them in 
'the correct location in the table
End Sub

任何帮助将不胜感激

如上面的评论中所述tmpWb.Worksheets("Sheet1").Name总是会导致Sheet1。我怀疑您正在尝试查找工作表Gala Results是否存在于工作簿中,并且在您的同事机器上丢失了它,您的代码正在测试是否"Sheet1" = "Gala Results"因此它没有检测到工作表丢失。

以下可能是解决此问题的更好方法

Dim GalaResults as Worksheet
On Error Resume Next
Set GalaResults = tmpWb.Sheets("Gala Results")
On Error Goto 0
If GalaResults is Nothing Then
' .... Your code to handle the missing sheet

使用错误处理,我将所需的工作表设置为变量。然后我测试这个变量是否为空。

最新更新