Office: (Office 365) OnTime mit Parameter

Helfe beim Thema OnTime mit Parameter in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo Wie kann ich mit OnTime eine Funktion aufrufen, und dabei zwei Variablen mitgeben: Parameter 1 als String Parameter 2 als Array Bisher ist mir... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von VBA-Tüftler, 24. Juli 2025.

  1. OnTime mit Parameter


    Hallo

    Wie kann ich mit OnTime eine Funktion aufrufen, und dabei zwei Variablen mitgeben:
    Parameter 1 als String
    Parameter 2 als Array

    Bisher ist mir nur die Übergabe eines numerischen Wertes gelungen.
     
    VBA-Tüftler, 24. Juli 2025
    #1
  2. BoskoBiati Erfahrener User
    Hi,

    was willst Du erreichen, wie sieht Dein Code aus?
     
    BoskoBiati, 24. Juli 2025
    #2
  3. slowboarder Erfahrener User
    du könntest das Array als Text erstellen.
    das funktioniert bei mir:

    Code:
    Sub test()
    Dim x
    x = Array("du", "da", "im", "Radio")
    Application.OnTime Now, "'xxx ""Hallo Welt"", Array(""Du"", ""Da"", ""im"", ""Radio"")'"
    End Sub
    
    
    Sub xxx(txt As String, y)
    Debug.Print txt, Join(y)
    End Sub
    
    aber ob man eine Variable auch als solche übergeben kann, weiß ich nicht.
    ein möglicher Workaround wäre die Nutzung von Projektweit gültigen Variablen (also einer Variable, die alle Makros nutzen können)

    Gruß Daniel
     
    slowboarder, 24. Juli 2025
    #3
  4. OnTime mit Parameter

    Hallo BoskoBiati

    Das ist mein Test-Code:
    Option Explicit
    Public LocalVar As Variant
    Sub MainSub()
    ReDim LocalVar(1 To 3)
    LocalVar(2) = "Prima"
    Dim Zeile As Long
    Zeile = 17
    Application.OnTime Now + TimeValue("00:00:10"), "'OnTimeSub (" & Zeile & ")" & "'"
    End Sub

    Function OnTimeSub(Optional ByVal P1 As String, Optional ByVal P2 As String)
    Debug.Print "OnTimeSub " & Time
    Debug.Print P1
    Debug.Print P2
    End Function

    Es macht keinen Sinn, in der aufgerufenen Funktion auf eine globale Variable zuzugreifen. Die beiden Codes sollten unabhängig von einander funktionieren. Was benötigt ist, muss als Parameter übergeben werden.

    Warum OnTime?
    In meiner Main-Routine werden Befehle ausgeführt, die den "Unterbrechungsmodus" ausschalten. Das gilt - nach meiner Erfahrung - bis dem Ende des aktuellen Prozess. Mit OnTime könnte ich einen neuen Prozess starten, in dem dann auch wieder Haltepunkt möglich sind. Dazu muss ich aber die von der Main-Routine ermittelten Daten weiterverarbeiten und das Ergebnis dem Aufrufer bereitstellen.
     
    VBA-Tüftler, 25. Juli 2025
    #4
  5. Hi Daniel.

    Sorry. Dein Beispiel hilft mir nicht weiter.
     
    VBA-Tüftler, 25. Juli 2025
    #5
  6. Korrektur zu meimem dargestellten Code:

    Wie der Name (LocalVar) schon erkennen lässt, sollte es eine lokale Variable sein. Eine globale Variable muss ich nicht unbedingt als Parameter übergeben.l
     
    VBA-Tüftler, 25. Juli 2025
    #6
  7. slowboarder Erfahrener User
    Hi
    so läuft dein Code bei mir:

    Code:
    Option Explicit
    Public LocalVar As Variant
    
    Sub MainSub()
    ReDim LocalVar(1 To 3)
    LocalVar(2) = "Prima"
    Dim Zeile As Long
    Zeile = 17
    Application.OnTime Now + TimeValue("00:00:00"), "'OnTimeSub " & Zeile & ", """ & LocalVar(2) & """'"
    End Sub
    
    Function OnTimeSub(Optional ByVal P1 As String, Optional ByVal P2 As String)
    Debug.Print "OnTimeSub " & Time
    Debug.Print P1
    Debug.Print P2
    End Function
    du kannst über das Ontime nur feste Werte übergeben und diese müssen in einem Textstring geschrieben werden.
    da es hier ein einfacher Aufruf ist, werden die Parameter ohne Klammern hinter das Makro geschrieben.

    Gruß Daniel
     
    slowboarder, 25. Juli 2025
    #7
  8. OnTime mit Parameter

    Gallo Daniel.

    Dank deines Codes bin ich schon einen Schritt weiter.

    Wenn ich in der OnTime-Routine nur auf ein Element zugriffen habe, dann war das nur ein Nachweis, das die Array richtig bereitgestellt wurde.

    Dein Code, wie du ein Variant testweise füllst, hat mich daran erinnert, dass es auch die Funktion "Join" gibt. Die nutze ich nun, um alle Einträge zu übergeben. Und in der OnTime-Routine mache ich mit Split wieder eine Array.

    Das ist gelöst und funktioniert bestens.

    Ein Problem habe ich noch: neben der Zeilennummer und der Array brauche ich einen dritten Parameter. Es ist ein Begriff der zuvor ermittelt wurde. Zwar könnte ich den Begriff auch erneut ermitteln. Aber die Übergabe als weiteren Parameter wäre logischer.

    Mir ist es aber nicht gelungen, den Code so zu verändern, dass noch ein dritter Parameter übergeben wird. Hier bitte ich dich um deine Unterstützung.

    Grundsätzlich ist mir die Reihenfolge der Parameter egal, würde aber vorschlagen, dass die Array der erste Parameter ist.

    Mein aktueller Code:

    Option Explicit
    Sub MainSub()
    Dim PrivVar As Variant
    Dim Zeile As Long
    Dim N As String
    PrivVar = Split("vielen,Dank,Daniel,für,die,Untestützung", ",")
    Zeile = 17
    N = "Temp4711"
    Application.OnTime Now(), Procedure:="'OnTimeSub " & Zeile & ", """ & Join(PrivVar, vbTab) & """'"
    End Sub

    Function OnTimeSub(ByVal P1 As String, _
    ByVal P2 As String, _
    Optional ByVal P3 As String) 'optional, weil derzeit nur 2 Parameter übergeben werden
    Debug.Print "Zeile = " & P1
    Debug.Print P2
    Dim XVar As Variant
    XVar = Split(P2, vbTab)
    Debug.Print XVar(2)
    Stop
    End Function
     
    VBA-Tüftler, 25. Juli 2025
    #8
  9. slowboarder Erfahrener User
    naja, jetzt solltest du das hinbekommen
    das Prinzip kennst du doch jetzt, du brauchst einen Text der so aufgebaut ist:

    "Markoname, Parameter1, Parameter2, Parameter3"

    und Texte in Anführungzeichen.
    Parameter 3 wird genauso angefügt wie Parameter2
    klar kommt man dann mit den Vielen Anführungszeichen auch mal durcheinander.

    ich würde mir auch immer den Text erstmal in einer Variabeln zusammstellen, dann kann man leicher prüfen, ob der Text stimmt:
    Code:
    Aufruf = "'OnTimeSub " & Zeile & ", """ & Join(PrivVar, vbTab) & """, """ & N & """'"
    Debug.Print Aufruf
    Application.OnTime Now(), Procedure:=Aufruf
    eine andere Methode für besser Übersicht ist, den Text erstmal als gesamtText zu erstellen und dann die Parameter mit Replace einzubauen.

    Code:
    Aufruf = "'OnTimeSub xxx, ""yyy"", ""zzz""'"
    Aufruf = Replace(Aufruf, "xxx"; Zeile)
    Aufruf = Replace(Aufruf, "yyy"; Join(PrivVar, vTab))
    Aufruf = Replace(Aufruf, "zzz"; N)
    klar ein paar Programmzeilen mehr, aber man hat mehr Übersicht beim Erstellen des Textes und macht weniger Fehler bzw findet diese leichter
    Gruß Daniel
     
    slowboarder, 25. Juli 2025
    #9
    1 Person gefällt das.
  10. Guten Morgen, Daniel.

    Der Vorschlag, den String zuerst in eine Variable zu stellen und dann mit "Debug.Print" anzuzeigen, war eine sehr gute Idee. Jetzt habe ich den Aufbau der Parameter verstanden.

    Inzwischen habe ich die Reihenfolge erfolgreich umgestellt und einen weiteren Parameter aufgenommen.

    Problem gelöst. Danke.
     
    VBA-Tüftler, 26. Juli 2025
    #10
Thema:

OnTime mit Parameter

Die Seite wird geladen...
  1. OnTime mit Parameter - Similar Threads - OnTime Parameter

  2. 1 Parameter wurde erwartet aber es wurden zu wenig Parameter übergeben

    in Microsoft Access Hilfe
    1 Parameter wurde erwartet aber es wurden zu wenig Parameter übergeben: Guten Tag Ich hoffe es kann mir jemand helfen. Im Unterformular (Endlosformular) gebe ich die Teilnehmer ein (Feld: Teilnehmer_f). Sobald ich das Feld verlasse, soll es in einer Abfrage...
  3. Standard-Wert ändern bei optionalen Parametern in LAMBDA

    in Microsoft Excel Hilfe
    Standard-Wert ändern bei optionalen Parametern in LAMBDA: Hallo Community, die Überschrift sagt eigentlich alles. Ich suche die richtige Syntax, um den Standard-Wert eines optionalen Parameters in einer Lambda-Funktion anzupassen. [optWERT]=1;...
  4. Parameter aus Tabelle wiedergeben

    in Microsoft Excel Hilfe
    Parameter aus Tabelle wiedergeben: Hallo Forum, ich möchte, dass aus einer Tabelle bestimmte Maximalwerte inklusive entsprechender Zusatzparameter ausgelesen werden. Eine Grundgerüst der Tabelle befindet sich im Anhang. Das Ganze...
  5. VBA Tabelle als Parameter eingeben

    in Microsoft Access Hilfe
    VBA Tabelle als Parameter eingeben: Hallo ich möchte in VBA, ganz simple abfrage "Select * FROM Tabellenname" jedoch den Tabellennamen als parameter übergeben können. Also ich hab ein Formular erstellt wo ein Button vorhanden ist...
  6. Abfrage Nummer Vergleich mit unterschiedlichen Parametern

    in Microsoft Access Hilfe
    Abfrage Nummer Vergleich mit unterschiedlichen Parametern: Hi zusammen, bei meiner Datenbank möchte ich gern eine Abfrage erstellen, die mir für unterschiedliche Länder den Barcode von Produkten abgleicht und mir die Produkte anzeigen lassen, wo die...
  7. Video: Parameter Abfragen in Access-apps, Teil 2: Erstellen der Ansichten, die zum Ausführen ...

    in Microsoft Access Tutorials
    Video: Parameter Abfragen in Access-apps, Teil 2: Erstellen der Ansichten, die zum Ausführen ...: Video: Parameter Abfragen in Access-apps, Teil 2: Erstellen der Ansichten, die zum Ausführen der Abfrage erforderlich sind Access für Microsoft 365 Access 2019 Access 2016...
  8. Verwenden von Parametern zur Eingabeaufforderung beim Ausführen einer Abfrage

    in Microsoft Access Tutorials
    Verwenden von Parametern zur Eingabeaufforderung beim Ausführen einer Abfrage: Verwenden von Parametern zur Eingabeaufforderung beim Ausführen einer Abfrage Access für Microsoft 365 Access 2019 Access 2016 Access 2013 Access 2010...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden