Seite 1 von 1

Globale Variable ist NULL

Verfasst: Do 21. Okt 2021, 15:17
von chemnitzer
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

Re: Globale Variable ist NULL

Verfasst: Do 21. Okt 2021, 16:43
von F3K Total
Moin,
was genau ist ChooseADirectory() ?

Gruß R

Re: Globale Variable ist NULL

Verfasst: Do 21. Okt 2021, 17:37
von mikele
Hallo,
globale Variable oVerzeichnis
Wie?
Was soll dann oVerzeichnis.Text sein? oVerzeichnis müsste ein Objekt sein, das die Eigenschaft "Text" besitzt ...

Re: Globale Variable ist NULL

Verfasst: Fr 22. Okt 2021, 11:18
von chemnitzer
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)

Re: Globale Variable ist NULL

Verfasst: Sa 23. Okt 2021, 11:05
von mikele
Hallo,
ich habe mal versucht es nachzubauen.
Leider tritt der Fehler hier nicht auf. Vielleicht findest du den Unterschied zu deinem Code.

Re: Globale Variable ist NULL

Verfasst: Sa 23. Okt 2021, 12:55
von chemnitzer
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

Re: Globale Variable ist NULL

Verfasst: Sa 23. Okt 2021, 13:12
von mikele
Hallo,
den Code gab es bei dir! Es ist nur die verkürzte Form dessen, was die Funktion ChooseADirectory macht.