Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Prozedur in globale Funktion umwandeln

Betrifft: Prozedur in globale Funktion umwandeln von: Till Bremke
Geschrieben am: 20.11.2012 09:56:32

Hallo zusammen,
ich möchte gerne eine Prozedur in eine globale Funktion umwandeln, so dass ich diese in jedem beliebigen Modul verwenden kann, um nicht den Pfad immer neu ermitteln zu müssen.

Geht das überhaupt?

Was ich habe ist folgendes:


  • Option Explicit
    Public tPath As String
    ' das war ein erster Versuch der nichts brachte, da tPath außerhalb dieses Moduls natürlich "leer" war.
    Sub Auslesen()
    Dim WSHShell
    Set WSHShell = CreateObject("Wscript.Shell")
    Dim sPath As String
    
    'Jetbase
    sPath = WSHShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App  _
    Paths\jetbasel.exe\")
    
    Dim i As Integer
    Dim si As Variant
    
    tPath = Left(sPath, Len(sPath) - 12) & "JEX\jex.txt"
    'MsgBox tPath
    End Sub



  • Was ich bewirken will ist, dass ich den Pfad zu "jex.txt" also "tPath" als globale Variable überall, also auch in den "benachbarten Modulen, verwenden möchte.

    Wie stelle ich das an? Geht das über eine globale Funktion?

    Ich hoffe, Ihr könnt mir hier weiterhelfen!

    Danke schon mal!

    Lb. Gruß

    Till

      

    Betrifft: AW: Prozedur in globale Funktion umwandeln von: ChrisL
    Geschrieben am: 20.11.2012 10:09:05

    Hi Till

    tPath ist global deklariert und somit bereits jetzt überall verfügbar.

    Funktion würde in etwa (beispielhaft) so aussehen:

    Function Auslesen() As String
    Auslesen = "x"
    End Function

    Sub test()
    MsgBox Auslesen
    End Sub

    cu
    Chris


      

    Betrifft: AW: Prozedur in globale Funktion umwandeln von: Till Bremke
    Geschrieben am: 20.11.2012 10:10:18

    Danke... Deine Lösung ist in der Tat ein wenig eleganter.

    Gruß Till


      

    Betrifft: AW: Prozedur in globale Funktion umwandeln von: Till Bremke
    Geschrieben am: 20.11.2012 10:09:09

    Hi,
    hab's (glaube ich) doch noch alleine hinbekommen:


  • Public sPath As String
    Function Pfad() As String
    Dim WSHShell
    
    Set WSHShell = CreateObject("Wscript.Shell")
    
    sPath = WSHShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App  _
    Paths\jetbasel.exe\")
    Pfad = Left(sPath, Len(sPath) - 12) & "JEX\jex.txt"
    
    End Function


  • Oder geht das noch eleganter?

    Gruß Till


      

    Betrifft: AW: Prozedur in globale Funktion umwandeln von: ChrisL
    Geschrieben am: 20.11.2012 10:10:34

    Hi Till

    sPath musst du jetzt nicht mehr global deklarieren.

    Gruss
    Chris


      

    Betrifft: Eine Public Procedure ist in jedem Modul der ... von: Luc:-?
    Geschrieben am: 20.11.2012 10:16:03

    Standort-Mappe verfügbar, Till,
    egal ob Subroutine oder Funktion (mal in der VBE-Hilfe nachlesen!). Eine beim Mappenstart oder per Button aufgerufene Prozedur zur Füllung einer globalen Public-Variablen, die nur 1x in einem allgemeinen Modul der Mappe deklariert wdn darf, füllt diese für eine ganze xlSitzung mit dieser Mappe, falls man nicht zwischendurch PgmVeränderungen, speziell an GlobalVariablen, vornimmt. Dadurch kann sie nämlich entladen wdn.
    Ansonsten dürfte es bei dem von dir Gezeigten nicht schwierig sein, daraus eine Fktsproz zu machen. Du brauchst im Kopf nur Public Function zu schreiben (aber Public Sub reicht sicher auch, falls du keinen Rückgabewert brauchst → ebenfalls nachlesen!).
    Gruß Luc :-?


     

    Beiträge aus den Excel-Beispielen zum Thema "Prozedur in globale Funktion umwandeln"