Vba 表1.UsedRange古怪
MyVba 表1.UsedRange古怪,vba,excel,range,Vba,Excel,Range,MySheet1在前6行x 5列中包含数据 我添加了一个CommandButton来处理此数据,但是当我尝试使用Sheet1.UsedRange时,它返回的范围是121行x 44列 我在Sheet1中检查了该单元格,它不包含任何数据 为什么Sheet1.UsedRange很奇怪?附近有工作吗 编辑: 我使用的是Sheet1.UsedRange有两种方式: Set rng=Sheet1.UsedRange.Rows(aCell.Row) 用于活页1中的每个C。使用dRange 是我复制这些巨大的F
Sheet1
在前6行x 5列中包含数据
我添加了一个CommandButton
来处理此数据,但是当我尝试使用Sheet1.UsedRange
时,它返回的范围是121行x 44列
我在Sheet1
中检查了该单元格,它不包含任何数据
为什么Sheet1.UsedRange
很奇怪?附近有工作吗
编辑:
我使用的是Sheet1.UsedRange
有两种方式:
Set rng=Sheet1.UsedRange.Rows(aCell.Row)
用于活页1中的每个C。使用dRange
是我复制这些巨大的
Find
语句的唯一希望吗?Excel似乎保留了关于已经使用的范围的信息,而不仅仅是现在正在使用的部分
这应该可以做到:
Dim oRng as Range
WIth Sheets(1)
Set oRng = .Range(.Range("A1").End(xlDown), .Range("A1").End(xlToRight))
End With
除了这些评论之外,这是你正在尝试的吗
Sub Sample()
Dim ws As Worksheet
Dim lCol As Long, rw As Long
'~~> Change this to the relevant worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
With ws
rw = 2 '<~~ Known row
'~~> Find the last column which has data in that row
lCol = .Cells(rw, .Columns.Count).End(xlToLeft).Column
'~~> Address of known row which has data
Debug.Print .Range("A" & rw & ":" & ReturnName(lCol) & rw).Address
End With
End Sub
'~~> Function to return Column letter from column number
Function ReturnName(ByVal num As Integer) As String
ReturnName = Split(Cells(, num).Address, "$")(1)
End Function
子样本()
将ws设置为工作表
变暗lCol尽可能长,rw尽可能长
“~~>将此更改为相关工作表
设置ws=ThisWorkbook.Sheets(“Sheet1”)
与ws
rw=2'具有数据的已知行的地址
Debug.Print.Range(“A”&rw&“:”&ReturnName(lCol)&rw.Address
以
端接头
“~~>函数从列编号返回列字母
函数ReturnName(ByVal num作为整数)作为字符串
ReturnName=Split(单元格(,num).Address,“$”)(1)
端函数
如果你想把它设为一个范围,那么像这样
Sub Sample()
Dim ws As Worksheet
Dim lCol As Long, rw As Long
Dim rng As Range
Dim sAddress As String
'~~> Change this to the relevant worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
With ws
rw = 2 '<~~ Known row
'~~> Find the last column which has data in that row
lCol = .Cells(rw, .Columns.Count).End(xlToLeft).Column
'~~> Address of known row which has data
sAddress = .Range("A" & rw & ":" & ReturnName(lCol) & rw).Address
'~~> Set Range
Set rng = .Range(sAddress)
End With
End Sub
'~~> Function to return Column letter from column number
Function ReturnName(ByVal num As Integer) As String
ReturnName = Split(Cells(, num).Address, "$")(1)
End Function
子样本()
将ws设置为工作表
变暗lCol尽可能长,rw尽可能长
变暗rng As范围
朦胧的女鞍
“~~>将此更改为相关工作表
设置ws=ThisWorkbook.Sheets(“Sheet1”)
与ws
rw=2'具有数据的已知行的地址
sAddress=.Range(“A”&rw&“:”&ReturnName(lCol)&rw)。地址
“~~>设置范围
设置rng=.范围(鞍座)
以
端接头
“~~>函数从列编号返回列字母
函数ReturnName(ByVal num作为整数)作为字符串
ReturnName=Split(单元格(,num).Address,“$”)(1)
端函数
评论的后续行动
Sub Sample()
Dim ws As Worksheet
Dim lCol As Long, rw As Long
Dim rng As Range
'~~> Change this to the relevant worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
With ws
rw = 2 '<~~ Known row
'~~> Find the last column which has data in that row
lCol = .Cells(rw, .Columns.Count).End(xlToLeft).Column
'~~> Set Range
Set rng = .Range(.Cells(rw, 1), .Cells(rw, lCol))
Debug.Print rng.Address
End With
End Sub
子样本()
将ws设置为工作表
变暗lCol尽可能长,rw尽可能长
变暗rng As范围
“~~>将此更改为相关工作表
设置ws=ThisWorkbook.Sheets(“Sheet1”)
与ws
rw=2'设定范围
设置rng=.Range(.Cells(rw,1),.Cells(rw,lCol))
调试.打印注册表地址
以
端接头
explainion要获得准确的范围,请找到最后一行和最后一列,然后构建范围。如果您仍然不确定,请告诉我,然后我将给您一个如何构建范围的示例。@SiddharthRout#2很容易完成,但我对VBA是新手,而且#1适合我。我只想能够提取已知行的UsedRange
。看起来这应该比我正在编造的讨厌的查找要容易些。你说的“使用一排”是什么意思?示例A1:Z1
?实际上是在任何范围内查找最后一个单元格(从而构造一个范围)的标准方法:)这是查找范围的错误方法。如果中间有空白单元格呢?如果只有A1有数据,这也会给您带来不想要的结果。你最终会选择整个工作表单元格。我最好的办法是使用字符串构造?请原谅我对VBA的无知,我的母语是C++,通过字符串来获得数字将被认为是禁忌。这只是一个例子:你可以做为<代码>设置RNG=范围(“a”和rw &::&返回名称(LCOL)和RW)< /C>我刚才提到的字符串结构是该行中的所有&
以及ReturnName
中的拆分。还有一种方法:)让我为您更新代码。请参阅另一个答案下面的注释;)