Переменная не устанавливается, если debug.print не был выполнен первым - PullRequest
0 голосов
/ 28 октября 2019

На моем листе я нажимаю кнопку, кнопка запускает ниже Sub. Который должен прочитать строку и столбец местоположения нажатой кнопки, а затем всплывающее окно сообщения с содержимым скрытой ячейки в той же строке.

Когда этот код выполняется, переменная ipfвсегда остается строкой «initial», если я не добавлю оператор debug.print. Я могу debug.print любой из переменных (ipf, row_no, col_no), и переменная ipf установлена ​​отлично.

После того, как я добавил debug.print, щелкнул соответствующуюКнопка, чтобы получить правильный результат, затем удалил debug.print, он продолжает работать, пока я не перезагружу лист.

Я пробовал приводить в качестве строки в случае, если это проблема, но я просто не понимаюпочему он это делает.

По сути, лист заполнен до трех кнопок в каждой строке, при нажатии одной из этих кнопок этот код захватывает строку и столбец нажатой кнопки, чтобы получить значениеячейка, которая будет одной из трех строк;«Начальный», «Предварительный» или «Финальный». Используя эту строку (в переменной ipf), он попадет в один из случаев, чтобы извлечь строку из другой ячейки в этой строке, чтобы показать ее в окне сообщения.

Если debug.print не существует,ipf var равен всегда «Начальный».

Public Sub showDefinitionMsgBox()
    Dim obj As Object, _
        row_no As Long, _
        col_no As Long, _
        wsMain As Worksheet 'This is the worksheet were using

    ' Get the row and column of the clicked button
    Set obj = ActiveSheet.Buttons(Application.Caller)
    row_no = obj.TopLeftCell.row
    col_no = obj.TopLeftCell.column

    ' Grab the name (e.g. INitial, Prelim, Final)
    ' When a button is clicked, we pull the value from the cell under the button.
    ' It will be either "Initial", "Prelim" or "Final"
    Set wsMain = ActiveWorkbook.Sheets("MainSheet")
    Dim ipf As String
    ipf = CStr(wsMain.Cells(row_no, col_no).Value)

    ' Get the element name
    ' This simply get's a string, which is the name of the row
    Dim element As String
    element = wsMain.Cells(row_no, 12).Value

    ' Withouth this, ipf is _always_ "initial"
    Debug.Print ipf

    ' Pull the text from the dictionary
    ' 13 = init, 14 = prelim, 15 = final
    ' Using the above ipf variable, set the message text as the content
    ' of another cell in the wsMain sheet.
    Dim message As String
    Select Case ipf
        Case "Initial":
            message = wsMain.Cells(row_no, 13).Value
        Case "Prelim":
            message = wsMain.Cells(row_no, 14).Value
        Case "Final":
            message = wsMain.Cells(row_no, 15).Value
        Case Else
            message = "Cannot find that element type:"
    End Select


    ' Show the message box
    ' @TODO: Update this to UserForm for more space
    MsgBox message, vbOKOnly, element
End Sub

Я ожидаю, что значение из правильной ячейки появится в msgbox, но я всегда получаю значение из первого случая, если я не добавлю строку debug.print.

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