Seite 1 von 1

[gelöst] Calc Makro: cell innerhalb cellrange?

Verfasst: Do, 14.04.2011 21:03
von F3K Total
Hallo zusammen,
in folgendem Beitrag: viewtopic.php?f=2&t=47938 habe ich ein Makro geschrieben, das die Uhrzeit in die gerade selektierte Zelle schreibt.

Code: Alles auswählen

Sub Insert_Time
osheet=thiscomponent.sheets(0)
ocellrange=osheet.getCellRangeByName("B2:F50")
oAddresses=ocellrange.rangeaddress
oview=thiscomponent.CurrentController
ocell=oView.getSelection
oCelladdress=ocell.cellAddress
if oCelladdress.Column>=oAddresses.StartColumn and oCelladdress.Column<=oAddresses.EndColumn and oCelladdress.Row>=oAddresses.StartRow and oCelladdress.Row<=oAddresses.EndRow then
ocell.value=now()
endif
End Sub
Um sicherzustellen, dass diese Uhrzeit nur in die gewünschten Zellen geschrieben werden kann, habe ich mit diesem Code:

Code: Alles auswählen

oCelladdress=ocell.cellAddress
if oCelladdress.Column>=oAddresses.StartColumn and oCelladdress.Column<=oAddresses.EndColumn and oCelladdress.Row>=oAddresses.StartRow and oCelladdress.Row<=oAddresses.EndRow then
ocell.value=now()
endif
die zu beschreibenden Zellen auf "B2" bis "F50" beschränkt. Die vierfach Bedingung finde ich zu umständlich, wußte mir aber nicht besser zu helfen. Hat jemand eine Idee wie man das geschickter machen kann?
Gibt es eine Funktion wie ist die Zelle "ocell" Teilmenge von "ocellrange"?

Gruß R

Re: Calc Makro: cell innerhalb cellrange?

Verfasst: Sa, 16.04.2011 07:37
von Axel Richter
Hallo,
F3K Total hat geschrieben:Gibt es eine Funktion wie ist die Zelle "ocell" Teilmenge von "ocellrange"?
Es gibt so etwas ähnliches, nämlich: Gib die Überschneidung von Range1 und Range2.
http://api.openoffice.org/docs/common/r ... tersection.

Wenn es keine Überschneidung gibt, dann ist die Zelle nicht im Range.

Code: Alles auswählen

Sub Insert_Time()
oSheet = ThisComponent.Sheets(0)
oCellRange = oSheet.getCellRangeByName("B2:F50")
oSelection = ThisComponent.CurrentSelection
if oSelection.supportsService("com.sun.star.sheet.SheetCell") then
 oCellsRangeAddress = oSelection.RangeAddress
 if not (oCellRange.queryIntersection(oCellsRangeAddress).RangeAddressesAsString = "") then
  oSelection.Value = now()
 endif
endif
End Sub
viele Grüße

Axel

Re: Calc Makro: cell innerhalb cellrange?

Verfasst: Sa, 16.04.2011 09:10
von F3K Total
Hallo Axel,
super, vielen Dank. :D Da wäre ich niemals drauf gekommen, denn mit "Query" verband ich bis dato immer SQL. :?
An "supportsservice" habe ich nicht gedacht :o , denke das verhindert eine Fehlermeldung falls etwas anderes als eine Zelle ausgewählt wurde? Klasse!
Per XRAY habe ich noch herausgefunden, dass auch .count abfragbar ist, daher den Code noch etwas verändert:

Code: Alles auswählen

if oCellRange.queryIntersection(oCellsRangeAddress).count = 1 then 'Es gibt ocell in ocellrange, sonst wäre .count = 0
viele Grüsse von Rik