Sub VBA Excel, определение диапазона для нескольких строк и столбцов или столбцов в таблице данных - PullRequest
0 голосов
/ 16 февраля 2019

После этого ответа у меня есть макрос в Excel для Mac, чтобы предоставить доступ к файлам нескольким файлам.Пути к файлам хранятся в виде текста в столбцах с 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 голосов
/ 17 февраля 2019

Да, вы можете сделать это, создав именованные диапазоны.Просто выберите целый диапазон ячеек, последовательных / матричных или более единичных, и введите имя в поле (как показано ниже) в поле «Имя» рядом со строкой формулы ...

Матрица

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...