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如果这回答了您的问题,请投票/将其标记为已解决: