Функция VBA Macro вне диапазона - PullRequest
0 голосов
/ 30 января 2019
Function getNames()
    Dim  wbThis As Workbook,  arr() As Variant, i As Long
    Set wbThis = ThisWorkbook
    For i = 1 To 50
        arr(i) = wbThis.Sheets("Sheet1").Cells(6, i).Value
    Next i

    For i = 1 To 50
        MsgBox "employee names are***** ." + arr(i)
    Next i
End Function

У меня есть код моего макроса VBA на Листе 1. На листе 1 у меня есть одна кнопка. При нажатии кнопки я вызвал функцию getNames.На листе 1 у меня есть все значения строк и столбцов. Но когда я запускаю, он показывает

индекс из-за ошибки диапазона / времени выполнения '9'

Я много пробовал.У кого-нибудь есть идеи на этот счет.

1 Ответ

0 голосов
/ 30 января 2019

Вам необходимо присвоить некоторый размер массиву вариантов.

Function getNames()
    Dim wbThis As Workbook, i As Long

    Set wbThis = ThisWorkbook

    redim arr(1 to 50) As Variant

    For i = lbound(arr) To ubound(arr)
        arr(i) = wbThis.Sheets("Sheet1").Cells(6, i).Value
    Next i

    For i = lbound(arr) To ubound(arr)
        MsgBox "employee names are***** ." & arr(i)
    Next i
End Function

ReDim может использоваться без Dim в первую очередь.От LBound до UBound - более универсальный метод циклического прохождения статического массива от нижней границы до верхней границы.Амперсанд & является предпочтительным оператором для конкатенации строк.

Функции предназначены для возврата значения.Это может быть лучше, чем процедура sub.

Вы можете 'заполнить' массив, вызвав функцию из подпрограммы.

sub main()

    dim i as long, nms as variant

    nms = getNames()

    For i = lbound(nms) To ubound(nms)
        MsgBox "employee names are***** ." & nms(i)
    Next i

end sub

Function getNames()
    Dim  wbThis As Workbook,  i As Long

    Set wbThis = ThisWorkbook

    redim arr(1 to 50) As Variant

    For i = lbound(arr) To ubound(arr)
        arr(i) = wbThis.Sheets("Sheet1").Cells(6, i).Value
    Next i

    getnames = arr

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