VBA - функция вызывается в зависимости от ее позиции в коде - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь создать функцию Excel, которая будет заполнять столбец данными, собранными из отчетов OGame. Я столкнулся с грубым поведением (по крайней мере, с моей точки зрения). У меня есть форма, где пользователь может копировать свои отчеты в текстовое поле формы. После нажатия кнопки должны запуститься следующие функции:

Option Explicit

Private Sub CommandButton1_Click()
    Dim arr() As String
    Dim test As Boolean
    Dim str As String

    str = testFunction()
    arr = readData(Raporty.Value)

'    Dim element As Variant
'    For Each element In arr
'        Debug.Print element
'        Debug.Print "-------------------------------"
'    Next element

    test = writeData(arr)
    Debug.Print (test)
    Debug.Print ("str: " + str)

    Unload ufWczytajRaporty
End Sub

Private Function testFunction() As String
    Debug.Print ("testFunction")
    testFunction = "testFunctionText"
End Function

Private Function writeData(arr1() As String) As Boolean
    Debug.Print ("writeData")

    For Each element In arr1
        writeDataRow (element)
    Next element

    writeData = True
End Function

Private Function readData(text As String) As String()
    Debug.Print ("readData")

    Dim list As Object
    Dim substr As Integer
    Dim temp As String
    Dim arr(0 To 10) As String
    Dim result() As String
    Dim counter As Integer
    Set list = CreateObject("System.Collections.ArrayList")
    counter = 0

    If text = "" Then
        MsgBox "Dane nie mogą być puste! Proszę uzupełnić poprawnymi raportami!", vbCritical
    Else
        If InStr(1, text, "Przybył statek handlowy") = 1 Then
            While (InStr(1, text, "Towar został już odebrany."))
                substr = InStr(1, text, "Towar został już odebrany.") + 26
                arr(counter) = Left(text, substr)
                temp = Mid(text, substr, Len(text))
                text = temp
                counter = counter + 1
            Wend
            Unload ufWczytajRaporty
        Else
            MsgBox "Niepoprawne raporty! Proszę wkleć dobre raporty!", vbCritical
        End If
    End If

    ReDim result(0 To counter)
    Dim i As Integer
    For i = 0 To counter
        result(i) = arr(i)
    Next i

    readData = arr
End Function

Эти функции обеспечивают следующий результат в Immediate:

 testFunction
 readData
 False
 str: testFunctionText

Как вы можете видеть выше, false - это вызов writeData fuction, однако он никогда не входил в функцию. Функция writeData содержит Debug.Print («writeData»), но она никогда не отображалась. Кроме того, если я меняю местами следующую функцию:

str = testFunction()
arr = readData(Raporty.Value)

на

arr = readData(Raporty.Value)
str = testFunction()

testFunction не вызывается, а.

Может кто-нибудь объяснить мне, что происходит? Почему эти функции не вызываются?

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