На моем листе я нажимаю кнопку, кнопка запускает ниже 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.