Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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 运行时错误9:子脚本超出范围_Vba_Excel - Fatal编程技术网

Vba 运行时错误9:子脚本超出范围

Vba 运行时错误9:子脚本超出范围,vba,excel,Vba,Excel,我正在尝试编写一个vba代码来检查工作簿(a).工作表(a).单元格(行1,列1)=工作簿(B).工作表(B).单元格(行2,列2),然后执行一些复制和进一步检查。 但遇到错误消息“下标超出范围”。 谁能帮我一下吗 以下是代码: Sub check() Dim row1, row2, row1start, row2start, row1end, row2end Dim ws1 As Worksheet ws1 = Excel.Workbooks("A.xlsx").Wor

我正在尝试编写一个vba代码来检查工作簿(a).工作表(a).单元格(行1,列1)=工作簿(B).工作表(B).单元格(行2,列2),然后执行一些复制和进一步检查。 但遇到错误消息“下标超出范围”。 谁能帮我一下吗

以下是代码:

Sub check()
    Dim row1, row2, row1start, row2start, row1end, row2end
    Dim ws1 As Worksheet
    ws1 = Excel.Workbooks("A.xlsx").Worksheets("sheet1")
    Dim ws2 As Worksheet
    ws2 = Excel.Workbooks("B.xlsx").Worksheets("sheet2")
    row1start = 2
    row1end = 43
    row2start = 3
    row2end = 163
    For row1 = row1start To row1end
        For row2 = row2start To row2end
            If ws2.Cells(row2, "I") = ws1.Cells(row1, "H") Then
                ws1.Cells(row1, "I") = 0    'mark true
                ws1.Cells(row1, "M") = ws2.Cells(row2, "K")     'copy

                If ws1.Cells(row1, "C") = ws2.Cells(row2, "J") Then
                    ws1.Cells(row1, "N") = 0    'mark true
                Else
                    ws1.Cells(row1, "N") = ws2.Cells(row2, "J")     'copy
                End If
                Exit For    'if found, then exit 1st loop
            End If
        Next row2

        If row2 >= row2end Then     'if no match, assign value -1
            ws1.Cells(row1, "I") = -1
        End If

        If row2start < row2end Then     'reduce searching times for next row1
            row2start = row2 + 1
        End If   
    Next row1
End Sub
子检查()
暗显行1、行2、行1开始、行2开始、行1结束、行2结束
将ws1设置为工作表
ws1=Excel.工作簿(“A.xlsx”).工作表(“表1”)
将ws2设置为工作表
ws2=Excel.工作簿(“B.xlsx”).工作表(“表2”)
行1开始=2
第1行结束=43
row2start=3
row2end=163
对于第1行=第1行开始到第1行结束
对于第2行=第2行开始到第2行结束
如果ws2.Cells(第2行,“I”)=ws1.Cells(第1行,“H”),则
ws1.单元格(第1行,“I”)=0'标记为真
ws1.Cells(第1行,“M”)=ws2.Cells(第2行,“K”)'复制
如果ws1.Cells(第1行,“C”)=ws2.Cells(第2行,“J”),则
ws1.单元格(第1行,“N”)=0'标记为真
其他的
ws1.Cells(第1行,“N”)=ws2.Cells(第2行,“J”)'复制
如果结束
退出“如果找到,则退出第一个循环”
如果结束
下一行2
如果第2行>=第2行结束,则“如果不匹配,则指定值-1”
ws1.单元格(第1行,“I”)=-1
如果结束
如果row2start
下标超出范围意味着它找不到指定的工作簿、工作表或范围。检查,再检查,再检查你的名字。如果您在这方面遇到错误:
ws1=Excel.Workbooks(“A.xlsx”).Worksheets(“sheet1”)
尝试隔离工作簿和工作表的分配,以查找出现错误的工作表

刚刚发现了和Rory一样的东西;您必须对工作簿、工作表或范围使用
SET
;或任何物体

SET ws1 = Excel.Workbooks("A.xlsx").Worksheets("sheet1")

哪一行给出了错误?对于初学者,需要使用对象变量设置:
Set ws1=Excel.workbook(“A.xlsx”)。工作表(“sheet1”)
例如。Hi Rory。谢谢你的帮助。你好,贝斯特。谢谢你的帮助。为了其他人的利益,第二个错误是,我的文件名是A.xls,它可能不支持VBA(不确定)。我将文件保存为.xlsm,并使用“set”将其工作。