@@ -417,12 +417,12 @@ Private Sub ImportFilesFromImportCollection( _
417417 If (0 / 1 ) + (Not Not m_CLI.ExecuteList) Then
418418 AccessProgressBar.Init "Run executes ..." , UBound(m_CLI.ExecuteList) + 1 , 1
419419 For i = 0 To UBound(m_CLI.ExecuteList)
420- AccessProgressBar.PerformStep
421- If StringTools.Contains(m_CLI.ExecuteList(i), REPOSTITORY_ROOT_CODE_PRIVATEROOT) Then
422- Eval VBA.Strings.Replace(m_CLI.ExecuteList(i), REPOSTITORY_ROOT_CODE_PRIVATEROOT, LocalRepositoryRootDirectory())
423- Else
424- Eval ( m_CLI.ExecuteList(i) )
425- End If
420+ AccessProgressBar.PerformStep
421+ If StringTools.Contains(m_CLI.ExecuteList(i), REPOSTITORY_ROOT_CODE_PRIVATEROOT) Then
422+ ApplicationRunProcedure VBA.Strings.Replace(m_CLI.ExecuteList(i), REPOSTITORY_ROOT_CODE_PRIVATEROOT, LocalRepositoryRootDirectory())
423+ Else
424+ ApplicationRunProcedure m_CLI.ExecuteList(i)
425+ End If
426426 Next
427427 If AccessProgressBar.IsInitialized Then AccessProgressBar.Clear
428428 End If
@@ -438,6 +438,99 @@ Private Sub ImportFilesFromImportCollection( _
438438
439439End Sub
440440
441+ Private Sub ApplicationRunProcedure (ByVal ProcedureCall As String )
442+
443+ If InStr(1 , ProcedureCall, "." ) Then
444+ If TryRunAddInProcedure(ProcedureCall) Then
445+ Exit Sub
446+ End If
447+ End If
448+
449+ CallApplicationRun ProcedureCall
450+
451+ End Sub
452+
453+ Private Function TryRunAddInProcedure (ByVal ProcedureCall As String ) As Boolean
454+
455+ Dim AddInFilePath As String
456+
457+ ProcedureCall = Replace(ProcedureCall, "%addins%" , Environ$("appdata" ) & "\Microsoft\AddIns" , , , vbTextCompare)
458+ ProcedureCall = Replace(ProcedureCall, "%appdata%" , Environ("appdata" ), , , vbTextCompare)
459+
460+ AddInFilePath = Left(ProcedureCall, InStrRev(ProcedureCall, "." )) & "accda"
461+ If Len(VBA.Dir(AddInFilePath)) = 0 Then
462+ If Mid(ProcedureCall, 2 , 1 ) = ":" Then ' is an add-in call, but add-in is not available => ignore it
463+ VBA.MsgBox "Add-in '" & AddInFilePath & "' is not available, procedure call is skipped" , vbInformation, "Call procedure skipped"
464+ TryRunAddInProcedure = True
465+ End If
466+ Exit Function
467+ End If
468+
469+ TryRunAddInProcedure = True
470+ CallApplicationRun ProcedureCall
471+
472+ End Function
473+
474+ Private Function CallApplicationRun (ByVal ProcedureCall As String )
475+
476+ Dim ProcName As String
477+ Dim ProcParams() As String
478+ Dim ParamCount As Long
479+
480+ ParamCount = GetProcNameAndParams(ProcedureCall, ProcName, ProcParams)
481+
482+ Select Case ParamCount
483+ Case 0
484+ Application.Run ProcName
485+ Case 1
486+ Application.Run ProcName, ProcParams(0 )
487+ Case 2
488+ Application.Run ProcName, ProcParams(0 ), ProcParams(1 )
489+ Case 3
490+ Application.Run ProcName, ProcParams(0 ), ProcParams(1 ), ProcParams(2 )
491+ Case 4
492+ Application.Run ProcName, ProcParams(0 ), ProcParams(1 ), ProcParams(2 ), ProcParams(3 )
493+ Case Else
494+ Err.Raise vbObjectError, "ACLibFileManager.CallApplicationRun" , "Only 4 parameters implemented"
495+ End Select
496+
497+ End Function
498+
499+ Private Function GetProcNameAndParams (ByVal ProcedureCall As String , ByRef ProcName As String , ByRef ProcParams() As String ) As Long
500+
501+ Dim ProcParamString As String
502+ Dim ParamPos As Long
503+
504+ ProcedureCall = Replace(ProcedureCall, "()" , vbNullString)
505+
506+ ParamPos = InStr(1 , ProcedureCall, "(" )
507+
508+ If ParamPos = 0 Then
509+ ProcName = ProcedureCall
510+ GetProcNameAndParams = 0
511+ Exit Function
512+ End If
513+
514+ ProcName = Left(ProcedureCall, ParamPos - 1 )
515+ ProcParamString = Trim(Mid(ProcedureCall, ParamPos + 1 ))
516+
517+ If Right(ProcParamString, 1 ) = ")" Then
518+ ProcParamString = Left(ProcParamString, Len(ProcParamString) - 1 )
519+ End If
520+
521+ ProcParams = Split(ProcParamString, "," )
522+
523+ Dim i As Long
524+ For i = LBound(ProcParams) To UBound(ProcParams)
525+ ProcParams(i) = Trim(ProcParams(i))
526+ If Left(ProcParams(i), 1 ) = """" Then
527+ ProcParams(i) = Mid(ProcParams(i), 2 , Len(ProcParams(i)) - 2 )
528+ End If
529+ Next
530+
531+ GetProcNameAndParams = UBound(ProcParams) + 1
532+
533+ End Function
441534
442535Private Function IgnoreFolder (ByRef TestFolder As Object ) As Boolean
443536'/*
0 commit comments