Makro Frage
Verfasst: Do, 25.05.2006 13:05
Hallo,
mit dem nachfolgenden Makro:
#########################################################
Dim oDlg As Object
Dim sFilename As String
Dim FileNo As Integer
Dim iFilePointerValue As Integer
Dim sLine As String
Type Datensatz
sDienststellennummer As String
sDienststellennummer_1 As String
sNumerierungsbezirk As String
sPunktart As String
sPunktnummer As String
sVermarkungsart As String
sBerechnungsjahr As String
sEntstehungshinweis As String
sLagestatus As String
sLagestatus1 As String
sRW_1 As String
sRW_2 As String
sRW_3 As String
sHW_1 As String
sHW_2 As String
sHW_3 As String
End Type
REM #######################
Sub edbs_dialog_aufrufen
DialogLibraries.LoadLibrary("Standard")
oDlg = CreateUnoDialog(DialogLibraries.Standard.dlg_edbs)
oDlg.setTitle("EDBS Ergänzer - " + VERSIONSTRING)
oDlg.getControl("cmd_next").setEnable(False)
oDlg.getControl("cmd_save").setEnable(False)
oDlg.Execute()
End Sub
REM #######################
Sub datei_waehlen
Dim oFileDlg As Object
Dim sLine As String
' Dateiauswahl-Dialog öffnen
oFileDlg = createunoservice("com.sun.star.ui.dialogs.FilePicker")
oFileDlg.appendfilter("EDBS Dateien","*.edb")
oFileDlg.appendfilter("Alle Dateien","*.*")
oFileDlg.execute
If UBound(oFileDlg.Files()) <> -1 Then
' Datei öffnen
sFilename = oFileDlg.Files(0)
FileNo = Freefile()
Open sFilename For Input As #FileNo
' TESTING!!!!!
Line Input #FileNo, sLine
Line Input #FileNo, sLine
oDlg.getControl("cmd_next").setEnable(True)
End If
End Sub
REM #######################
Sub datei_schliessen
Close #FileNo
End Sub
REM #######################
Sub datensatz_einlesen
On Error Resume Next
Dim oData As Object
oData = createObject("Datensatz")
If Not EOF(#FileNo) Then
iFilePointerValue = Seek(#FileNo)
Line Input #FileNo, sLine
sTmp = Split(sLine, " ")
' Numerierungsbezirk
oData.sNumerierungsbezirk = Mid(sTmp(2), 9,8)
oDlg.getControl("numerierungsbezirk").setText(oData.sNumerierungsbezirk)
' Punktart
oData.sPunktart = Mid(sTmp(2), 17,1)
oDlg.getControl("punktart").setText(oData.sPunktart)
' Punktnummer
oData.sPunktnummer = Mid(sTmp(2), 18,5)
oDlg.getControl("punktnummer").setText(oData.sPunktnummer)
' Dienststellennummer
oData.sDienststellennummer = Mid(sTmp(2), 24,5)
oDlg.getControl("dienststellennummer").setText(oData.sDienststellennummer)
' Dienststellennummer_1
oData.sDienststellennummer_1 = Mid(sTmp(2), 29,3)
oDlg.getControl("dienststellennummer_1").setText(oData.sDienststellennummer_1)
' Vermarkungsart
oData.sVermarkungsart = sTmp(3)
oDlg.getControl("vermarkungsart").setText(oData.sVermarkungsart)
sTmp = Split(sLine, "--")
' Entstehungshinweis
oData.sEntstehungshinweis = Right(sTmp(0), 7) +"--"
oDlg.getControl("entstehungshinweis").setText(oData.sEntstehungshinweis)
' Lagestatus
oData.sLagestatus = Mid(sTmp(1), Len(sTmp(1))-10, 1)
oDlg.getControl("lagestatus").setText(oData.sLagestatus)
' Jahr der Berechnung
oData.sBerechnungsjahr = Mid(sTmp(1), Len(sTmp(1))-9, 3)
oDlg.getControl("jahr_der_berechnung").setText(oData.sBerechnungsjahr)
' LST_1
oData.sLagestatus1 = Mid(sTmp(1), Instr(sTmp(1), "B")+9, 3)
oDlg.getControl("lagestatus_1").setText(oData.sLagestatus1)
'Rechtswert_1
oData.sRW_1 = Mid(sTmp(1), Instr(sTmp(1), "B")+12, 4)
oDlg.getControl("RW_1").setText(oData.sRW_1)
'Rechtswert_2
oData.sRW_2 = Mid(sTmp(1), Instr(sTmp(1), "B")+16, 3)
oDlg.getControl("RW_2").setText(oData.sRW_2)
'Rechtswert_3
oData.sRW_3 = Mid(sTmp(1), Instr(sTmp(1), "B")+19, 3)
oDlg.getControl("RW_3").setText(oData.sRW_3)
'Hochwert_1
oData.sHW_1 = Mid(sTmp(1), Instr(sTmp(1), "B")+22, 4)
oDlg.getControl("HW_1").setText(oData.sHW_1)
'Hochwert_2
oData.sHW_2 = Mid(sTmp(1), Instr(sTmp(1), "B")+26, 3)
oDlg.getControl("HW_2").setText(oData.sHW_2)
'Hochwert_3
oData.sHW_3 = Mid(sTmp(1), Instr(sTmp(1), "B")+29, 3)
oDlg.getControl("HW_3").setText(oData.sHW_3)
oDlg.getControl("cmd_save").setEnable(True)
Else
MsgBox("Sie haben das Ende der Datei erreicht")
oDlg.getControl("cmd_next").setEnable(False)
oDlg.getControl("cmd_save").setEnable(False)
End If
End Sub
REM #######################
Sub datensatz_ueberschreiben
Dim FileNo As Integer
Dim sLineNeu As String
Dim oData As Object
oData = createObject("Datensatz")
' Struktur füllen
oData.sNumerierungsbezirk = oDlg.getControl("numerierungsbezirk").getText()
oData.sPunktart = oDlg.getControl("punktart").getText()
oData.sPunktnummer = oDlg.getControl("punktnummer").getText()
oData.sDienststellennummer = oDlg.getControl("dienststellennummer").getText()
oData.sDienststellennummer_1 = oDlg.getControl("dienststellennummer_1").getText()
oData.sVermarkungsart = oDlg.getControl("vermarkungsart").getText()
oData.sEntstehungshinweis = oDlg.getControl("entstehungshinweis").getText(
oData.sLagestatus = oDlg.getControl("lagestatus").getText()
oData.sLagestatus1 = oDlg.getControl("lagestatus_1").getText()
oData.sBerechnungsjahr = oDlg.getControl("jahr_der_berechnung").getText()
oData.sRW_1 = oDlg.getControl("RW_1").getText()
oData.sRW_2 = oDlg.getControl("RW_2").getText()
oData.sRW_3 = oDlg.getControl("RW_3").getText()
oData.sHW_1 = oDlg.getControl("HW_1").getText()
oData.sHW_2 = oDlg.getControl("HW_2").getText()
oData.sHW_3 = oDlg.getControl("HW_3").getText()
' Alten Datensatz Ausgeben (NUR ZUM TESTEN!!)
oDlg.getControl("bla").setText( oDlg.getControl("bla").getText() + Chr(13) + "ALT:" + Chr(13) + sLine )
' Neuen Datensatz bilden
sTmp = Split(sLine, " ")
sLineNeu = sLineNeu + sTmp(0) + " " + sTmp(1) + " " + mid(sTmp(2), 1,
+ oData.sNumerierungsbezirk
sLineNeu = sLineNeu + oData.sPunktart + oData.sPunktnummer + mid(sTmp(2), 23, 1) + oData.sDienststellennummer
sLineNeu = sLineNeu + oData.sDienststellennummer_1 + mid(sTmp(2), 32, 2) + " "
sLineNeu = sLineNeu + oData.sVermarkungsart + " " + oData.sEntstehungshinweis + " "
sTmp = Split(sLine, "--")
sLineNeu = sLineNeu + mid(sTmp(1), InStr(sTmp(1), "B"), 9) + oData.sLagestatus1
sLineNeu = sLineNeu + oData.sRW_1 + oData.sRW_2 + oData.sRW_3 + oData.sHW_1 + oData.sHW_2 + oData.sHW_3 + "1"
sLineNeu = sLineNeu + " " + oData.sLagestatus + oData.sBerechnungsjahr + Right(sTmp(1), 7) + "--" + sTmp(2)
' Neuen Datensatz Ausgeben (NUR ZUM TESTEN!!)
oDlg.getControl("bla").setText( oDlg.getControl("bla").getText() + Chr(13) + "NEU:" + Chr(13) + sLineNeu )
' Datensatz in Datei schreiben
FileNo = Freefile()
Open sFilename For Output As #FileNo
Seek(#FileNo, iFilePointerValue)
Write #FileNo, sLineNeu
Close #FileNo
End Sub
#########################################################
lese ich aus der folgenden Datei:
EDBS01700000FEIN000009 0000ULPUNN 000100018000000020071240079010101 012 ...
EDBS01700000FEIN000010 0000ULPUNN 000100018000000020071400079010101 012 ...
EDBS01700000FEIN000011 0000ULPUNN 000100018000000020071670079010101 012 ...
EDBS01700000FEIN000012 0000ULPUNN 000100018000000020071830079010101 012 ...
verschiedene Angaben heraus.
Diese Angaben werden in Text-Feldern dargestellt.
Wenn ich in den Text-Feldern nun die Werte abändere und die o.a. Datei wieder speichere,
geht der Anfang der Datei verloren:
Soll:
ALT:
""EDBS01700000FEIN000002 0000ULPUNN 000100018000000020070350079010101 012""
NEU:
""EDBS01700000FEIN000002 0000ULPUNN 000100018000000020070350079010101 100""
Ist:
ALT:
01700000FEIN000003 0000ULPUNN 000100018000000020070430079010101 012""
NEU:
01700000FEIN000003 0000ULPUNN 000100018000000020070430079010101 100""
Es fehlt immer das Wort EDBS.
Wer kann den Code berichtigen?
mfg
mike6
mit dem nachfolgenden Makro:
#########################################################
Dim oDlg As Object
Dim sFilename As String
Dim FileNo As Integer
Dim iFilePointerValue As Integer
Dim sLine As String
Type Datensatz
sDienststellennummer As String
sDienststellennummer_1 As String
sNumerierungsbezirk As String
sPunktart As String
sPunktnummer As String
sVermarkungsart As String
sBerechnungsjahr As String
sEntstehungshinweis As String
sLagestatus As String
sLagestatus1 As String
sRW_1 As String
sRW_2 As String
sRW_3 As String
sHW_1 As String
sHW_2 As String
sHW_3 As String
End Type
REM #######################
Sub edbs_dialog_aufrufen
DialogLibraries.LoadLibrary("Standard")
oDlg = CreateUnoDialog(DialogLibraries.Standard.dlg_edbs)
oDlg.setTitle("EDBS Ergänzer - " + VERSIONSTRING)
oDlg.getControl("cmd_next").setEnable(False)
oDlg.getControl("cmd_save").setEnable(False)
oDlg.Execute()
End Sub
REM #######################
Sub datei_waehlen
Dim oFileDlg As Object
Dim sLine As String
' Dateiauswahl-Dialog öffnen
oFileDlg = createunoservice("com.sun.star.ui.dialogs.FilePicker")
oFileDlg.appendfilter("EDBS Dateien","*.edb")
oFileDlg.appendfilter("Alle Dateien","*.*")
oFileDlg.execute
If UBound(oFileDlg.Files()) <> -1 Then
' Datei öffnen
sFilename = oFileDlg.Files(0)
FileNo = Freefile()
Open sFilename For Input As #FileNo
' TESTING!!!!!
Line Input #FileNo, sLine
Line Input #FileNo, sLine
oDlg.getControl("cmd_next").setEnable(True)
End If
End Sub
REM #######################
Sub datei_schliessen
Close #FileNo
End Sub
REM #######################
Sub datensatz_einlesen
On Error Resume Next
Dim oData As Object
oData = createObject("Datensatz")
If Not EOF(#FileNo) Then
iFilePointerValue = Seek(#FileNo)
Line Input #FileNo, sLine
sTmp = Split(sLine, " ")
' Numerierungsbezirk
oData.sNumerierungsbezirk = Mid(sTmp(2), 9,8)
oDlg.getControl("numerierungsbezirk").setText(oData.sNumerierungsbezirk)
' Punktart
oData.sPunktart = Mid(sTmp(2), 17,1)
oDlg.getControl("punktart").setText(oData.sPunktart)
' Punktnummer
oData.sPunktnummer = Mid(sTmp(2), 18,5)
oDlg.getControl("punktnummer").setText(oData.sPunktnummer)
' Dienststellennummer
oData.sDienststellennummer = Mid(sTmp(2), 24,5)
oDlg.getControl("dienststellennummer").setText(oData.sDienststellennummer)
' Dienststellennummer_1
oData.sDienststellennummer_1 = Mid(sTmp(2), 29,3)
oDlg.getControl("dienststellennummer_1").setText(oData.sDienststellennummer_1)
' Vermarkungsart
oData.sVermarkungsart = sTmp(3)
oDlg.getControl("vermarkungsart").setText(oData.sVermarkungsart)
sTmp = Split(sLine, "--")
' Entstehungshinweis
oData.sEntstehungshinweis = Right(sTmp(0), 7) +"--"
oDlg.getControl("entstehungshinweis").setText(oData.sEntstehungshinweis)
' Lagestatus
oData.sLagestatus = Mid(sTmp(1), Len(sTmp(1))-10, 1)
oDlg.getControl("lagestatus").setText(oData.sLagestatus)
' Jahr der Berechnung
oData.sBerechnungsjahr = Mid(sTmp(1), Len(sTmp(1))-9, 3)
oDlg.getControl("jahr_der_berechnung").setText(oData.sBerechnungsjahr)
' LST_1
oData.sLagestatus1 = Mid(sTmp(1), Instr(sTmp(1), "B")+9, 3)
oDlg.getControl("lagestatus_1").setText(oData.sLagestatus1)
'Rechtswert_1
oData.sRW_1 = Mid(sTmp(1), Instr(sTmp(1), "B")+12, 4)
oDlg.getControl("RW_1").setText(oData.sRW_1)
'Rechtswert_2
oData.sRW_2 = Mid(sTmp(1), Instr(sTmp(1), "B")+16, 3)
oDlg.getControl("RW_2").setText(oData.sRW_2)
'Rechtswert_3
oData.sRW_3 = Mid(sTmp(1), Instr(sTmp(1), "B")+19, 3)
oDlg.getControl("RW_3").setText(oData.sRW_3)
'Hochwert_1
oData.sHW_1 = Mid(sTmp(1), Instr(sTmp(1), "B")+22, 4)
oDlg.getControl("HW_1").setText(oData.sHW_1)
'Hochwert_2
oData.sHW_2 = Mid(sTmp(1), Instr(sTmp(1), "B")+26, 3)
oDlg.getControl("HW_2").setText(oData.sHW_2)
'Hochwert_3
oData.sHW_3 = Mid(sTmp(1), Instr(sTmp(1), "B")+29, 3)
oDlg.getControl("HW_3").setText(oData.sHW_3)
oDlg.getControl("cmd_save").setEnable(True)
Else
MsgBox("Sie haben das Ende der Datei erreicht")
oDlg.getControl("cmd_next").setEnable(False)
oDlg.getControl("cmd_save").setEnable(False)
End If
End Sub
REM #######################
Sub datensatz_ueberschreiben
Dim FileNo As Integer
Dim sLineNeu As String
Dim oData As Object
oData = createObject("Datensatz")
' Struktur füllen
oData.sNumerierungsbezirk = oDlg.getControl("numerierungsbezirk").getText()
oData.sPunktart = oDlg.getControl("punktart").getText()
oData.sPunktnummer = oDlg.getControl("punktnummer").getText()
oData.sDienststellennummer = oDlg.getControl("dienststellennummer").getText()
oData.sDienststellennummer_1 = oDlg.getControl("dienststellennummer_1").getText()
oData.sVermarkungsart = oDlg.getControl("vermarkungsart").getText()
oData.sEntstehungshinweis = oDlg.getControl("entstehungshinweis").getText(
oData.sLagestatus = oDlg.getControl("lagestatus").getText()
oData.sLagestatus1 = oDlg.getControl("lagestatus_1").getText()
oData.sBerechnungsjahr = oDlg.getControl("jahr_der_berechnung").getText()
oData.sRW_1 = oDlg.getControl("RW_1").getText()
oData.sRW_2 = oDlg.getControl("RW_2").getText()
oData.sRW_3 = oDlg.getControl("RW_3").getText()
oData.sHW_1 = oDlg.getControl("HW_1").getText()
oData.sHW_2 = oDlg.getControl("HW_2").getText()
oData.sHW_3 = oDlg.getControl("HW_3").getText()
' Alten Datensatz Ausgeben (NUR ZUM TESTEN!!)
oDlg.getControl("bla").setText( oDlg.getControl("bla").getText() + Chr(13) + "ALT:" + Chr(13) + sLine )
' Neuen Datensatz bilden
sTmp = Split(sLine, " ")
sLineNeu = sLineNeu + sTmp(0) + " " + sTmp(1) + " " + mid(sTmp(2), 1,

sLineNeu = sLineNeu + oData.sPunktart + oData.sPunktnummer + mid(sTmp(2), 23, 1) + oData.sDienststellennummer
sLineNeu = sLineNeu + oData.sDienststellennummer_1 + mid(sTmp(2), 32, 2) + " "
sLineNeu = sLineNeu + oData.sVermarkungsart + " " + oData.sEntstehungshinweis + " "
sTmp = Split(sLine, "--")
sLineNeu = sLineNeu + mid(sTmp(1), InStr(sTmp(1), "B"), 9) + oData.sLagestatus1
sLineNeu = sLineNeu + oData.sRW_1 + oData.sRW_2 + oData.sRW_3 + oData.sHW_1 + oData.sHW_2 + oData.sHW_3 + "1"
sLineNeu = sLineNeu + " " + oData.sLagestatus + oData.sBerechnungsjahr + Right(sTmp(1), 7) + "--" + sTmp(2)
' Neuen Datensatz Ausgeben (NUR ZUM TESTEN!!)
oDlg.getControl("bla").setText( oDlg.getControl("bla").getText() + Chr(13) + "NEU:" + Chr(13) + sLineNeu )
' Datensatz in Datei schreiben
FileNo = Freefile()
Open sFilename For Output As #FileNo
Seek(#FileNo, iFilePointerValue)
Write #FileNo, sLineNeu
Close #FileNo
End Sub
#########################################################
lese ich aus der folgenden Datei:
EDBS01700000FEIN000009 0000ULPUNN 000100018000000020071240079010101 012 ...
EDBS01700000FEIN000010 0000ULPUNN 000100018000000020071400079010101 012 ...
EDBS01700000FEIN000011 0000ULPUNN 000100018000000020071670079010101 012 ...
EDBS01700000FEIN000012 0000ULPUNN 000100018000000020071830079010101 012 ...
verschiedene Angaben heraus.
Diese Angaben werden in Text-Feldern dargestellt.
Wenn ich in den Text-Feldern nun die Werte abändere und die o.a. Datei wieder speichere,
geht der Anfang der Datei verloren:
Soll:
ALT:
""EDBS01700000FEIN000002 0000ULPUNN 000100018000000020070350079010101 012""
NEU:
""EDBS01700000FEIN000002 0000ULPUNN 000100018000000020070350079010101 100""
Ist:
ALT:
01700000FEIN000003 0000ULPUNN 000100018000000020070430079010101 012""
NEU:
01700000FEIN000003 0000ULPUNN 000100018000000020070430079010101 100""
Es fehlt immer das Wort EDBS.
Wer kann den Code berichtigen?
mfg
mike6