Как вернуть массив в функцию в VBA - Excel - PullRequest
0 голосов
/ 09 января 2019

основная цель - копировать имя листа в массив, и массив переходит от функции к основному коду, чтобы иметь возможность отслеживать новые имена добавленных листов в массив и работать с ними соответственно

Public Function CountWorksheets() As String
Dim i, size As Integer
Dim Arr() As String
size = Worksheets.Count
ReDim Arr(size)
For i = 1 To Worksheets.Count
    Arr(i) = Worksheets(i).Name
Next i
CountWorksheets = Arr
End Function



Private Sub RunLoc_Click()
Dim ar() As String
ReDim ar(Worksheets.Count)
j = 1
If Not IsEmpty(Location.Value) Then
    RunLoc.Enabled = True
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = Location.Value Then
            Worksheets(i).Select
            Range("a1").Select
        End If
    Next i
    ar = CountWorksheets()
End If
TextBox1.Value = Location.Value

End Sub

Я ожидаю, что Arr и CountWorksheets с одинаковым массивом будут записаны в обе функции, и когда вызывается CountWorksheets, общая сумма массива копируется в новый, который называется ar.

1 Ответ

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

Вам необходимо вернуть вариант или String (). Также настройте массив так, чтобы он начинался с 1

ReDim Arr(1 To size)

В противном случае у вас будет пустая позиция при запуске. Или выполните необходимые вычеты, чтобы начать с 0.

Option Explicit

Public Function CountWorksheets() As Variant
    Dim i, size As Integer
    Dim Arr() As String
    size = Worksheets.Count
    ReDim Arr(1 To size)
    For i = 1 To Worksheets.Count
        Arr(i) = Worksheets(i).NAME
    Next i
    CountWorksheets = Arr
End Function

Private Sub RunLoc_Click()
    Dim ar() As String
    ReDim ar(Worksheets.Count)

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