【问题标题】:how to specify a range in vba using a cell value in excel如何使用excel中的单元格值在vba中指定范围
【发布时间】:2015-04-05 04:06:22
【问题描述】:

我对 vba 很陌生,基本上只在修改范围值时使用它(之前在 excel 中使用宏记录了脚本)。由于我在 excel 中添加/删除行,我必须转到 vba 脚本并手动更新范围部分。因此,如果我在 excel 表上的范围从 A2:R83 扩展到 A2.R84,那么我更新的部分之一是:

Range("A2:R83").Select

收件人:

Range("A2:R84").Select

有没有一种方法可以指定 vba 可以从中获取范围值的单元格?例如,我可以在 excel 工作表单元格 X1 上输入 A2 并在单元格 Y2 上输入 R84 并拥有 vba脚本引用这些单元格来确定当前范围?

感谢任何帮助!

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我相信这会做你想要的,:

    Sub test()
      Dim s1 As String, s2 As String
    
      s1 = Sheet1.Range("A1"): s2 = Sheet1.Range("B1")
    
      Range(s1 & ":" & s2).Select
    End Sub
    

    但是,如果 A1 和 B1 中的值不是有效的单元格名称,您将遇到麻烦,因此进行一些输入验证可能是个好主意。

    【讨论】:

    • 谢谢!这完美!是的,我确实明白,如果这些值无效,这可能是一个问题,但更新这些值比脚本本身需要几秒钟左右的时间。完整的基本代码现在如下所示: Dim s1 As String, s2 As String s1 = Sheet1.Range("F1"): s2 = Sheet1.Range("G1") Range(s1 & ":" & s2).Select With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _ "C:\Users\jim\Desktop\macrotest.mht", "Sheet1", s1 & ":" & s2, _ xlHtmlStatic, "macrotest_26340", "") .Publish (True ) .AutoRepublish = False End With End Sub
    【解决方案2】:

    我发现使用 INDIRECT 可以使验证范围动态化。

    1.- 在您选择的位置(在示例中我在 sheet1 中使用 X1)放置

    ="'Sheet1'!"&"A2:"&"R"&COUNTA(R1:R2000)
    

    我把 R2000 放在有足够的空间以防范围扩大,换成适合你的尺寸。此公式的结果将是一个范围。由于Counta,每次您在 R 中添加新内容时,它的大小都会发生变化。

    2.- 记录时在验证部分放置此公式。

    =INDIRECT('Sheet'!$X$1)  
    

    这使得验证读取基于 x1 所说的范围。

    【讨论】:

      【解决方案3】:

      这将计算你的范围,

      Sub SelectRng()
          Dim Rws As Long, Rng As Range
      
          Rws = Cells(Rows.Count, "A").End(xlUp).Row
          Set Rng = Range(Cells(2, "A"), Cells(Rws, "R"))
      
      
          Rng.Select    'or whatever you want to do with it.
      
      
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2016-03-16
        • 1970-01-01
        • 2023-01-20
        • 2015-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多