Seite 1 von 1

(gelöst) Nosuchelementexcaption in Writer (Makro)

Verfasst: Mo 30. Nov 2020, 17:45
von Strunz
Halllo,

ich habe ein Makro in Writer geschrieben:

Code: Alles auswählen

REM  *****  BASIC  *****
Option Explicit


Sub Main

Dim odoc As Object, formulare As Object
Dim eingabetext As String
Dim formnames() As String
Dim i as Integer, svar as Integer
Dim drawpage as Object, forms as Object, formular as Object
Dim eingabeFeld as Object

odoc = ThisComponent

If NOT odoc.supportsService("com.sun.star.text.TextDocument") Then
MsgBox "Das aktuelle Dokument ist kein Writer-Textdokument", 48, "Fehler"
End If

REM Zuerst erfolgt die Eingabe-Bearbeitung
drawpage = odoc.getDrawPage()
forms = drawpage.getForms()
formular = forms.getByName("Formular")
eingabeFeld = formular.getByName("eingabeText")
eingabetext = eingabeFeld.Text

 if eingabetext = "" Then
    Beep
    eingabeFeld.BackGroundColor = RGB(255,0,0)
    MsgBox ( "Das rot hinterlegte Feld ist ein Pflichtfeld, dass heisst es muss was eingegeben werden!", 0, "Fehlermeldung")
 end if

 	formnames() = formular.getElementNames() 	
 	for i = 0 to ubound(formnames())
 		if left(formnames(i),7) = "ausgabe" then
  			formular.getByName(formnames(i)).Text = eingabetext
  		end if
  	next i

End Sub

sub loeschen

Dim formular as object

formular = ThisComponent.getDrawPage().getForms().getByName("Formular")
formular.getByName("eingabeText").Text = ""
formular.getByName("ausgabeText(0)").Text = ""
formular.getByName("ausgabeText(1)").Text = ""
formular.getByName("ausgabeText(2)").Text = ""

end sub

Sub initialisierung

Dim eingabeFeld as Object
Dim formular as Object
Dim eingabeText As Object

eingabeFeld = ThisComponent.getDrawPage().getForms().getByName("Formular").getByName("eingabeText")
eingabeText = eingabeFeld

eingabeFeld.BackGroundColor = RGB(255,255,255)

formular = ThisComponent.getDrawPage().getForms().getByName("Formular")

formular.getByName("ausgabeText(0)").Text = ""
formular.getByName("ausgabeText(1)").Text = ""
formular.getByName("ausgabeText(2)").Text = ""

End Sub

Sub druckenpdf

rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///Users/strunz/Documents/Unbenannt%201.pdf"
args1(1).Name = "FilterName"
args1(1).Value = "writer_pdf_Export"
args1(2).Name = "FilterData"
args1(2).Value = Array(Array("UseLosslessCompression",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Quality",0,90,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ReduceImageResolution",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("MaxImageResolution",0,300,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTaggedPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SelectPdfVersion",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportNotes",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ViewPDFAfterExport",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarks",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenBookmarkLevels",0,-1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTransitionEffects",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsSkipEmptyPages",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FormsType",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportFormFields",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("AllowDuplicateFieldNames",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerToolbar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerMenubar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerWindowControls",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ResizeWindowToInitialPage",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("CenterWindow",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenInFullScreenMode",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DisplayPDFDocumentTitle",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialView",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Magnification",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Zoom",0,100,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageLayout",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FirstPageOnLeft",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialPage",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Printing",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Changes",0,4,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableCopyingOfContent",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableTextAccessForAccessibilityTools",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportLinksRelativeFsys",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PDFViewSelection",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ConvertOOoTargetToPDFTarget",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarksToPDFDestination",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Watermark",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPasswords",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPermissionPassword",0,Array(),com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureLocation",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureReason",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureContactInfo",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignaturePassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureCertificate",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))
args1(3).Name = "SelectionOnly"
args1(3).Value = false

dispatcher.executeDispatch(document, ".uno:ExportTo", "", 0, args1())

End Sub 

Sub URL

Dim stFeld As String
Dim oShell As Object

stFeld = "https://de.libreoffice.org/get-help/documentation/"
oShell = createUnoService("com.sun.star.system.SystemShellExecute")
oShell.execute(stFeld,,0)

End Sub

Sub Mail
	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 oShell AS OBJECT
	DIM stFeld1 AS STRING
	DIM stFeld2 AS STRING
	DIM stFeld3 AS STRING
	DIM stFeld4 AS String
	
	oDoc=thisComponent
	oDrawpage=oDoc.Drawpage
	REM Lage des Feldes in dem entsprechenden Formular aufsuchen
	oForm = oDoc.drawpage.forms.getByName("Formular")
	oFeld1=oForm.getByName("E_Mail_Adresse")
	oFeld2=oForm.getByName("E_Mail_Betreff")
	oFeld3=oForm.getByName("E_Mail_inhalt")
	stFeld1=oFeld1.Text
	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)
	REM Start des Files mit der entsprechenden URL-Verbindung
	oShell = createUnoService("com.sun.star.system.SystemShellExecute")
	oShell.execute("mailto:"+stFeld1+"?subject="+stFeld2+"&body="+stFeld3,,0)
END SUB

Allerdings kommt bei folgenden Code:

oFeld1=oForm.getByName("E_Mail_Adresse")

Denn oben genannte Fehlermeldung!

Was muss ich tun?

MFg
Strunz

Re: Nosuchelementexcaption in Writer (Makro)

Verfasst: Mo 30. Nov 2020, 18:47
von mikele
Hallo,

Was muss ich tun?
... einen existierenden Namen angeben.

Re: Nosuchelementexcaption in Writer (Makro)

Verfasst: Mo 30. Nov 2020, 20:28
von Strunz
Hallo,
ja, das war`s!

Mfg
Strunz