Gustav Brock
gustav at cactus.dk
Thu Mar 6 02:49:00 CST 2003
Hi Oleg > Guys, Well, as a warning, that excludes a handful or so very distinct and competent listers ... > I need to be able to update links in excel workbook from Access form. > Does anyone how it is possible ? Yes, run a function something like the one below which is based on a similar function from Mr. Colby. First, run it with a list of your macros: booSuccess = RunExcelMacros( _ "L:\PCO\YieldInterpolation.xls", _ "GetRates", "GetRates2") Next, run it to terminate Excel: booSuccess = RunExcelMacros( _ vbNullString, _ vbNullString) You can, of course, modify the function to run Excel and then terminate in one go. <code> 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 is to be terminated. 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 here errors you wish to ignore. Resume Next Case Else ' All other errors will trap. DoCmd.Beep MsgBox "Error: " & Err & ". " & Err.Description, vbCritical + vbOKOnly, "Running macro " & varMacro Resume Exit_RunExcelMacros End Select End Function </code> Beware of line breaks. /gustav > Private Sub cmdUPY_Click() > DoCmd.RunMacro "GetRates" > refresh L:\PCO\YieldInterpolation.xls > DoCmd.RunMacro "GetRates2" > End Sub