Excel VBA中的应用程序或对象定义错误

Excel VBA中的应用程序或对象定义错误,vba,excel,Vba,Excel,当我把这段代码输入到宏中时,出现了一个错误,错误消息指出这是一个对象定义的错误。我能知道错误来自哪里吗 Option Explicit Public Const strSA As String = "C:\Users\kentan\Desktop\Managed Fund " Sub iris() Dim i As Long With ActiveSheet With .Range(.Cells(1, "A"), .Cells(.Rows.Count, "A").End(xlUp).

当我把这段代码输入到宏中时,出现了一个错误,错误消息指出这是一个对象定义的错误。我能知道错误来自哪里吗

Option Explicit

Public Const strSA As String = "C:\Users\kentan\Desktop\Managed Fund "

Sub iris()
Dim i As Long
With ActiveSheet
    With .Range(.Cells(1, "A"), .Cells(.Rows.Count, "A").End(xlUp).Offset(0, 1))
        .Sort key1:=.Columns(1), order1:=xlAscending , _
              key2:=.Columns(2), order2:=xlAscending , _
              Header:=xlYes, MatchCase:=False, _
              Orientation:=xlTopToBottom, SortMethod:=xlStroke
    End With

    For i = 2 To .Rows.Count
        If LCase(.Cells(i, "A").Value2) = LCase(.Cells(i - 1, "A").Value2) And _
           LCase(.Cells(i, "A").Value2) <> LCase(.Cells(i + 1, "A").Value2) Then
            newiris .Cells(i, "A").Value2, .Cells(i, "B").Value2
        End If
    Next i
End With
End Sub

Sub newiris(nm As String, nfo As String)
Application.DisplayAlerts = false
With Workbooks.Add
    Do While .Worksheets.Count > 1: .Worksheets(2).Delete: Loop
    .Worksheets(1).Cells(1, "A").Resize(1, 2) = Array(nm, nfo)
    .SaveAs filename:=strSA & nm, FileFormat:=xlOpenXMLWorkbook
    .Close savechanges:=False
End With
Application.DisplayAlerts = true
End Sub
选项显式
Public Const strSA As String=“C:\Users\kentan\Desktop\Managed Fund”
副虹膜()
我想我会坚持多久
使用ActiveSheet
带.Range(.Cells(1,“A”),.Cells(.Rows.Count,“A”).End(xlUp).Offset(0,1))
.Sort key1:=.Columns(1),order1:=xl升序_
键2:=.列(2),顺序2:=xl升序_
标题:=xlYes,匹配案例:=False_
方向:=xlTopToBottom,排序方法:=xlStroke
以
对于i=2到.Rows.Count
如果LCase(.Cells(i,“A”).Value2)=LCase(.Cells(i-1,“A”).Value2)和_
LCase(.Cells(i,“A”).Value2)LCase(.Cells(i+1,“A”).Value2)然后
新虹膜。单元格(i,“A”)。值2。单元格(i,“B”)。值2
如果结束
接下来我
以
端接头
子newiris(nm作为字符串,nfo作为字符串)
Application.DisplayAlerts=false
使用工作簿。添加
Do While.Worksheets.Count>1:。工作表(2)。删除:循环
.工作表(1).单元格(1,“A”).调整大小(1,2)=数组(nm,nfo)
.SaveAs文件名:=strSA&nm,文件格式:=xlOpenXMLWorkbook
.Close savechanges:=False
以
Application.DisplayAlerts=true
端接头

您的问题是您正在阅读整张工作表中的每一行:

i=2到
行数。计数

然后测试该行上某个单元格的值,并将其与下面的行进行比较:

LCase(.Cells(
i+1
,“A”).Value2)

如果您位于最后一行(
1048576
),则无法将其与下一行(
1048577
)进行比较,因为该行不存在

尝试使用:

对于i=2到.Rows.Count
-1

或者更好的是,让它只扫描包含数据的行:


对于i=2到
单元格(.Rows.Count,1)。结束(xlUp)。Row

回答问题并显示任何错误消息的文本。此外,代码示例中似乎存在格式问题。您应该能够调试或单步执行宏,这可能会让您有更多的工作要做。请始终包括错误发生的行,否则我们只能猜测。@FoxfireAndBurnsAndBurns没有像OP那样这样做,
.SaveAs
.Close
将直接与
工作簿中新添加的工作簿交互。在with语句中添加
。从技术上讲,这与使用
Set wb=Workbooks是一样的。添加
并在之后使用
With wb
。@FoxfireAndBurnsAndBurns
With
块可以保存一个对象引用并避免为其声明局部变量-我一直使用
和新的东西
一起使用=)@Adam请您的帖子包括这一点信息,因此人们无需阅读所有评论就可以看到它。谢谢