Несколько автоматических модулей запускаются при открытии файла Excel, но запускается только один запуск (VBA) - PullRequest
0 голосов
/ 10 июля 2019

У меня есть два макроса (обновление данных, отправка в SQL), которые я ожидаю запустить при открытии файла Excel. Однако только один работает на открытии. Мне нужно вручную запустить второй модуль. Зачем? Спасибо

В настоящее время они находятся в разных модулях

Sub Auto_Open()
ActiveWorkbook.RefreshAll
End Sub
------------
Private Sub SendtoSQL()

Dim cn As ADODB.connection
Dim ServerName As String
Dim DatabaseName As String
Dim TableName As String
Dim UserID As String
Dim Password As String
Dim rs As ADODB.recordset
Dim RowCounter As Long
Dim NoOfFields As Integer
Dim StartRow As Long
Dim EndRow As Long
Dim ColCounter As Integer

Set rs = New ADODB.recordset

ServerName = "xxx" ' Enter your server name here
DatabaseName = "xxx" ' Enter your  database name here
TableName = "xxx" ' Enter your Table name here
UserID = "xxx" ' Enter your user ID here
' (Leave ID and Password blank if using windows Authentification")
Password = "xxx" ' Enter your password here
NoOfFields = 43 ' Enter number of fields to update (eg. columns in your worksheet)
StartRow = 2 ' Enter row in sheet to start reading  records
EndRow = 37 ' Enter row of last record in sheet

 '  CHANGES
Dim shtSheetToWork As Worksheet
Set shtSheetToWork = ActiveWorkbook.Worksheets("Sheet2")
 '********

Set cn = New ADODB.connection

cn.Open "Driver={SQL Server};Server=" & ServerName & ";Database=" & DatabaseName & _
";Uid=" & UserID & ";Pwd=" & Password & ";"

cn.Execute "delete from " + TableName


rs.Open TableName, cn, adOpenKeyset, adLockOptimistic

 'EndRow = shtSheetToWork.Cells(Rows.Count, 1).End(xlUp).Row
For RowCounter = StartRow To EndRow
    rs.AddNew
    For ColCounter = 1 To NoOfFields
    'On Error Resume Next
        rs(ColCounter - 1) = shtSheetToWork.Cells(RowCounter, ColCounter)
    Next ColCounter
    Debug.Print RowCounter
Next RowCounter
rs.UpdateBatch

 ' Tidy up
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

End Sub

1 Ответ

0 голосов
/ 11 июля 2019

Как сказал BigBen, просто добавьте его к Auto_Open следующим образом:

Sub Auto_Open()
    ActiveWorkbook.RefreshAll
    Call SendToSQL
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...