Excel VBA Sub,在多个行和列或数据表中的列上定义范围

时间:2019-02-16 20:48:24

标签: excel vba

在回答this之后,我在Mac版Excel中有一个宏,以便授予对多个文件的文件访问权限。在此示例中,文件路径以文本形式存储在W到Z列中:

Sub requestFileAccess()
    Dim fileAccessGranted As Boolean
    Dim filePermissionCandidates As Variant
    filePermissionCandidates = Application.Transpose(Worksheets("First").Range("W8:W200"))       
    fileAccessGranted = GrantAccessToMultipleFiles(filePermissionCandidates)
End Sub

这对于一列效果很好,即我可以定义Range("W8:W200")。 但是Range("W8:Z200")不起作用。 我该怎么做?

或者更好,因为值在数据表中,所以理想情况下,我希望宏不要引用Range("W8:Z200") 而不是Range("Tablename[Columnname1]") ...等等。 因此,如果添加了新行,则不必修改它。 这可能吗?

1 个答案:

答案 0 :(得分:0)

是的,您可以通过创建命名范围来实现。只需选择整个范围的单元格(顺序/矩阵或更零星的单元格),然后在编辑栏旁边的“名称框” 字段中在字段中键入一个名称(如下所示)... < / p>

矩阵

enter image description here

零星

enter image description here

然后从您的代码中,您可以简单地引用该范围及其所有单元格...

Dim objRange As Range
Set objRange = Range("MyRange")

当您将行或列甚至单个单元格添加到该范围时,它们将被自动拾取。

要编辑范围,请使用以下功能,或者仅要将范围内的行或列插入,就像要将数据添加到工作表中的现有区域时一样。

enter image description here

示例...

Public Sub Test()
    Dim objRange As Range, objCell As Range

    Set objRange = Range("MyRange")

    For Each objCell In objRange
        Debug.Print objCell.Value
    Next
End Sub

使用上述方法,只需确保在VBA中打开“即时”窗口即可查看调试结果。

根据您的情况,试试这个...

Public Sub Test()
    Dim bFileAccessGranted As Boolean, objRange As Range, objCell As Range, arrValues() As Variant, lngIndex As Long

    Set objRange = Range("MyRange")
    lngIndex = -1

    For Each objCell In objRange
        lngIndex = lngIndex + 1
        ReDim Preserve arrValues(lngIndex)

        arrValues(lngIndex) = objCell.Value
    Next

    bFileAccessGranted = GrantAccessToMultipleFiles(arrValues)
End Sub

我希望有帮助。