Excel:“;对象变量或未设置块变量";

Excel:“;对象变量或未设置块变量";,excel,vba,Excel,Vba,你知道为什么我在myrange.Copy一行出现这个错误吗 谢谢 Sub nsort() Dim wb As Workbook, ws As Worksheet, myrange As Range Set wb = ActiveWorkbook Set ws = wb.Sheets("Sheet1") Set range_i = Nothing counter = 0 'Find last row TrE = ws.Cells(ws.Rows.Count, "A

你知道为什么我在
myrange.Copy
一行出现这个错误吗

谢谢

Sub nsort()
Dim wb As Workbook, ws As Worksheet, myrange As Range

Set wb = ActiveWorkbook
Set ws = wb.Sheets("Sheet1")
Set range_i = Nothing
counter = 0

'Find last row TrE = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

'Start loop assuming data starts in row 2 and 13 columns wide as in example

For Tr = 2 To TrE

If Not myrange Is Nothing Then
    If ws.Cells(Tr, 13) = 0 Then
        Set myrange = Union(myrange, Range(ws.Cells(Tr, 1), ws.Cells(Tr, 13)))
        counter = counter + 1
    End If
Else
    If ws.Cells(Tr, 13) = 0 Then
        Set myrange = Range(ws.Cells(Tr, 1), ws.Cells(Tr, 13))
        counter = counter + 1
    End If
End If

If Not range_i Is Nothing Then
    If ws.Cells(Tr, 13) > 0 Then
        Set range_i = Union(range_i, Range(ws.Cells(Tr, 1), ws.Cells(Tr, 13)))
    End If
Else
    If ws.Cells(Tr, 13) > 0 Then
        Set range_i = Range(ws.Cells(Tr, 1), ws.Cells(Tr, 13))
    End If
End If
Next Tr

Sheets.Add.Name = "summary"

Set Tws = wb.Sheets("summary")

myrange.Copy

Tws.Range("A1").PasteSpecial

range_i.Copy

Tws.Range(Cells(1 + counter, 1), Cells(1 + counter, 13)).PasteSpecial
End Sub

除Rory的评论外,激活以下行

TrE = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
因此,如果要执行循环,我建议稍微优化代码块,以减少重复:

If Not myrange Is Nothing Then
    If ws.Cells(Tr, 13) = 0 Then
        Set myrange = Union(myrange, Range(ws.Cells(Tr, 1), ws.Cells(Tr, 13)))
        counter = counter + 1
    End If
Else
    If ws.Cells(Tr, 13) = 0 Then
        Set myrange = Range(ws.Cells(Tr, 1), ws.Cells(Tr, 13))
        counter = counter + 1
    End If
End If
可以写成

If ws.Cells(Tr, 13) = 0 Then
    If Not myrange Is Nothing Then
        Set myrange = Union(myrange, Range(ws.Cells(Tr, 1), ws.Cells(Tr, 13)))
    Else
        Set myrange = Range(ws.Cells(Tr, 1), ws.Cells(Tr, 13))
    End If
    counter = counter + 1
End If

第二个
If
块也可以这样做。

您的循环实际上没有运行,因为您从未为
TrE
赋值(您注释掉了执行该操作的行:
TrE=ws.Cells(ws.Rows.Count,“a”).End(xlUp)。行
应该在自己的行上非常感谢!!:-)我已经把它合并在一起了,我真的很感谢你的建议。我也在这里发布了一个新的后续问题,如果你有兴趣看更多@daneee如果这回答了您的问题,请投票/将其标记为已解决: