Microsoft Excel

Herbers Excel/VBA-Archiv

Systemp-Variable benötigt

Betrifft: Systemp-Variable benötigt von: horrscht6
Geschrieben am: 02.06.2008 09:18:27

Hallo miteinander,

ich möchte zum halbautomatischen Übertragen eines VBA-Moduls (AddIn zu Dokument) das entsprechende Modul zuerst exportieren, danach in die betreffende Excel-Datei importieren. Damit ich mich nicht auf Pfade wie "C:\" beschränke, wo am Ende keine Schreibrechte existieren. Ich würde diesen Export gern in den TEMP-Pfad des Windows-Users machen, wo i. d. R. immer Schreibrechte existieren.

Wie kann ich diesen Windows bzw. User TEMP-Pfad auf einfachste Weise als Variable erhalten?

Eine triviale VBA Lösung, die mir ein komplettes Modul vom AddIn in ein Excel-Dokument überträgt, ohne einen Export/Import nehme ich als Antwort auch dankend an. Die Lösungen im Forums-Archiv finde ich leider zu wenig zielführend.

Gruß, Matthias

  

Betrifft: AW: Systemp-Variable benötigt von: Renee
Geschrieben am: 02.06.2008 09:24:29

Hi Matthias,

so:
TempPath = Environ("tmp")
oder so:
TempPath = Environ("temp")



GreetZ Renée


  

Betrifft: AW: Systemp-Variable benötigt von: horrscht6
Geschrieben am: 02.06.2008 11:54:05

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


  

Betrifft: AW: Systemp-Variable benötigt von: Rudi Maintaire
Geschrieben am: 02.06.2008 12:04:45

Hallo,
keine Chance.

Gruß
Rudi

P.S. Renée, da weiblich