AW: Systemp-Variable benötigt
02.06.2008 11:54:00
horrscht6
Danke René!
Die Funktion Environ() kannte ich noch gar nicht. Problem gesamt dennoch nun etwas anders gelagert und noch nicht gelöst:
Folgende Sub:
Sub ExportModul(Optional ByVal Debugging As Boolean = False)
Dim TmpPath As String, Path1 As String, Path2 As String, FallBack, modFileName As String, _
CRLF As String
Const ActiveModule = "modGeneralFunctions"
CRLF = Chr(13) & Chr(10)
FallBack = "C:\"
Path1 = Environ("tmp")
Path2 = Environ("temp")
If Dir(Path1, vbDirectory) "" Then
TmpPath = Path1 & "\"
Else
If Dir(Path2, vbDirectory) "" Then
TmpPath = Path2 & "\"
Else
TmpPath = FallBack
End If
End If
If Debugging = True Then Debug.Print "ActiveWorkbook.Name=" & ActiveWorkbook.Name: Debug. _
Print "ThisWorkbook.Name=" & ThisWorkbook.Name
modFileName = TmpPath & ActiveModule & ".bas"
' Die alten Module im Ziel werden entfernt, bevor die neuere Version reinkopiert wird
On Error GoTo ErrM1
Err.Clear
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents(" _
mGeneralFunctions")
On Error GoTo ErrM2
Err.Clear
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents( _
ActiveModule)
On Error GoTo ErrM3
Err.Clear
ThisWorkbook.VBProject.VBComponents(ActiveModule).Export modFileName
On Error GoTo ErrM4
Err.Clear
ActiveWorkbook.VBProject.VBComponents.Import modFileName
On Error GoTo ErrM5
Err.Clear
Kill modFileName
On Error GoTo 0
If Debugging = True Then Debug.Print "Modul " & Chr(34) & ActiveModule & Chr(34) & " wurde _
kopiert!" & CRLF & CRLF
Exit Sub
ErrM1:
If Debugging = True Then Debug.Print "M1: Remove of " & Chr(34) & "mGeneralFunctions" & Chr( _
34) & " fails or not existent": Debug.Print " #" & Err.Number & ": " & Err.Description & CRLF
Resume Next
ErrM2:
If Debugging = True Then Debug.Print "M2: Remove of " & Chr(34) & "modGeneralFunctions" & Chr( _
34) & " fails or not existent": Debug.Print " #" & Err.Number & ": " & Err.Description & CRLF
Resume Next
ErrM3:
If Debugging = True Then Debug.Print "M3: EXPORT of " & Chr(34) & "modGeneralFunctions" & Chr( _
34) & " fails": Debug.Print " #" & Err.Number & ": " & Err.Description & CRLF
Resume Next
ErrM4:
If Debugging = True Then Debug.Print "M4: IMPORT of " & Chr(34) & "modGeneralFunctions" & Chr( _
34) & " fails or not existent": Debug.Print " #" & Err.Number & ": " & Err.Description & CRLF
Resume Next
ErrM5:
If Debugging = True Then Debug.Print "M5: Deleting of " & Chr(34) & modFileName & Chr(34) & " _
fails or not existent": Debug.Print " #" & Err.Number & ": " & Err.Description & CRLF
Resume Next
End Sub
Beim Aufruf des Moduls oben (Bestandteil eines AddIn), während ein normales Excel-Dokument geöffnet ist, kommt es zu folgendem Fehler:
Fehler: Laufzeitfehler '1004': Der programmatische Zugriff auf das Visual Basic-Projekt ist nicht sicher.
Viele Antworten im Forum liefern mir folgende Aussage:
du musst im Menü Extras, Makro, Sicherheit, Vertrauenswürdige Quellen den Haken bei
Zugriff auf Visual Basic Projekt vertrauen setzen.
Das stimmt, dann funktioniert mein Makro auch, ABER:
Es laden sich einige Leute aus den Abteilungen mein AddIn auf ihren PC und wollen dann mit oben aufgeführter Funktion über eine Funktion in der Symbolleiste das eine AddIn-Modul automatisch in ihr lokales Excel-Dokument kopieren. Es müßte also erst für jeden PC eine Anweisung erstellt werden, wenn dieses Modul kopiert werden möchte, wie Sicherheitseinstellungen zu verändern sind. Geht das Kopieren des Moduls nicht auch anders, oder mit automatisch auf "vertrauenswürdig" setzen?
Danke für eine Antwort & Gruß, Matthias