Basic Programmierung für Calc
Moderator: Moderatoren
Basic Programmierung für Calc
Hallo,
ich habe mir vorgenommen eine calc Tabellendokument mit einen Formular zu entwerfen, dass diese Tabellen mit Werten füttert. Ich habe dazu zwei Fragen.
1. Wie kann ich die Werte aus den Formularfeldern auslesen, die dann eingetragen werden sollen?
2. Wie kann ich die Zellen, in die die Werte kommen sollen so ansprechen, dass immer die nächste leere Zeile verwendet wird.
Bisher habe ich folgenden Code entwickelt (Bitte nicht lachen, ich bin blutige Anfängerin )
Private Sub OKButton_Click()
Dim art As String
DIM dat As Long
DIM hab As String
DIM sol As String
DIM beschr As String
DIM oDocument as Object, oSheet as Object, oCell as Object, oComboBox as Object
art = oComboBoxArt
dat = oDateFieldDatum
hab = oTextBoxHaben
sol = oTextBoxSoll
oDocument=ThisComponent
If art = ("Betriebskosten") Then
oSheet=oDocument.Sheets.getByName("Betriebskosten")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Autokosten") Then
oSheet=oDocument.Sheets.getByName("Autokosten")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Mietkosten") Then
oSheet=oDocument.Sheets.getByName("Mietkosten")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Durchlaufende") Then
oSheet=oDocument.Sheets.getByName("Durchlaufende")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Einnahmen") Then
oSheet=oDocument.Sheets.getByName("Einnahmnen")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Kassenbuch") Then
oSheet=oDocument.Sheets.getByName("Kassenbuch")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
else
oSheet=oDocument.Sheets.getByName("Betriebskosten")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
End If
End Sub
Dieser Code trägt mir immerhin Werte (leider nur Nullen) in das sheet "Betriebskosten" ein. Die anderen elseif Bedingungen sind nicht testbar, da ich ja die Werte nicht aus den Boxen rauskriege. Zudem habe ich bisher auch nur rausbekommen wie ich die Zellen über die Position ansprechen kann, also nicht relativ.
Ich sitze seit zwei Tagen mit verschiedenen Dokumentationen dran kriegs aber nicht hin (Ich kann kein "Variable nicht belegt" mehr sehn )
Danke
Bianca
ich habe mir vorgenommen eine calc Tabellendokument mit einen Formular zu entwerfen, dass diese Tabellen mit Werten füttert. Ich habe dazu zwei Fragen.
1. Wie kann ich die Werte aus den Formularfeldern auslesen, die dann eingetragen werden sollen?
2. Wie kann ich die Zellen, in die die Werte kommen sollen so ansprechen, dass immer die nächste leere Zeile verwendet wird.
Bisher habe ich folgenden Code entwickelt (Bitte nicht lachen, ich bin blutige Anfängerin )
Private Sub OKButton_Click()
Dim art As String
DIM dat As Long
DIM hab As String
DIM sol As String
DIM beschr As String
DIM oDocument as Object, oSheet as Object, oCell as Object, oComboBox as Object
art = oComboBoxArt
dat = oDateFieldDatum
hab = oTextBoxHaben
sol = oTextBoxSoll
oDocument=ThisComponent
If art = ("Betriebskosten") Then
oSheet=oDocument.Sheets.getByName("Betriebskosten")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Autokosten") Then
oSheet=oDocument.Sheets.getByName("Autokosten")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Mietkosten") Then
oSheet=oDocument.Sheets.getByName("Mietkosten")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Durchlaufende") Then
oSheet=oDocument.Sheets.getByName("Durchlaufende")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Einnahmen") Then
oSheet=oDocument.Sheets.getByName("Einnahmnen")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
Elseif art = ("Kassenbuch") Then
oSheet=oDocument.Sheets.getByName("Kassenbuch")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
else
oSheet=oDocument.Sheets.getByName("Betriebskosten")
oCell=oSheet.getCellByPosition(0, 1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, 1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, 1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, 1)
oCell.Value = beschr
End If
End Sub
Dieser Code trägt mir immerhin Werte (leider nur Nullen) in das sheet "Betriebskosten" ein. Die anderen elseif Bedingungen sind nicht testbar, da ich ja die Werte nicht aus den Boxen rauskriege. Zudem habe ich bisher auch nur rausbekommen wie ich die Zellen über die Position ansprechen kann, also nicht relativ.
Ich sitze seit zwei Tagen mit verschiedenen Dokumentationen dran kriegs aber nicht hin (Ich kann kein "Variable nicht belegt" mehr sehn )
Danke
Bianca
Hallo Bianca,
Dieser Code liest den aktuellen Inhalt des Kombinationsfeldes namens "ComboBox1" auf dem Formular/Tabellenblatt "Formular". (Hinweis: Datumsfelder lesen mit .date und Rückgabewert evtl. in passerndes Format umformen)
Hinweis: Mit oCell.Value kannst Du nur numerische Inhalte übergeben. Da ein Teil Deiner Variablen als String deklariert ist mußt Du die Werte dieser Variablen mittels oCell.String = ... in die Zellen schreiben.
Gruß
Stephan
Da das Formular Bestandteil des Calc-Dokuments ist:1. Wie kann ich die Werte aus den Formularfeldern auslesen, die dann eingetragen werden sollen?
z.B. so:ich habe mir vorgenommen eine calc Tabellendokument mit einen Formular zu entwerfen,
Code: Alles auswählen
Sub auslesen
Dim oDoc As Object
Dim oSheet As Object
Dim oForm As Object
Dim oComboBox As Object
oDoc = ThisComponent
oSheet = oDoc.Sheets.GetByName("Formular")
oForm = oSheet.DrawPage.Forms.GetByName("Standard")
oComboBox = oform.getByName("ComboBox1")
msgbox oComboBox.text
End Sub
hier ein Schnipsel:2. Wie kann ich die Zellen, in die die Werte kommen sollen so ansprechen, dass immer die nächste leere Zeile verwendet wird.
Code: Alles auswählen
'...
oSheet=oDocument.Sheets.getByName("Betriebskosten")
Cursor = oSheet.createCursor()
Cursor.gotoEndOfUsedArea (true)
Zeile = Cursor.getRangeAddress().EndRow
oCell=oSheet.getCellByPosition(0, Zeile+1)
oCell.Value = dat
oCell=oSheet.getCellByPosition(1, Zeile+1)
oCell.Value = hab
oCell=oSheet.getCellByPosition(2, Zeile+1)
oCell.Value = sol
oCell=oSheet.getCellByPosition(3, Zeile+1)
oCell.Value = beschr
'...
Gruß
Stephan
Hallo!
Ich lerne mich gerade auch dem Gebiet ein. Zum Lernen empfehle ich dir folgende Datei:
Fahrtenbuch_Muster.sxc mit der dazugehörigen Dokmentation in PDF.
Darin ist der Umgang mit Eingabemasken in Calc-Dokumenten genau beschrieben.
Du kannst die Datei herunterladen unter folgendem Link
http://www.amt-wiesbaden.de/index.php?z ... t08&rm=r01
Ich hoffe dir hilt das genauso wie mir.
Gruß
Charly
Ich lerne mich gerade auch dem Gebiet ein. Zum Lernen empfehle ich dir folgende Datei:
Fahrtenbuch_Muster.sxc mit der dazugehörigen Dokmentation in PDF.
Darin ist der Umgang mit Eingabemasken in Calc-Dokumenten genau beschrieben.
Du kannst die Datei herunterladen unter folgendem Link
http://www.amt-wiesbaden.de/index.php?z ... t08&rm=r01
Ich hoffe dir hilt das genauso wie mir.
Gruß
Charly
Hallo Stephan,
er will es nicht nehmen, an keiner Stelle.
Folgende Varianten habe ich probiert:
Dabei habe ich es jeweils davor und dahinter versucht und auch in einer Zeile
Ich bekomme immer den Fehler ungültiger Prozeduraufruf oder Methode unbekannt.
Bianca
er will es nicht nehmen, an keiner Stelle.
Folgende Varianten habe ich probiert:
Code: Alles auswählen
oDoc = ThisComponent
oSheet = oDoc.Sheets.GetByName("Formular")
oForm = oSheet.DrawPage.Forms.GetByName("Standard")
oComboBox = oform.getByName("oComboBoxArt")
art = oComboBox.text
oSheet = oDoc.Sheets.GetByName("Formular")
oForm = oSheet.DrawPage.Forms.GetByName("Standard")
oDateField = oform.getByName("oDateFieldDatum")
dat = oDateField.date
CdateFromIso
Code: Alles auswählen
If art = ("Betriebskosten") Then
oSheet=oDocument.Sheets.getByName("Betriebskosten")
Cursor = oSheet.createCursor()
Cursor.gotoEndOfUsedArea (true)
Zeile = Cursor.getRangeAddress().EndRow
oCell=oSheet.getCellByPosition(0, Zeile+1)
oCell.value = dat
CdateFromIso
Ich bekomme immer den Fehler ungültiger Prozeduraufruf oder Methode unbekannt.
Bianca
Hallo Bianca,
Deine Frage nach CdateToIso war so überzeugend gestellt, das ich dachte Du weißt wie das zu handhaben ist. Das Folgende funktioniert:
Gruß
Stephan
Deine Frage nach CdateToIso war so überzeugend gestellt, das ich dachte Du weißt wie das zu handhaben ist. Das Folgende funktioniert:
Code: Alles auswählen
Sub Main
oDoc = ThisComponent
oSheet = oDoc.Sheets.GetByName("Formular")
oForm = oSheet.DrawPage.Forms.GetByName("Standard")
oComboBox = oForm.getByName("oComboBoxArt")
art = oComboBox.text
oDateField = oform.getByName("oDateFieldDatum")
dat = CdateFromIso(oDateField.date)
If art = ("Betriebskosten") Then
oSheet = oDoc.Sheets.getByName("Betriebskosten")
Cursor = oSheet.createCursor()
Cursor.gotoEndOfUsedArea (true)
Zeile = Cursor.getRangeAddress().EndRow
oCell=oSheet.getCellByPosition(0, Zeile+1)
oCell.value = dat
oDoc.CurrentController.Select(oCell)
oDoc.CurrentSelection.NumberFormat = 36
End If
End Sub
Stephan
Yuchuu es klappt alles
und ich hab bloss diese blöden Klammern "dat = CDateFromIso(oDateField.date)"nicht gesetzt bei meinen Versuchen. Was bewirken die denn. Btw ich bin wirklich blutige Anfängerin ich hab mich vor 2 Tagen zum ersten Mal ans Programmieren rangetraut weil ich die Erstellung von Excell-Tabellen für meinen Steuerberater partout mit Openoffice realisieren wollte. Und die Eingabe will man natürlich möglichst komfortabel gestalten . Herausgekommen ist ein Calc Dokument mit integriertem Kassenbuch und einem einzigen Eingabeformular für die verschiedenen steuerrelevanten betrieblichen Ausgaben "ein bischen stolz guck".
Vielen Dank nochmal für die prompte Hilfe
Bianca
und ich hab bloss diese blöden Klammern "dat = CDateFromIso(oDateField.date)"nicht gesetzt bei meinen Versuchen. Was bewirken die denn. Btw ich bin wirklich blutige Anfängerin ich hab mich vor 2 Tagen zum ersten Mal ans Programmieren rangetraut weil ich die Erstellung von Excell-Tabellen für meinen Steuerberater partout mit Openoffice realisieren wollte. Und die Eingabe will man natürlich möglichst komfortabel gestalten . Herausgekommen ist ein Calc Dokument mit integriertem Kassenbuch und einem einzigen Eingabeformular für die verschiedenen steuerrelevanten betrieblichen Ausgaben "ein bischen stolz guck".
Vielen Dank nochmal für die prompte Hilfe
Bianca
Die Klammern schließen den übergebenen Parameter ein. Ein Äquivalent für:und ich hab bloss diese blöden Klammern "dat = CDateFromIso(oDateField.date)"nicht gesetzt bei meinen Versuchen. Was bewirken die denn.
dat = CDateFromIso(oDateField.date)
ist:
dat = oDateField.date
dat = CDateFromIso(dat)
oder (im Speziellen):
dat = CDateFromIso(20040809)
Stephan