Как мне учитывать разные варианты выбора в Excel VBA?

#excel #vba #mysql-workbench

#excel #vba #mysql-workbench

Вопрос:

То, что я хочу сделать, просто. Я хотел бы, чтобы пользователь предоставил действительный ввод («IR1» или «IR2» или «IR3»), появилось всплывающее сообщение с надписью «IR1 выбрано» или «IR2 выбрано» или «IR3 выбрано», затем пользователь нажал кнопку отправки, и отчет должен быть заполнентаблица и соответствующие данные из базы данных MySQL.

Вот код VBA, который у меня есть сейчас

 Sub querydatafromMySQL_Report_2()

Dim cntMyConnection As ADODB.Connection
Set cntMyConnection = New ADODB.Connection
cntMyConnection.ConnectionString = "DRIVER={MySQL ODBC 8.0 ANSI 
Driver};Server=localhost;Database=ie465hw3;Uid=root; pwd=12345678; OPTION=3;"

cntMyConnection.Open
Dim rstFirstRecordset As ADODB.Recordset
Set rstFirstRecordset = New ADODB.Recordset
 Dim src As String

src = InputBox("Please Enter RoomID", "Room ID")
If src = Empty Then Exit Sub

Select Case src
Case "IR1"
src = "SELECT * FROM exam WHERE StartTime>'17:00:00' AND RoomID = 'IR1'"
MsgBox "Room IR1 Selected "


Case "IR2"
src = "SELECT * FROM exam WHERE StartTime>'17:00:00' AND RoomID = 'IR2'"
MsgBox "Room IR2 Selected "


Case "IR3"
RoomID = "SELECT * FROM exam WHERE StartTime>'17:00:00' AND RoomID = 'IR3'"
MsgBox "Room IR3 Selected "

Case Else
MsgBox "Invalid RoomID, choose either RoomID: IR1, IR2, or IR3"


End Select

rstFirstRecordset.Open Source:=src, ActiveConnection:=cntMyConnection
 Worksheets("Report_2").Activate
 Dim column As Integer, row As Integer
 With ActiveSheet

 row = 11
 While Not rstFirstRecordset.EOF
 For column = 1 To rstFirstRecordset.Fields.Count
 .Cells(row, column) = rstFirstRecordset(column - 1).Value
 Next column
 rstFirstRecordset.MoveNext
 row = row   1
 Wend
 End With
 Set rstFirstRecordset = Nothing
 cntMyConnection.Close
 Set cntMyConnection = Nothing
 MsgBox "MySQL DB Connected amp; Data Report Printed"
 End Sub
 

IR1 и IR2 работают нормально, но когда я указываю «IR3», я получаю эту ошибку

Ошибка

Затем, когда я пытаюсь отладить, это первая строка кода, к которой она переходит, в чем проблема?

  rstFirstRecordset.Open Source:=src, ActiveConnection:=cntMyConnection
 

Вот как это должно выглядеть, прежде чем пользователь что-либо сделает
Пользовательский интерфейс -Предварительный отчет

Вот как это должно выглядеть после того, как пользователь предоставил действительный ввод и нажал кнопку отправки. Пользовательский интерфейс-Пост-отчет

Комментарии:

1. У вас слишком много «вариантов выбора». Выберите регистр должен быть записан только один раз, затем регистр…. Случай… Смотрите Пример внизу в документации docs.microsoft.com/en-us/office/vba/language/reference / … не уверен, что проблема в этом, но, по крайней мере, это неверно. Итак, начните с исправления этого. Я полагаю, что вы сделали то, что вложили свои обращения. Таким образом, случай 1 должен быть истинным для оцениваемого случая 2 и так далее. И этого не может быть.

Ответ №1:

Правильный синтаксис

 Select Case src
    Case "IR1"
        ' Code here
    Case "IR1"
        ' Code here
    Case "IR1"
        ' Code here
    Case Else
        ' Code here
End Select        
 

Комментарии:

1. Теперь понял! Спасибо.