Seite 1 von 1

[gelöst] Makro SubForm_Grid Letzten Datensatz erkennen und Zeilenumbruch

Verfasst: Fr 26. Sep 2025, 11:07
von Mic58
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

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


Re: Makro oForm.Parent.Next SubForm_Grid Letzten Datensatz erkennen

Verfasst: Sa 27. Sep 2025, 19:54
von RobertG
Das Base-Handbuch hast Du Dir aber herunter geladen, oder?
Hier der Text, den Du brauchst:
isLast
boolean
Gibt an, ob der Cursor auf der letzten Zeile steht.
isAfterLast
boolean
Der Cursor steht hinter der letzten Zeile, wenn er von der letzten Zeile aus mit next weiter gesetzt wurde.
Also:
oForm.Parent.isLast → letzter Datensatz
oForm.Parent.isAfterLast → nach dem letzten Datensatz (Cursor steht auf Neueingabe)

Re: Makro oForm.Parent.Next SubForm_Grid Letzten Datensatz erkennen

Verfasst: Mo 29. Sep 2025, 15:20
von Mic58
Vielen Dank Robert,

das hat funktioniert, Und ja - ich habe das Handbuch heruntergeladen und gesucht, aber nicht gefunden. Danke für deinen Tip!

Ich kann jetzt die die Subform_Grid Zeilen einlesen und zu einem Mail Body zusammenfügen. Was er mir aber nicht umsetzt, ist der Zeilenumbruch CHR(13). Mit oder ohne converTtoURL - egal - er macht keinen Zeilenumbruch in Thunderbird.
Und ,,, Gibt es Tabulatoren?

Btw:Wie bekommen ich einen externen Text (nicht als Anhang) in die Email eingebunden als StringVariable? File:/// ? Kann ich diese Texte in HTML formatieren?

Edit:
Habe gerade im Handbuch gelesen, dass es bei Thunderbird mit Linux Mint/Ubuntu zur genau diesen mit dem Zeilenumbruch kommen kann. Evolution soll besser sein. Werde es installieren....und hier posten, ob sich dadurch etwas verbessert hat, Gibt es noch andere Ideen?
Edit: Auch im Email Client Evolution tritt das Problem auf: Kein Zeilenumbruch!

Grüße, Mic

Re: Makro oForm.Parent.Next SubForm_Grid Letzten Datensatz erkennen

Verfasst: Di 30. Sep 2025, 10:04
von RobertG
Ich mache die Zeilenumbrüche hier mit
& CHR(13) & CHR(10)
Wenn Du Ubuntu nutzt: Bei Thunderbird in der Paketinstallation von Ubuntu kann es passieren, dass einfach Text aus dem Inhalt abgeschnitten wird und im Betreff erscheint. Die Variante "Thunderbird über Flatpak" läuft da besser. Dafür bekommst Du es nicht geregelt, Anhänge an die Flatpak-Version zu schicken. Und eine der anderen Varianten unter Ubuntu macht dann statt einem Anhang gleich 3 daraus - warum auch immer.

Ich nutze Ubuntu nicht, habe das aber bei anderen gesehen, die nach meiner Anleitung den Mailversand machen.

Re: Makro oForm.Parent.Next SubForm_Grid Letzten Datensatz erkennen

Verfasst: Di 30. Sep 2025, 12:04
von Mic58
RobertG hat geschrieben:
Di 30. Sep 2025, 10:04
Ich mache die Zeilenumbrüche hier mit
& CHR(13) & CHR(10)
Wenn Du Ubuntu nutzt: Bei Thunderbird in der Paketinstallation von Ubuntu kann es passieren, dass einfach Text aus dem Inhalt abgeschnitten wird und im Betreff erscheint. Die Variante "Thunderbird über Flatpak" läuft da besser. Dafür bekommst Du es nicht geregelt, Anhänge an die Flatpak-Version zu schicken. Und eine der anderen Varianten unter Ubuntu macht dann statt einem Anhang gleich 3 daraus - warum auch immer.

Ich nutze Ubuntu nicht, habe das aber bei anderen gesehen, die nach meiner Anleitung den Mailversand machen.
Danke Robert für den Tip mit : "Ich mache die Zeilenumbrüche hier mit
& CHR(13) & CHR(10)"

Meine Lösung an alle Linux Mint User:
& CHR(13) & CHR(10) allein hat mir den Zeilenumbruch nicht gebracht. Habe Thunderbird und Evolution probiert - vergeblich.

Dan habe ich die Mailmethode auf Simple Mail, wie im Handbuch beschrieben, umgestellt und ConvertToURL auskommentiert. - Erfolg.

CHR(13) allein geht nicht - es muss - & CHR(13) & CHR(10) sein

Es geht jetzt mit Thunderbird (Systempack) und Evolution. Der Mail Client sollte in LO Otionen/Internet/Email eingetragen sein.

Nochmals vielen Dank
Mic