Seite 1 von 1
Bereich prüfen
Verfasst: Mo, 22.01.2007 15:10
von toni
Hi,
ich möchte in einem Bereich (z.B. A1:D1) prüfen, ob alle Zellen mit Werten gefüllt sind. Falls dies nicht der Fall ist, sollen alle Werte in diesem Bereich gelöscht werden.
In VBA sieht das folgendermaßen aus:
Code: Alles auswählen
bereich = Range(Cells(1, 1), Cells(1, 4))
If WorksheetFunction.CountBlank(bereich) > 0 Then
bereich1.ClearContents
End If
Wie sähe das in StarBasic aus?
Bei Michael Dannenhöfer (
http://xn--dannenhfer-kcb.de/faqstarbas ... nden..html)
habe ich gelesen, dass man in Starbasic auf Calc-Funktionen zugreifen kann.
Mit der CountBlank-Funktion habe ich das aber nicht hin bekommen, da ich den Bereich nicht als Argument übergeben konnte.
Gruss
Thomas
Verfasst: Mo, 22.01.2007 16:38
von Toxitom
Hey Thomas,
hmm, also das mit dem Inhalt einer Zelleist so eine Sache... Eine Zelle kann Texte, Zahlen oder Formeln enthalten - das sind schon mal drei verschiedene Inhalte. Auch ein Leerzeichen wäre ja ein Textinhalt - wenn gleich die Zelle leer erscheint.
Ist also nicht ganz so einfach. OOo bietet via API eine Möglichkeit, den Typ des Zellinhaltes zu prüfen:
oZelle.getType() -> liefert 0, wenn die Zell leer ist (wirklich leer!) und entsprechend andere Werte, wenn etwas drin steht. Du könntest deine Prüfung also sogar auf Inhaltstypen ausdehnen.
Nun zu deinem Punkt: Wahrscheinlich müsstest du eine Schleife über alle Zellen des Bereiches fahren und gegen den Typ 0 testen - gibt es keine mit dem Typ, sind alle Zellen gefüllt - ansosnten ist mindestens eine leer:
Code: Alles auswählen
oBereich = oSheet.getCellRangeByPosition(0, 0, 2,2) 'Zelle A1 bis C3
For i = 0 to 3
For j = 0 to 3
if oSheet.getCellByPosition(i, j).getType() = 0 then
oBereich.ClearContents(511)
exit For
end if
next
next
Klar, für die Zahlen kannst du natürlich auch Variable nehmen.
Und die 511 löscht dir wirklich alles - auch die Formate etc. Da musst du eben eventuell anpassen:-)
Viele Grüße
Thomas
Verfasst: Di, 23.01.2007 08:54
von toni
Hallo Thomas,
danke für diese Lösung.
Ich hatte eigentlich vor, die CountBlank-Funktion aus Calc ein zu binden. Vor allem um zu erfahren, wie man grundsätzlich Calc-Funktionen ein bindet und wie man die Argumente übergibt. Aber so geht es natürlich auch.
Gruss
Thomas
Verfasst: Di, 23.01.2007 09:24
von kannenklaus
hallo thomas,
Vor allem um zu erfahren, wie man grundsätzlich Calc-Funktionen ein bindet und wie man die Argumente übergibt.
schau mal hier:
http://www.starbasicfaq.de/WiekannmanFu ... nden..html
grüße klaus
Verfasst: Di, 23.01.2007 11:29
von toni
Hallo Klaus,
die Seite habe ich mir bereits angeschaut.
In meinem ersten Beitrag hatte ich geschrieben, dass ich aber nicht weiß, wie ich dabei den Bereich (A1:D1) syntaktisch übergeben muss.
Gruss
Thomas
Verfasst: Di, 23.01.2007 12:17
von kannenklaus
hallo thomas
du kannst auf dem code von thomas aufbauen versuch es mal so:
Code: Alles auswählen
Sub DeinMacro
Dim aktivesBlatt
Dim oCell as Object
aktivesBlatt = thisComponent.CurrentController.getActiveSheet
For i = 0 to 3
For j = 0 to 3
oCell=aktivesBlatt.getCellByPosition(i, j)
' oCell.value =10 'schreibt die Zahl 10 in die Zelle
oCell.'deine Funktionsanweisung an diese Zelle übergeben
next
next
end Sub
grüße
klaus