Sub Main()
Dim sheet As Worksheet
Range("A5:E273").Select
'I want to dynamically get all the columns instead of hard-coding to
'E273, say there are 400 and might increase later.
Range(sheet).Select
End
答案 0 :(得分:1)
嗯,你有两个相互矛盾的问题:
"我想动态获取所有列..."
这并不代表我认为这句话的含义:
" E273,说有400,可能会在以后增加"
所以你要求获得所有列的第一点......第二点似乎是你指的是行。我将采取有根据的猜测并假设您的意图是行,因为剩余的(非常)提供了最小代码(A5:E273
)。
您可以使用此功能轻松获取任何列中的最后一行:
Function LastRow(ByVal ws As Worksheet, Optional ByVal col As Variant = 1) As Long
With ws
.Cells(.Rows.Count, col).End(xlUp).Row
End With
End Function
我建议不要在Excel中使用也称为对象的变量,在您的情况下,您声明sheet
。如果您在VBE中键入Sheet
并按 F1 ,您会看到它是半保留的属性名称:
返回指定的PublishObject对象的工作表名称。只读字符串。
<强>语法强>
表达 .Sheet
expression 表示 PublishObject 对象的变量。
<强>说明强>
此示例确定包含第一个 PublishObject 对象的工作表的名称,该对象在网页中保存为静态HTML。然后,该示例将布尔变量blnSheetFound设置为 True 。如果文档中没有项目保存为静态HTML,则blnSheetFound False 。
相反,您应该考虑另一个变量,例如ws
。
所以,你的最终结果如下:
Option Explicit
Function LastRow(ByVal ws As Worksheet, Optional ByVal col As Variant = 1) As Long
With ws
.Cells(.Rows.Count, col).End(xlUp).Row
End With
End Function
Sub Main()
Dim ws As Worksheet, myRng As Range
Set ws = ThisWorkbook.Worksheets(1)
Set myRng = ws.Range("A5:E" & LastRow(ws))
myRng.Select
End