如何在 VBA 中声明 Excel 范围?
How to declare Excel range in VBA?
所以我丢失了所有 VBA 笔记,并且在重做这里的一些逻辑时遇到问题,如果这看起来很基础,我深表歉意。我试图找到设置顶部并找到列中最后填充的单元格并将它们都设置在我的范围内以便能够将其复制并粘贴到日志中。当我到达 MYRANGE
部分时,我得到:
error 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
正如我提到的,我试图将我的范围设置为 "Top" 和 "Bottom" 或 "LastRow" 这样我就不必担心的实际大小数据并将其复制并粘贴到另一个工作表。
设置范围时不要使用 .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
在 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
将它们写入下一列,如果单元格的样式和格式很重要,那么这可能不是所需要的嗯。
所以我丢失了所有 VBA 笔记,并且在重做这里的一些逻辑时遇到问题,如果这看起来很基础,我深表歉意。我试图找到设置顶部并找到列中最后填充的单元格并将它们都设置在我的范围内以便能够将其复制并粘贴到日志中。当我到达 MYRANGE
部分时,我得到:
error 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
正如我提到的,我试图将我的范围设置为 "Top" 和 "Bottom" 或 "LastRow" 这样我就不必担心的实际大小数据并将其复制并粘贴到另一个工作表。
设置范围时不要使用 .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
在 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
将它们写入下一列,如果单元格的样式和格式很重要,那么这可能不是所需要的嗯。