BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Globale Variable ist NULL

Alles zur Programmierung im LibreOffice.
Antworten
chemnitzer
Beiträge: 43
Registriert: Di 20. Jan 2015, 18:56
Wohnort: Hungen

Globale Variable ist NULL

Beitrag von chemnitzer » Do 21. Okt 2021, 15:17

Hallo
ich habe ein Problem mit einem Formular wo von einem Button die Auswahl für ein Verzeichnis gestartet wird.
Hier das Formular :
Bild
Die Formularobjekte werden beim Aufrufen, wenn die Ansicht aufgebaut ist, ausgelesen und Initialisiert. Der Text "!verz. noch auswählen" wird dabei eingetragen.

Code: Alles auswählen

'Textfeld unter gew. Verz.
oVerzeichnis 	= thisComponent.drawpage.forms.getByName("Frm_Imp").getByName("txt_gewVerz")
oVerzeichnis.Text 	= "!verz noch auswählen"
Alles OK.
Über den Button wird eine Sub zur Auswahl eines Verzeichnisses aufgerufen und auch ausgeführt.
Hier jetzt die Sub und die Funktion zur Auswahl des Verzeichnisses :

Code: Alles auswählen

Sub waehleVerz
Dim tmpVerz As String
Dim s As String
	tmpVerz = ""
	s = get_Verz(tmpVerz)
	oVerzeichnis.Text = s
'	cmdAuswerten.EnableVisible = TRUE hier wird der Button "Auswahl" sichtbar
End Sub

Function get_Verz(s As string)
	strVerzeichnistmp = ""
	Do
		strVerzeichnistmp = ChooseADirectory()
		If (strVerzeichnistmp Like "*####_##_##-*") = False Then
			sVar = MsgBox("Verzeichnisname enthält keinen " & chr(10) & "Bereich von jjjj_mm_tt-",1)
			If sVar =2 Then 
				msgbox "Makro make_Import_Verz wird abgebrochen"
				cmdAuswerten.EnableVisible = TRUE
'				GoTo MAKRO_Abbruch:
				Exit Function
			End if	
		End if
	Loop Until (strVerzeichnistmp Like "*####_##_##-*") = True Or sVar <> 2
	get_Verz = strVerzeichnistmp
End Function
Am Ende der Sub waehleVerz steht in "s" das Verzeichnis, aber die globale Variable oVerzeichnis mit dem Text ist nicht definiert obwohl sie als Global ganz am Anfang des Quelltextes definiert wurde.
An was kann das liegen ? Ich habe bisher keine Lösung dazu gefunden. Kann es Daran liegen das dir Funktion "ChooseADirectory()" das Auswahlfenster aktiviert und anzeigt ?

Danke für die Hilfe im Voraus.
Roland
Dateianhänge
screenshot.jpg
screenshot.jpg (50.16 KiB) 3653 mal betrachtet

F3K Total
Beiträge: 2410
Registriert: So 10. Apr 2011, 10:10

Re: Globale Variable ist NULL

Beitrag von F3K Total » Do 21. Okt 2021, 16:43

Moin,
was genau ist ChooseADirectory() ?

Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Globale Variable ist NULL

Beitrag von mikele » Do 21. Okt 2021, 17:37

Hallo,
globale Variable oVerzeichnis
Wie?
Was soll dann oVerzeichnis.Text sein? oVerzeichnis müsste ein Objekt sein, das die Eigenschaft "Text" besitzt ...
Gruß,
mikele

chemnitzer
Beiträge: 43
Registriert: Di 20. Jan 2015, 18:56
Wohnort: Hungen

Re: Globale Variable ist NULL

Beitrag von chemnitzer » Fr 22. Okt 2021, 11:18

Hallo
so ist oVerzeichnis deklariert
Global oVerzeichnis as Objekt

und die Funktion ChooseADirectory(Optional sInPth$) As String scheint Bestandteil der Basic Standard Bibliothek zu sein.
In folgender Quelle ist auch dieser Code dazu zu finden:
Quelle : Andrew Pitonyak; "BASIC-Makros für OpenOffice und LibreOffice" (27.01.2021 Übersetzung von Volker Lenhardt)
Listing 206. Verzeichnisauswahl vom Plattenspeicher

Code: Alles auswählen

REM sInPath benennt das Startverzeichnis. Wenn kein Startverzeichnis
REM angegeben ist, wird das Standardarbeitsverzeichnis des Nutzers genommen.
REM Das ausgewählte Verzeichnis wird als URL zurückgegeben.
Function ChooseADirectory(Optional sInPath$) As String
 Dim oDialog 'Instanz des Service FolderPicker - Verzeichnisauswahl
 Dim oSFA............'Instanz des Service SimpleFileAccess - Dateiinformationen
 Dim s As String
 Dim oPathSettings 'Instanz des Service PathSettings – Ooo-Pfade
 Dim oContext
 
 oDialog = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
 oSFA = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
 
 If IsMissing(sInPath) Then
 oContext = GetProcessServiceManager().DefaultContext
 oPathSettings = _
 oContext.getValueByName("/singletons/com.sun.star.util.thePathSettings")
 If IsEmpty(oPathSettings) Then
 'AOO nutzt den älteren Singleton-Typ:
 oPathSettings = CreateUnoService("com.sun.star.util.PathSettings")
 End If
 oDialog.setDisplayDirectory(oPathSettings.Work) 'Das Benutzerarbeitsverzeichnis
 'als Ausgangspunkt.
 ElseIf oSFA.exists(sInPath) Then
 oDialog.setDisplayDirectory(sInPath)
 Else
 s = "Verzeichnis '" & sInPath & "' existiert nicht."
 If MsgBox(s, 33, "Fehler") = 2 Then Exit Function
 End If
 
 If oDialog.execute() = 1 Then
 ChooseADirectory() = oDialog.getDirectory()
 End If
End Function
Die Funktion liefert das richtige Ergebnis in der Sub waehleVerz bis s = get_Verz(tmpVerz),
die Zuweisung oVerzeichnis.Text = s liefert den Fehler Variable nicht belegt. Warum ?

Gruß
Roland (chemnitzer)

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Globale Variable ist NULL

Beitrag von mikele » Sa 23. Okt 2021, 11:05

Hallo,
ich habe mal versucht es nachzubauen.
Leider tritt der Fehler hier nicht auf. Vielleicht findest du den Unterschied zu deinem Code.
Dateianhänge
makro formular.odt
(12.14 KiB) 126-mal heruntergeladen
Gruß,
mikele

chemnitzer
Beiträge: 43
Registriert: Di 20. Jan 2015, 18:56
Wohnort: Hungen

Re: Globale Variable ist NULL

Beitrag von chemnitzer » Sa 23. Okt 2021, 12:55

Hallo
ich hab jetzt Deinen Code speziell den von "Sub bt" eingebaut und meine alte Variable "oVerzeichnis" in "oVerzeichnisgew" über all geändert. In dem Testformular funktioniert es jetzt. Der Unterschied sind die Codezeilen :

Code: Alles auswählen

   oDialog = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
    oDialog.execute()
    s=oDialog.getDirectory()
Die gab es bei mir nicht.
Vielen Dank für die Hilfe.
Gruß
Roland

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Globale Variable ist NULL

Beitrag von mikele » Sa 23. Okt 2021, 13:12

Hallo,
den Code gab es bei dir! Es ist nur die verkürzte Form dessen, was die Funktion ChooseADirectory macht.
Gruß,
mikele

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten