Hey Leute, ich versuche diesen VBA Code in OO Basic zu wandeln. Ich kriege das einfach nicht hin.
Das Programm definiert eine funktion mit dem einen Namen in einer Spalte sucht und der Zähler zählt wie oft der jenige in der Spalte vorhanden ist. Zusätzlich wird noch eine weiter Spalte durchsucht. Ich habs geschrieben um aus einer Meetingsliste herauszufinden wer wie oft, was für ein Typ Vortrag (progress report, progress proposal) gehalten hat. In excel funkt. wunderbar, aber ich verzweifele langsam bei oo basic.
Naja wäre schön wenn ihr mir helfen könntet:
Public Function doIt(Name As String, Bereich As Range, Typ As String, unused As Range) As Integer
counter = 0
For Each cell In Bereich.Cells
If (InStr(cell.Value, Name) > 0 And StrComp(cell.Offset(0, 1).Value, Typ) = 0) Then
counter = counter + 1
End If
Next
doIt = counter
End Function
danke nedel
Help
Moderator: Moderatoren
Hey Nedel,
Oder suchst du nur jemanden, der für Dich die "Arbeit" macht und "schnell mal den VBA-Code übersetzt"? Gibt es bestimmt einige hier, schätze mal: 1 Stunde Arbeit, 80,- EUR???
Wir helfen gern, aber sicher nur dort, wo du nicht weiterkommst. Das Lernen von OOo Basic könen wir dir allerdings auch nicht abnehmen
Gruss
Thomas
Na, was hast du denn schon für Code in OOo Basic? Wo hakt es genau?ich versuche diesen VBA Code in OO Basic zu wandeln. Ich kriege das einfach nicht hin
Oder suchst du nur jemanden, der für Dich die "Arbeit" macht und "schnell mal den VBA-Code übersetzt"? Gibt es bestimmt einige hier, schätze mal: 1 Stunde Arbeit, 80,- EUR???
Wir helfen gern, aber sicher nur dort, wo du nicht weiterkommst. Das Lernen von OOo Basic könen wir dir allerdings auch nicht abnehmen

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Na klar
Nein, ich hab schon probiert siehe unten:
Ich hab da bloss cell.Offset nicht drin, weil ich gelesen hab dass es von oo nicht unterstützt wird.
Public Function doIt(name As String, BereichString as String , Typ As String, bereich2 as Object) As String
Bereich = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(BereichString)
counter = 0
for nRow = Bereich.StartRow To Bereich.EndRow
for nCol = Bereich.StartColumn To Bereich.EndColumn
cell = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(nCol, nRow)
If (InStr(cell.Value, name) > 0) Then
counter = counter + 1
End If
next
next
doIt = name
End Function
Ich hab da bloss cell.Offset nicht drin, weil ich gelesen hab dass es von oo nicht unterstützt wird.
Public Function doIt(name As String, BereichString as String , Typ As String, bereich2 as Object) As String
Bereich = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(BereichString)
counter = 0
for nRow = Bereich.StartRow To Bereich.EndRow
for nCol = Bereich.StartColumn To Bereich.EndColumn
cell = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(nCol, nRow)
If (InStr(cell.Value, name) > 0) Then
counter = counter + 1
End If
next
next
doIt = name
End Function
Hey Nedel,
Und? Funktioniert dein Code so zunächst?
Das mit dem Cell.offset gibt es nicht in OOo Basic, das realisiert du dann eben manuell. Im Grunde verschiebt es ja nur die splate um 1?
Dann addierst du zu dem Column-Wert eben den Offset hinzu
Aber, wenn ich das Excel Makro richtig interpretiere, so lautet das:
Erhöhe den Zähler um 1 wenn
in der Zelle ein bestimmter Text ("Name") vorkommt und gleichzeitig in der Zelle daneben der "Typ" aufgelistet wird?
(finde leider die Funktion StrComp() in meinem Excelbuch nicht, schätze aber, sie vergleicht, ob die beiden Strings gleich sind?)
Dann kannst du das eigentlich auch direkt umsetzen:
Noch etwas: Das Zellobjekt kann drei Inhaltstypen beinhalten: Werte (value), Texte (String) oder Formeln (formula). In OOo musst du schon den richtigen Typ abfragen, der Typ "value" liefert dir Null (0) zurück, wenn in der Zelle Texte drin stehen!
Viele Grüße
Thomas
Und? Funktioniert dein Code so zunächst?
Das mit dem Cell.offset gibt es nicht in OOo Basic, das realisiert du dann eben manuell. Im Grunde verschiebt es ja nur die splate um 1?
Dann addierst du zu dem Column-Wert eben den Offset hinzu

Aber, wenn ich das Excel Makro richtig interpretiere, so lautet das:
Erhöhe den Zähler um 1 wenn
in der Zelle ein bestimmter Text ("Name") vorkommt und gleichzeitig in der Zelle daneben der "Typ" aufgelistet wird?
(finde leider die Funktion StrComp() in meinem Excelbuch nicht, schätze aber, sie vergleicht, ob die beiden Strings gleich sind?)
Dann kannst du das eigentlich auch direkt umsetzen:
Code: Alles auswählen
Function doIt(name As String, BereichString as String , Typ As String, bereich2 as Object) As String
Bereich = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(BereichString)
counter = 0
for nRow = Bereich.StartRow To Bereich.EndRow
for nCol = Bereich.StartColumn To Bereich.EndColumn
cell = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(nCol, nRow)
cell2 = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(nCol+1, nRow)
If (InStr(cell.string, name) > 0) AND StrComp(cell2.string, Typ) Then
counter = counter + 1
End If
next
next
doIt = name
End Function
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
?
Also ich bin gerade mit Fehlermeldungenbeseitigen beschäftigt.
javascript:emoticon(':?')
Zb musste ich name durch Hans ersetzen, weil name wohl anders festgelegt ist.
Dann habe ich probleme mit dem definieren von Range.
ich bekomme für die 2te Zeile "Bereich = ..." die Fehlermeldung Baisc Laufzeitfehler:Objektvariable nicht belegt.
Was könnte das bedeuten? Ich hab vorher noch nicht mit oo gearbeitet.
Public Function doIt(Hans As String, BereichString As String , Typ As String, bereich2 As Object) As Integer
Bereich = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(BereichString)
counter = 0
for nRow = Bereich.StartRow To Bereich.EndRow
for nCol = Bereich.StartColumn To Bereich.EndColumn
cell = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(nCol, nRow)
cell2 = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(nCol+1, nRow)
If (InStr(cell.string, Hans) > 0) AND StrComp(cell2.string, Typ) Then
counter = counter + 1
End If
next
next
doIt = Hans
End Function
javascript:emoticon(':?')
Zb musste ich name durch Hans ersetzen, weil name wohl anders festgelegt ist.
Dann habe ich probleme mit dem definieren von Range.
ich bekomme für die 2te Zeile "Bereich = ..." die Fehlermeldung Baisc Laufzeitfehler:Objektvariable nicht belegt.
Was könnte das bedeuten? Ich hab vorher noch nicht mit oo gearbeitet.
Public Function doIt(Hans As String, BereichString As String , Typ As String, bereich2 As Object) As Integer
Bereich = ThisComponent.CurrentController.ActiveSheet.getCellRangeByName(BereichString)
counter = 0
for nRow = Bereich.StartRow To Bereich.EndRow
for nCol = Bereich.StartColumn To Bereich.EndColumn
cell = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(nCol, nRow)
cell2 = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(nCol+1, nRow)
If (InStr(cell.string, Hans) > 0) AND StrComp(cell2.string, Typ) Then
counter = counter + 1
End If
next
next
doIt = Hans
End Function
Hey Nedel,

Gruss
Thomas
Korrekt. Name ist ein geschützter Begriff.Zb musste ich name durch Hans ersetzen, weil name wohl anders festgelegt ist.
Das, was es sagt. Die Varaible ist nicht definiert, also übergibst du offensichtlich keinen String, der einen Bereich definiert. Die Zeile selbst ist korrekt, und wenn die Variable im funktionsaufruf einen (gültigen) bereichsnamen des Tabellenblattes enthält oder eine Range in Form "A1:B5" ist alles korrekt. Wenn nicht, kommt die FehlermeldungDann habe ich probleme mit dem definieren von Range.
ich bekomme für die 2te Zeile "Bereich = ..." die Fehlermeldung Baisc Laufzeitfehler:Objektvariable nicht belegt.
Was könnte das bedeuten? Ich hab vorher noch nicht mit oo gearbeitet.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic