Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 获取订阅超出范围错误_Vba - Fatal编程技术网

Vba 获取订阅超出范围错误

Vba 获取订阅超出范围错误,vba,Vba,检查对话框打开的工作簿文件中是否存在“测试工作表”工作表时,代码运行良好。工作簿文件打开正确&如果该文件中存在“测试工作表”,则debug.print(在子ChkSalfile中)给出“Name is True” 但若工作表在工作簿中不可用,则会出现“订阅超出范围”错误。请帮忙。我的代码如下 Sub Main() Dim salefor As Workbook Dim salpathfileName As String, salfileName As String Di

检查对话框打开的工作簿文件中是否存在“测试工作表”工作表时,代码运行良好。工作簿文件打开正确&如果该文件中存在“测试工作表”,则debug.print(在子ChkSalfile中)给出“Name is True”

但若工作表在工作簿中不可用,则会出现“订阅超出范围”错误。请帮忙。我的代码如下

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分钟的编辑,我再也提不出一个合理的问题了。