Excel VBA在office 2007中抛出的下标超出范围,但在office 2013中没有

Excel VBA在office 2007中抛出的下标超出范围,但在office 2013中没有,excel,vba,Excel,Vba,我有一个排行榜电子表格,用户可以使用它来整理几个事件的结果(结果电子表格)。用户单击按钮从另一个电子表格中获取结果,这将运行显示文件对话框的子例程(msoFileDialogFilePicker)以获取结果文件的路径,然后子例程打开文件并在尝试提取分数之前执行一些基本检查。 在office 2013(初始开发环境)中,一切似乎都正常工作,但当我尝试在office 2007中测试电子表格的兼容性时(因为某些用户可能无法使用excel的最新版本),当vba子例程打开结果电子表格文件时,我遇到了一个错

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

我已经搜索了许多有关vba错误9(下标超出范围)问题的答案,但似乎找不到解释excel 2007和2013之间出现问题的答案。正如我所说的,在Office 2013中一切都很好

错误在第行抛出:-

If tmpWB.Worksheets("Sheet1").Name <> "Gala Results" Then
如果tmpWB.工作表(“表1”)。名称为“Gala结果”,则
工作表名称的拼写正确,工作表存在于结果文件等中

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
Sub-Gala1\u获取结果\u单击()
Dim MSG_响应,MSG_覆盖为整数
暗淡响应,覆盖为布尔值
Dim sumTeamA、sumTeamB、sumTeamC、sumTeamD、sumTeamE作为字符串
将sht_结果、sht_摘要显示为工作表
Dim rng_结果团队、rng_sumTeam、cel、rng_tmpTeams、rng_AGTeam As范围
将tmpWB设置为工作簿
将tmp_计分卡、tmp_计分卡、tmp_计分卡、tmp_团队计分卡、tmp_团队计分卡作为
整数
Dim tmp_团队、tmp_部门、str_部门作为字符串
'一些代码保存在这里以获取文件名并检查它是否已被删除
“以前用过的等等。
'打开结果文件
设置tmpWB=工作簿。打开(strResultsPath)
'检查文件是否有正确的工作表
如果tmpWB.工作表(“表1”)。名称为“Gala结果”,则
'工作表不存在,打开的文件错误'
MsgBox“所选文件中不存在工作表Gala结果,&”
vbCrLf&_
“请检查所选文件是否为有效的gala结果文件。”,
vbOKOnly,“获取结果-错误”
出口接头
如果结束
设置sht_结果=工作簿(tmpWB.Name)。工作表(“Gala结果”)
设置rng_ResultsTeam=sht_Results.Range(“F17、I17、L17、O17、R17”)
tmp_分割=sht_结果范围(“C10”)值
'这里有更多代码用于提取分数值并将其放入
'表中的正确位置
端接头

如上文
tmpWb.工作表(“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

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

什么是
tmpWb
您将其设置为打开
stresultspath
,但我看不到该变量的定义位置?它是一个公共变量吗?之所以出现这种情况,是因为在
Set tmpWB=Workbooks.Open(strResultsPath)
中没有路径,而您的tmpWB是空的。因此,
tmpWB.Worksheets(“Sheet1”)。Name
Name将始终是
Sheet1
您引用的是否有误?你是指
tmpWb.Sheets(1).Name
还是
Sheet1.Name
?是否存在名为
Sheet1
的工作表?您好,Tom,stresultspath是一个全局字符串变量。当我调试代码时,如果在本地窗口中导航到tmpWB.worksheets(1).name,它会显示正确的“Gala Results”字符串。@JKelly43你知道为什么
tmpWB.worksheets(“Sheet1”)。name
总是“Sheet1”?您已经使用图纸名称“Sheet1”引用了图纸,然后要求对象返回其
名称
问题现已解决!太谢谢你了。。按照您的建议,错误处理会更好。我还认为我错误地使用了tmpWB.工作表(“Gala结果”)而不是tmpWB.工作表(“Gala结果”)。@JKelly43我不认为这会有多大区别。两者之间唯一的真正区别是
工作表
只能用于网格和线的图纸;其中,
工作表
将参考
图表
工作表
,我现在明白了,谢谢,另外,结果文件中不存在“Sheet1”。。。