[gelöst] Makro SubForm_Grid Letzten Datensatz erkennen und Zeilenumbruch
Verfasst: Fr 26. Sep 2025, 11:07
Hallo zusammen
Dank Robert habe ich im meinem Mail-Makro den Schalter zum Weiterschalten der Datensätze innerhalb eines SubForm_Grid erhalten (oForm.Parent.Next). So kann ich mithilfe eines Loop alle Datensätze auslesen und in den Mail-Body einlesen. Mit welcher Bedingung beende ich nun den Loop?
Gibt es in Basic eine einfache Möglichkeit, den letzten Datensatz anzuzeigen oder die Anzahl der existierenden Datensätze im SubForm_Grid zu erfahren, um den Loop zu beenden?Oder muss ich das mit SQL machen?
Ich bin für die Hilfe sehr dankbar.
Michael
Dank Robert habe ich im meinem Mail-Makro den Schalter zum Weiterschalten der Datensätze innerhalb eines SubForm_Grid erhalten (oForm.Parent.Next). So kann ich mithilfe eines Loop alle Datensätze auslesen und in den Mail-Body einlesen. Mit welcher Bedingung beende ich nun den Loop?
Gibt es in Basic eine einfache Möglichkeit, den letzten Datensatz anzuzeigen oder die Anzahl der existierenden Datensätze im SubForm_Grid zu erfahren, um den Loop zu beenden?Oder muss ich das mit SQL machen?
Ich bin für die Hilfe sehr dankbar.
Michael
Code: Alles auswählen
SUB Mail_Aufruf
REM Aus Libreoffice-Forum
REM Mailaufruf mit mailto:Empfänger?subject=...&body=...&cc=...&bcc=...
REM Die letzten beiden Eingaben sind im Formular nicht aufgeführt
REM Anhänge sind laut Definition von "mailto" nicht definiert. Manchmal funktioniert allerdings "attachment="
DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oForm AS OBJECT
DIM oFeld1 AS OBJECT
DIM oFeld2 AS OBJECT
DIM oFeld3 AS OBJECT
DIM oFeld4 AS OBJECT
DIM oFeld5 AS OBJECT
DIM oFeld6 AS OBJECT
DIM oFeld7 AS OBJECT
DIM oFeld8 AS OBJECT
DIM oFeld9 AS OBJECT
DIM oFeld10 AS OBJECT
DIM oShell AS OBJECT
DIM PosCount AS INTEGER
DIM Zeilensumme AS Double
DIM Gesamtsumme AS DOUBLE
REM DIM oControl AS OBJECT
REM DIM nArtikel AS STRING
REM DIM sArtikel AS STRING
REM DIM iD as STRING
DIM oObj1 AS OBJECT
DIM stFeld1 AS STRING
DIM stFeld2 AS STRING
DIM stFeld3 AS STRING
DIM stFeld4 AS STRING
DIM stFeld5 AS STRING
DIM stFeld6 AS STRING
DIM stFeld7 AS STRING
DIM stFeld8 AS DOUBLE
DIM stFeld9 AS DOUBLE
DIM stFeld10 AS STRING
DIM stBody AS STRING
oDoc=thisComponent
oDrawpage=oDoc.Drawpage
oForm=oDrawpage.Forms.getByName("MainForm")
oFeld1=oForm.getByName("EMail")
oFeld2=oForm.getByName("Name")
ofeld3 = oForm.getByName("Vorname")
oForm=oDrawpage.Forms.getByName("MainForm").getByName("SubForm").getByName("SubForm_Grid")
REM Anfang der Schleife
DO
ofeld4 = oForm.getByName("Pos")
ofeld5 = oForm.getByName("Artikel")
ofeld6 = oForm.getByName("Machart")
ofeld7 = oForm.getByName("Beschreibung")
oFeld8 = oform.getByName("Stck")
oFeld9 = oform.getByName("Brutto_Stck")
REM --------WICHTIG
REM Der Abruf des Anzeigewertes von Listenfeldern muss über stringitemlist erfolgen
stFeld5 = oFeld5.StringItemList(oFeld5.SelectedItems(0))
MsgBox(stFeld5)
stFeld6 = oFeld6.StringItemList(oFeld6.SelectedItems(0))
MsgBox(stFeld6)
stFeld4=oFeld4.getCurrentValue()
MsgBox(stFeld4)
PosCount = stFeld4
stFeld7=oFeld7.getCurrentValue()
MsgBox(stFeld7)
stFeld8=oFeld8.getCurrentValue()
MsgBox(stFeld8)
stFeld9=oFeld9.getCurrentValue()
MsgBox(stFeld9)
Zeilensumme = stFeld8 * stFeld9
MsgBox(Zeilensumme)
Gesamtsumme = Gesamtsumme + Zeilensumme
MsgBox (Gesamtsumme)
stBody=stFeld5 +" " + stFeld6 + " " + stFeld7 + " " + stFeld8 + " Stck " + stFeld9 + "€" + " Summe " + Zeilensumme
If oForm.Recordset.EOF Then ' EOF steht für End Of File und prüft, ob der Zeiger am Ende ist
MsgBox "Kein nächster Datensatz vorhanden"
Else
MsgBox "Ein nächster Datensatz ist vorhanden"
End If
oForm.Parent.Next
Loop while PosCoint < 6
REM Ende der Schleife - Hier würde ich gerne den letzten Datensatz als Ausstieg nehmen
stFeld1=oFeld1.Text
IF stFeld1 = "" THEN
msgbox "Keine Mailadresse vorhanden." & CHR(13) & "Das Mailprogramm wird nicht aufgerufen" , 48, "Mail senden"
EXIT SUB
END IF
REM Die Konvertierung zu URL ist notwendig, da sonst Sonderzeichen und Zeilenumbrüche nicht übernommen werden
REM Die überflüssigen Einträge file:/// werden dabei wieder herausgeschnitten
stFeld2=Mid(ConvertToUrl(oFeld2.Text),9)
stFeld3=Mid(ConvertToUrl(oFeld3.Text),9)
stFeld4=Mid(ConvertToUrl(stFeld4),9)
stFeld5=Mid(ConvertToUrl(stFeld5),9)
stFeld6=Mid(ConvertToUrl(stFeld6),9)
stFeld7=Mid(ConvertToUrl(stFeld7),9)
stFeld8=Mid(ConvertToUrl(stFeld8),9)
stFeld9=Mid(ConvertToUrl(stFeld9),9)
REM Start des Files mit der entsprechenden URL-Verbindung
oShell = createUnoService("com.sun.star.system.SystemShellExecute")
oShell.execute("mailto:"+ stFeld1 + "?subject="+ stFeld2 + "&body="+ stBody,"",0)
END SUB