所以我丢了我所有的VBA笔记,并且在这里重做一些逻辑时遇到了问题,如果这看起来很基础,我深表歉意。我试图找到顶部,找到一列中最后一个填充的单元格,并将它们都设置在我的范围内,以便能够将其复制并粘贴到日志中。当我进入MYRANGE
部分时,我会得到:
错误1004
我尝试使用更基本的选择来实现我想做的事情,但是原始数据永远不会有相同的大小,因此我想回到这里尝试看看是否可以得到帮助。
Sub CopyRows()
Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim MYRANGE As Range
Dim Top, Bottom, Left, Right As Long
Set sht = Worksheets("Data")
sht.Activate
Set Top = Range("B2")
LastRow = Cells(Rows.Count, "B").End(xlUp).Select
Set MYRANGE = Range("Top", "LastRow").Select.Copy
End Sub
正如我所提到的,我试图将范围设置为“顶部”和“底部”或“最后一行”,这样我就不必担心数据的实际大小并将其复制并粘贴到上面了。到另一个工作表。
答案 0 :(得分:2)
设置范围时,请勿使用.Select
或.Copy
在其他范围内使用可变范围时,请勿使用""
请勿使用.Activate
或.Select
Sub CopyRows()
Dim sht As Worksheet
Dim LastRow As Range
Dim LastColumn As Long
Dim MYRANGE As Range
Dim Top As Range, Bottom As Range, Left As Range, Right As Range
Set sht = Worksheets("Data")
Set Top = sht.Range("B2")
Set LastRow = sht.Cells(Rows.Count, "B").End(xlUp)
Set MYRANGE = sht.Range(Top, LastRow)
'Now you can do something with MYRANGE like MYRANGE.Copy
End Sub
答案 1 :(得分:0)
在 general 情况下,在Excel中用两个单元格或一个单元格定义一个范围。定义单个单元格范围需要一个单元格,多个单元格范围需要两个单元格。
在您的情况下,您需要在Excel中有两个单元格范围,因此需要定义范围的左上单元格和右下单元格:
下面的代码定义了左上单元格(startRange
)和右下单元格(endRange
):
然后它定义myRange
,因为这两个之间的所有单元格都位于四边形中:
Sub TestMe()
Dim wks As Worksheet
Dim lastRow As Long
Dim startRange As Range
Dim endRange As Range
Dim myRange As Range
Set wks = Worksheets("Data")
lastRow = wks.Cells(wks.Rows.Count, "B").End(xlUp).Row
Set startRange = wks.Range("B2")
Set endRange = wks.Range("B" & lastRow)
Set myRange = wks.Range(startRange, endRange)
Debug.Print myRange.Address
myRange.Offset(0, 1).Value = myRange.Value
End Sub
代码的其他要点:
.Select
或.Activate
(How to avoid using Select in Excel VBA)wks.Range("B2")
myRange.Offset(0, 1).Value = myRange.Value
到下一列,如果单元格的样式和格式也很重要,则可能不需要。