Showing results 1 to 4 of 4

Thread: Daten in einem VBA-Formular an eine Variable übergeben

  1. #1
    Join Date
    27.05.2008
    Posts
    49

    Default Daten in einem VBA-Formular an eine Variable übergeben

    Hallo,

    hoffentlich ein leichtes, aber da ich sehr wenig Erfahrung mit VBA habe,
    ein schwieriges Problem für mich:

    Bereits geschafft:

    Lasse mir eine Interne Varibale (Name: Uhr_Abluft) in ZenOn anzeigen und habe diese Anzeige mit einem VBA -> LeftClickDown verknüpft.
    Damit öffnet sich ein VBA-Formular, welches über "objStrE" den Wert der Variable übernimmt.

    Public Sub LeftClickDown_Default (obElem As Element)
    Dim obVariable As Variable

    Set obVariable = obElem.ItemVariable(0)
    objStrE = obVariable.Value

    UserForm1.Caption = "Uhrenmenü"
    UserForm1.Show

    In diesem Formular wird der Wert mittels VBA zerlegt (ist ein String, Wochenuhr), die einzelnen Teile können verändert werden. Mit einem Befehl wird der Wert im Formular wieder zusammengesetzt und über "objStrA" angezeigt.

    Jetzt zu meiner Frage:
    Ich habe den Wert der Internen Variable ja in das Formular übernehmen können (objStrE).
    Wie kann ich jetzt den neuen, im Formular veränderten Wert (objStrA) wieder an die
    Interne Variable übergeben? Am besten beim Schließen des Formulars.

    Danke!
    Martin

  2. #2
    Join Date
    30.05.2007
    Location
    Salzburg
    Posts
    881

    Default Re: Daten in einem VBA-Formular an eine Variable übergeben

    Nachfolgend ein Beispiel-Code welcher beim Schließen der UserForm den modifizierten Wert an die zenOn Variable übergibt:

    Im ModulElement (LeftClickUp-Event) folgender Code:

    Public Sub LeftClickUp_Default(obElem As Element)
    'der Sub InitForm wird das ElementObject übergeben
    UserForm1.InitForm obElem
    UserForm1.Show
    obElem.LeftClickUp
    
    End Sub

    In der UserForm folgender Code:

    Option Explicit
    
    Dim obVariable As Variable
    
    Public Sub InitForm(obElem As Element)
    
    Dim objStrE As String
    
        UserForm1.Caption = "Uhrenmenü"
        Set obVariable = obElem.ItemVariable(0)
        objStrE = obVariable.Value
        txtModifyString.Text = objStrE
    End Sub
    
    
    Private Sub cmdApply_Click()
    
    Dim objStrA As String
    
        objStrA = txtModifyString.Text
        obVariable.Value = objStrA
        Call UserForm_Terminate
    End Sub
    
    Private Sub cmdExit_Click()
    
        Call UserForm_Terminate
    End Sub
    
    
    Private Sub UserForm_Terminate()
    
        Set obVariable = Nothing
        Unload Me
    End Sub

    Bei diesem Bespiel wird der Variablenwert dem Textfeld txtModifyString übergeben. Nachdem der Text geändert wurde können entweder die Änderungen verworfen werden (siehe cmdExit_Click) oder per cmdApply_Click die Änderungen an die Variable übergeben werden.

  3. #3
    Join Date
    27.05.2008
    Posts
    49

    Default Re: Daten in einem VBA-Formular an eine Variable übergeben

    Hallo herberto,

    herzlichen Dank für die schnelle Antwort!

    Noch eine kurze Frage: Ich muss dass Formular immer zweimal aufrufen, damit der Wert der Variable in das Formular übernommen wird. Beim ersten Aufruf bleibt das Formular leer, schließen, nochmals öffnen, dann erst ist der Wert übernommen worden. Vielleicht gibts hierfür auch eine unkomplizierte Lösung? Danke!

    Gruß
    Martin

  4. #4
    Join Date
    30.05.2007
    Location
    Salzburg
    Posts
    881

    Default Re: Daten in einem VBA-Formular an eine Variable übergeben

    Welche zenOn Version wird verwendet?
    Sollte zenOn 6.22 im Einsatz sein, so ist die Bedingung jene, dass jene Variablewerte welche per VBA gelesen werden sollen "advised" sind. Um eine Variable dieses Status zu verleihen gibt es mehrere Möglichkeiten:
    - Variable ist im aktuell aufgeschaltenen Bild vorhanden (mit einem Element verknüpft)
    - Variable ist in einem VBA Online Container definiert worden (siehe http://www.copadata.com/forums/showthread.php?t=41)
    - Variable ist mit der Option "DDE aktiv" definiert worden
    - Variable ist als Alarm deklariert
    - Variable ist in einem Archiv definiert

    -> siehe auch Info auf der zenOn DVD (...\Information\GERMAN\Revisionstexte\Revisionste xt.pdf - Seite 17)

    Generell sollten Variablen per VBA nicht mehr direkt gelesen werden da dies die Treiber-Performance sowohl auch die Performance von zenOn Runtime beeinflusst. Hierbei spielt die eingesetzte zenOn Version keine Rolle (mit zenOn 6.22 ist eben dieser Zugriff reglementiert worden).

    Mit der Methode .IsOnline (ab zenOn 6.22) kann abgefragt werden, ob die zu lesende Variable "advised" ist oder nicht.

    Gruß,
    Herbert

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •