每次使用时,我在更新UsedRange时遇到问题。我的代码中有这个:
Sheets("Campaign").UsedRange 'Refresh UsedRange
LastRow = Sheets("Campaign").UsedRange.Rows.Count
这是为了检查特定工作表中使用的最后一行。现在,它可以工作并在首次运行时输出正确的整数,但是如果您从具有最高行数的列中删除行,则它不会更新。事实是,如果您向该特定列中添加更多行,它确实会更新。
这是我的实际代码:
Sub CMPGN_MCRO()
Sheets("Campaign").UsedRange 'Refresh UsedRange.
LastRow = Sheets("Campaign").UsedRange.Rows.Count
Dim RangeString As String
Worksheets("Campaign").Select
Range("A1:A" & LastRow).Select
RangeString = Selection.Address
Range("A1").End(xlToRight).Select
RangeString = RangeString & ":" & Selection.Address 'Selects all the data in Campaign Worksheet.
Dim C As Range
i = 2
For Each C In Worksheets("Campaign").Range(RangeString).Cells
If Mid(C.Value, 6, 2) = "AC" Then
Worksheets("Sheet3").Range("A" & i) = C.Value 'Echo out all the filtered data and output it to another worksheet.
i = i + 1
End If
Next
MsgBox (LastRow)
End Sub
PS:我用MsgBox回显了usedRange产生的整数。
最佳答案
尝试将UsedRange命令与此结合:
ActiveCell.SpecialCells(xlCellTypeLastCell).Row
代码SpecialCells(xlCellTypeLastCell)引用工作表上最后使用的单元格。在Excel中,类似的命令是{Ctrl End}。
在您的代码中:
Sheets("Campaign").UsedRange 'Refresh UsedRange
LastRow = Sheets("Campaign").Range("A1").SpecialCells(xlCellTypeLastCell).Row
需要注意的是,有时仅删除数据(Del键)是不够的。尝试实际删除单元格({Ctrl-}或{右键单击Delete})。
另一个代码有效,除非您的工作表填充到最后一行:
LastRow = cells(Sheets("Campaign").Range("A1").SpecialCells(xlCellTypeLastCell).Row,1).offset(1,0).end(xlUp).row
它的作用:从单元格A1中找到最后一个单元格,然后向下确定一个单元格以确保我们在一个空的单元格中,然后使用ctrl-up查找最后一个充满数据的单元格。即使在A列中有一些未正确删除的单元格,也有些混乱,但是可以工作。
关于excel - VBA:UsedRange无法正确更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30524093/