Vba 获取订阅超出范围错误
检查对话框打开的工作簿文件中是否存在“测试工作表”工作表时,代码运行良好。工作簿文件打开正确&如果该文件中存在“测试工作表”,则debug.print(在子ChkSalfile中)给出“Name is True” 但若工作表在工作簿中不可用,则会出现“订阅超出范围”错误。请帮忙。我的代码如下Vba 获取订阅超出范围错误,vba,Vba,检查对话框打开的工作簿文件中是否存在“测试工作表”工作表时,代码运行良好。工作簿文件打开正确&如果该文件中存在“测试工作表”,则debug.print(在子ChkSalfile中)给出“Name is True” 但若工作表在工作簿中不可用,则会出现“订阅超出范围”错误。请帮忙。我的代码如下 Sub Main() Dim salefor As Workbook Dim salpathfileName As String, salfileName As String Di
Sub Main()
Dim salefor As Workbook
Dim salpathfileName As String, salfileName As String
Dim fd As Office.FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.AllowMultiSelect = False
.Title = "Please select file."
.Filters.Clear
.Filters.Add "Excel 2003", "*.xls?"
.InitialFileName = "*SAL*.*"
result4 = .Show
If (result4 <> 0) Then
salfileName = Dir(.SelectedItems(1))
salpathfileName = .SelectedItems(1)
Else
'if user pressed CANCEL - exit sub
Application.ScreenUpdating = True
MsgBox "User pressed CANCEL"
Exit Sub
End If
End With
Set salefor = Workbooks.Open(salfileName, ReadOnly:=True)
Call ChkSalfile(salfileName, salefor)
End Sub
Sub ChkSalfile (salfileName As String, salefor As Workbook)
Dim chksalsheet As String
chksalsheet = DoesWorkSheetExist("Test_Worksheet", salfileName)
If chksalsheet = True Then
Debug.Print "Name is " & chksalsheet
Else
Debug.Print "File not found"
End If
End Sub
Option Explicit
Public Function DoesWorkSheetExist(WorkSheetName As String, Optional WorkBookName As String)
Dim WS As Worksheet
On Error Resume Next
If WorkBookName = vbNullString Then
Set WS = Sheets(WorkSheetName)
Else
Set WS = Workbooks(WorkBookName).Sheets(WorkSheetName)
End If
On Error GoTo 0
DoesWorkSheetExist = Not WS Is Nothing
End Function
Sub-Main()
作为工作簿的文档
Dim salpathfileName作为字符串,salfileName作为字符串
将fd设置为Office.FileDialog
Set fd=Application.FileDialog(msoFileDialogFilePicker)
有fd
.AllowMultiSelect=False
.Title=“请选择文件。”
.过滤器
.Filters.Add“Excel 2003”,“*.xls?”
.InitialFileName=“*SAL*”
结果4=.Show
如果(结果4 0),则
salfileName=Dir(.SelectedItems(1))
salpathfileName=.SelectedItems(1)
其他的
'如果用户按下取消-退出子菜单
Application.ScreenUpdating=True
MsgBox“用户按下取消”
出口接头
如果结束
以
设置salefor=Workbooks.Open(文件名,只读:=True)
调用ChkSalfile(salfileName,salefor)
端接头
子ChkSalfile(文件名为字符串,salefor为工作簿)
Dim chksalsheet作为字符串
chksalsheet=DoesWorkSheetExist(“测试工作表”,文件名)
如果chksalsheet=True,则
Debug.Print“Name is”&chksalsheet
其他的
调试。打印“未找到文件”
如果结束
端接头
选项显式
公共函数DoesWorkSheetExist(工作表名称为字符串,可选工作簿名称为字符串)
将WS设置为工作表
出错时继续下一步
如果WorkBookName=vbNullString,则
设置WS=图纸(工作表名称)
其他的
设置WS=工作簿(工作簿名称).Sheets(工作表名称)
如果结束
错误转到0
DoesWorkSheetExist=非WS即无
端函数
VBA项目编辑器中的设置似乎设置为在出现任何错误时中断。将此设置更改为仅在未处理错误时中断:
Tools --> Options --> General Tab --> Error Trapping --> check "Break on Unhadled Errors"
也就是说,当变量是布尔值时,不要将其作为字符串进行暗显
:
Dim chksalsheet As Boolean ' <-- Not as String
Dim chksalsheet As Boolean'VBA项目编辑器中的设置似乎设置为在出现任何错误时中断。将此设置更改为仅在未处理错误时中断:
Tools --> Options --> General Tab --> Error Trapping --> check "Break on Unhadled Errors"
也就是说,当变量是布尔值时,不要将其作为字符串进行暗显
:
Dim chksalsheet As Boolean ' <-- Not as String
Dim chksalsheet As Boolean'哪一行抛出“订阅超出范围”错误?当“测试工作表”不存在时出现错误。我认为当没有找到工作表时,没有定义çhksalsheet(在chkSalFile sub下)变量。哪一行抛出该错误?单击错误消息框中的“调试”按钮,您将进入高亮显示的那一行。另外,代码不工作,由于未定义result4变量,它有编译错误。我试图从中挽救一些东西,但经过30分钟的编辑后,我没有接近一个合理的问题。哪一行抛出“订阅超出范围”错误?当“测试工作表”不存在时会出现错误。我认为当没有找到工作表时,没有定义çhksalsheet(在chkSalFile sub下)变量。哪一行抛出该错误?单击错误消息框中的“调试”按钮,您将进入高亮显示的那一行。另外,代码不工作,由于未定义result4变量,它有编译错误。我试图从中找出一些东西,但经过30分钟的编辑,我再也提不出一个合理的问题了。