Using MS Access to run code in excel vba

前端 未结 4 1893
迷失自我
迷失自我 2021-01-16 02:36

I pull a query off SQL Server using an access front-end. I then export the recordset to a new Excel workbook. I want to then use excel to run code that I have in Access. It

4条回答
  •  一整个雨季
    2021-01-16 02:57

    If the code you wish to run in Excel always is the same, then open an Excel template with a macro workbook attached holding your code. Then, from Access, you can run a series of macros or, of course, only one macro if only one is passed to the parameter array:

    Function RunExcelMacros( _
      ByVal strFileName As String, _
      ParamArray avarMacros()) As Boolean
    
    Debug.Print "xl ini", Time
    
      On Error GoTo Err_RunExcelMacros
    
      Static xlApp      As Excel.Application
      Dim xlWkb         As Excel.Workbook
    
      Dim varMacro      As Variant
      Dim booSuccess    As Boolean
      Dim booTerminate  As Boolean
    
      If Len(strFileName) = 0 Then
        ' Excel shall be closed.
        booTerminate = True
      End If
    
      If xlApp Is Nothing Then
        If booTerminate = False Then
          Set xlApp = New Excel.Application
        End If
      ElseIf booTerminate = True Then
        xlApp.Quit
        Set xlApp = Nothing
      End If
    
      If booTerminate = False Then
        Set xlWkb = xlApp.Workbooks.Open(FileName:=strFileName, UpdateLinks:=0, ReadOnly:=True)
    
        ' Make Excel visible (for troubleshooting only) or not.
        xlApp.Visible = False 'True
    
        For Each varMacro In avarMacros()
          If Not Len(varMacro) = 0 Then
      Debug.Print "xl run", Time, varMacro
            booSuccess = xlApp.Run(varMacro)
          End If
        Next varMacro
      Else
        booSuccess = True
      End If
    
      RunExcelMacros = booSuccess
    
    Exit_RunExcelMacros:
    
      On Error Resume Next
    
      If booTerminate = False Then
        xlWkb.Close SaveChanges:=False
        Set xlWkb = Nothing
      End If
    
    Debug.Print "xl end", Time
      Exit Function
    
    Err_RunExcelMacros:
      Select Case Err
        Case 0      'insert Errors you wish to ignore here
          Resume Next
        Case Else   'All other errors will trap
          Beep
          MsgBox "Error: " & Err & ". " & Err.Description, vbCritical +
    vbOKOnly, "Error, macro " & varMacro
          Resume Exit_RunExcelMacros
      End Select
    
    End Function
    

    Also, please note that you - as shown above - have to be extremely strict opening, using, and closing the Excel objects and in the correct order. No ActiveWorkbook or the like.

提交回复
热议问题