Всем добрый день! Делаю окошко для отправки запросов к БД. Все гуд, решил сделать глобальные переменные чтобы пользователь один раз вводил свои установки (пароль, драйвер,..) а програма до закрытия ексель-файла их запоминала и тут вылезла проблемка.
Когда запускаю диалоговое окно через процедуру, глобальные переменные не прописвываються, а когда запускаю "напрямую" из ВБА все нормально. Подскажите пожалуйста что я делаю не правильно:
Инициализация переменных:
Код |
---|
Private Sub Workbook_Open()
driverFormMySQL = "MySQL ODBC 5.3 Unicode Driver"
ipFormMySQL = "127.0.0.1"
databaseFormMySQL = "database1"
userFormMySQL = "root"
passwordFormMySQL = "1111"
queryFormMySQL = ""
End Sub
|
Module1: (Обявление переменных и процедура вызова окна)
Код |
---|
Option Explicit
Public driverFormMySQL As String
Public ipFormMySQL As String
Public databaseFormMySQL As String
Public userFormMySQL As String
Public passwordFormMySQL As String
Public queryFormMySQL As String
Sub Start()
FormMySQL.Show
End Sub
|
FormMySQL:
Код |
---|
Private Sub ButExecute_Click()
Const title = "Ðåçóëüòàò çàïèòó"
connection = "ODBC;DRIVER={" & Trim(TxtDriver.text) & "};SERVER=" & Trim(TxtIP.text) & ";DATABASE=" & Trim(TxtDatabase.text) & ";USER=" & Trim(TxtUser.text) & ";PASSWORD=" & Trim(TxtPassword.text) & ";"
Dim table As ListObject
Dim x As Range
Worksheets.Add
On Error GoTo Errhandler
Set table = ActiveSheet.ListObjects.Add(xlSrcExternal, connection, True, xlYes, Range("A2"))
With table.QueryTable
.CommandType = xlCmdSql
.CommandText = TxtQuery.text
.Refresh False
.Delete
End With
Set x = Range(Cells(1, 1), Cells(1, (Cells(2, Columns.Count).End(xlToLeft).Column)))
With x
.Merge
.HorizontalAlignment = xlCenter
.Font.Bold = True
.Value = title
End With
Range("A1").AddComment TxtQuery.text
Range("A1").Comment.Visible = False
Unload FormMySQL
Exit Sub
Errhandler:
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
MsgBox "Íà æàëü, òðàïèëàñÿ ïîìèëêà - " & Err & vbNewLine & Err.Description, vbOKOnly, "Ïîìèëêà"
End Sub
Private Sub UserForm_Initialize()
TxtDriver.text = driverFormMySQL
TxtIP.text = ipFormMySQL
TxtDatabase.text = databaseFormMySQL
TxtUser.text = userFormMySQL
TxtPassword.text = passwordFormMySQL
TxtQuery.text = queryFormMySQL
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
driverFormMySQL = Trim(TxtDriver.text)
ipFormMySQL = Trim(TxtIP.text)
databaseFormMySQL = Trim(TxtDatabase.text)
userFormMySQL = Trim(TxtUser.text)
passwordFormMySQL = Trim(TxtPassword.text)
queryFormMySQL = Trim(TxtQuery.text)
End Sub
|