#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. Теперь понял! Спасибо.