【问题标题】:excel vba set range as currentregionexcel vba将范围设置为currentregion
【发布时间】:2015-06-11 12:06:44
【问题描述】:

我正在尝试将范围设置为等于当前区域。下面的代码有效,但激活命令改变了我不想要的焦点。如果我删除了最后一行的激活命令 excel 崩溃。下面的代码在一个类模块和一个更大的子模块的一部分中。有什么建议吗?

worksheets(SHT).activate  'stops the runtime error but changes sheet  
With Worksheets(SHT)
        With .Range(TBL2).CurrentRegion
            .Cells = Data
        End With
    End With

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    有很多代码丢失,但您可以使用类似这样的方法将二维变量数组(例如 Data)的内容传输到当前区域。

    With Worksheets(SHT)
        With .Range(TBL2).CurrentRegion
            .Cells = Data
        End With
    End With
    

    由于不能保证 Data 和 .CurrentRegion 的大小相同,因此这可能会更好,

    With Worksheets(SHT)
        With .Range(TBL2).resize(ubound(Data, 1), ubound(Data, 2))
            .Cells = Data
        End With
    End With
    

    鉴于 Data 二维数组的范围是未知的,因此很难更精确。

    经测试:

    Sub collect_change_dump()
        Dim SHT As String, TBL2 As String, v As Long, w As Long, Data As Variant
        SHT = "Sheet1"
        TBL2 = "D3"
        With Worksheets(SHT)
            With .Range(TBL2).CurrentRegion
                Data = .Cells.Value
            End With
            For v = LBound(Data, 1) To UBound(Data, 1)
                For w = LBound(Data, 2) To UBound(Data, 2)
                    Data(v, w) = "blah"
                Next w
            Next v
            With .Range(TBL2).Resize(UBound(Data, 1), UBound(Data, 2))
                .Cells = Data
            End With
        End With
    End Sub
    

    【讨论】:

    • 谢谢,第一个代码运行良好且整洁得多。仅供参考,数组的大小与其他代码提取数据的大小相同,对其进行操作,然后使用此子将其粘贴回工作表中。
    • 很高兴你得到了整理。刚刚进行了一些快速测试,调整大小的排名(例如 12)的顺序正确。
    • 不幸的是,仍然存在错误。如果光标位于我想将数据复制到(正确的工作表处于活动状态)的选项卡上,则代码有效。但是,如果另一个选项卡处于活动状态,那么 excel 会崩溃?该电子表格在 excel v2010 中运行良好,但我已经更新了笔记本电脑和软件,现在在 v2013 中运行它。我也有可能相关的用户表单问题。有什么建议吗?
    • 如果我将worksheets(SHT).activate 添加到代码的开头,我不会收到运行时错误......知道为什么吗?
    • 我刚刚在 XL 2013 上用几个工作表进行了尝试,没有遇到任何问题。不过,我没有在不止一个工作簿上尝试过,找到工作表可能是个问题。请参阅上面的基准测试代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多