Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 表1.UsedRange古怪_Vba_Excel_Range - Fatal编程技术网

Vba 表1.UsedRange古怪

Vba 表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

My
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
    中的
    拆分
    。还有一种方法:)让我为您更新代码。请参阅另一个答案下面的注释;)