Seite 1 von 1
Makro in Calc mit OOBasic, Fehler bei offset
Verfasst: Di, 18.03.2008 18:55
von martin1234
Hallo Leute
ich möchte anfangen ein Makro zu erstellen, da ich absolut neu bin, wollte ich erstmal eine ganz einfache funktion implementieren:
eine Zelle kopieren und sieben spalten weiter einfügen:
sub autoCopy
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = ActiveCell
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = ActiveCell.Offset(0,7)
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
end sub
bedauerlicherweise funktioniert der offset nicht, ich erhalte eine fehlermeldung, dass die objektvariable nicht belegt ist!
jemand eine idee?
wäre dankbar
beste grüße
martin
Re: Makro in Calc mit OOBasic, Fehler bei offset
Verfasst: Di, 18.03.2008 20:51
von hol.sten
martin1234 hat geschrieben:Code: Alles auswählen
...
args1(0).Value = ActiveCell
...
args3(0).Value = ActiveCell.Offset(0,7)
bedauerlicherweise funktioniert der offset nicht, ich erhalte eine fehlermeldung, dass die objektvariable nicht belegt ist!
Kommt das
ActiveCell aus Excel? Sowas gibt es bei OOo Basic, glaube ich, nicht.
Kennst du das
Kapitel 7 Tabellendokumente aus dem
StarOffice 8 Programmierhandbuch für BASIC. Vielleicht hilft dir das ja weiter.
Und wie man zumindest die akuell selektierte Spalte finde habe ich hier gefunden:
http://www.oooforum.org/forum/viewtopic ... rrent+cell
Re: Makro in Calc mit OOBasic, Fehler bei offset
Verfasst: Do, 20.03.2008 08:40
von martin1234
Danke für die vielen Tipps, bin auch schon etwas weitergekommen.
Nun ist es so, dass ich eine Suche durchführe und das Ergebnis kopieren möchte, um es in einer anderen Tabelle einzufügen.
Das klappt leider nicht so ganz.
// hier ist die Suche:
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
// hier eslektiere ich die Zelle
document = ThisComponent.CurrentController.Frame
oCell = ThisComponent.CurrentSelection
// nur zum testen mal was ausgeben:
MsgBox "before query!" + oCell.getValue()
wie gesagt, dass klappt leider nicht!
Jemand eine Idee?
Danke schonmal
martin
Re: Makro in Calc mit OOBasic, Fehler bei offset
Verfasst: Do, 20.03.2008 09:38
von Karolus
Hallo
Bitte mehr Infos - Was genau funktioniert nicht ?
- evt wird der Wert 0 zurückgegeben, dann lass dir den Text liefern:
msgbox "before query! "& thiscomponent.currentselection().string
Führst du vorher 'Suche alle' aus, und hast mehrere Treffer ?
- Führe nur 'suchen' aus , und pack später alles in eine Schleife.
...
Gruß Karo
Re: Makro in Calc mit OOBasic, Fehler bei offset
Verfasst: Do, 20.03.2008 11:00
von martin1234
Hey danke für die Antwort!
hier kommt mein bisheriger versuch:
Code: Alles auswählen
Public Sub find(myQuery As String)
dim document as object
dim dispatcher as object
dim oCell as object
dim myResult as double
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Nr"
args3(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args3())
Set odoc = ThisComponent
Set oCell = odoc.getCurrentSelection
Set aCellAddress = oCell.getCellAddress
Column = aCellAddress.Column
Sheet = aCellAddress.Sheet
Set osheets = odoc.getSheets
Set osheet = osheets.getByIndex(Sheet)
Set oColumns = osheet.getColumns
Set oColumn = oColumns.getByIndex(0)
Set oController = odoc.getCurrentController
oController.Select oColumn
rem ----------------------------------------------------------------------
dim args1(17) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = false
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.Backward"
args1(4).Value = false
args1(5).Name = "SearchItem.Pattern"
args1(5).Value = false
args1(6).Name = "SearchItem.Content"
args1(6).Value = false
args1(7).Name = "SearchItem.AsianOptions"
args1(7).Value = false
args1(8).Name = "SearchItem.AlgorithmType"
args1(8).Value = 0
args1(9).Name = "SearchItem.SearchFlags"
args1(9).Value = 71680
args1(10).Name = "SearchItem.SearchString"
args1(10).Value = myQuery
args1(11).Name = "SearchItem.ReplaceString"
args1(11).Value = ""
args1(12).Name = "SearchItem.Locale"
args1(12).Value = 255
args1(13).Name = "SearchItem.ChangedChars"
args1(13).Value = 2
args1(14).Name = "SearchItem.DeletedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.InsertedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.TransliterateFlags"
args1(16).Value = 1280
args1(17).Name = "SearchItem.Command"
args1(17).Value = 0
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
oCurSp1 = osheet.createCursor 'Spaltenz�hler f�r Blatt 1
oCurZe1 = osheet.createCursor 'Zeilenz�hler f�r Blatt 1
'--Cursor f�r das 1. Blatt erzeugen
oCurSp1.gotoStartofUsedArea(True)
oCurSp1.gotoEndofUsedArea(false)
StartColumn = oCurSp1.getColumns.getRangeAddress
MsgBox StartColumn
Ich hätte an dieser Stelle einfach gern die Adresse der gefundenen Zelle
ich weiß, dass diese in Spalte A1 anfängt, nur welche Reihe?
Das Ergebnis sollte mit rowOffset auch die nächsten 10 spalten des aktuellen Ergebnisses enthalten.
Vielen herzlichen Dank für Deine Mühe
beste Grüße
martin
Re: Makro in Calc mit OOBasic, Fehler bei offset
Verfasst: Do, 20.03.2008 12:30
von Karolus
martin1234 hat geschrieben:
Ich hätte an dieser Stelle einfach gern die Adresse der gefundenen Zelle
ich weiß, dass diese in Spalte A1 anfängt, nur welche Reihe?
Das Ergebnis sollte mit rowOffset auch die nächsten 10 spalten des aktuellen Ergebnisses enthalten.
Tut mir leid, aber wenn sich deine Fragestellung mit jedem Post ändert wird das Antworten schwierig.
Die Zelladdresse als Text:
oadresse = thiscomponent.currentselection().absolutename 'zb. $Tabelle1.$A$15
der Index der Zeile:
ozeile = thiscomponent.currentselection().celladdress.row 'zb 14
den Spaltenindex:
ospalte = thiscomponent.currentselection().celladdress.column 'zb 0
den Tabellenindex:
osheet = thiscomponent.currentselection().celladdress.sheet 'zb 0
und den inhalt einer Zelle 10 Spalten weiter dann:
offsetinhalt = thiscomponent.sheets(osheet).getcellbyposition(ospalte,ozeile+10).string 'oder .value oder .formula
Gruß Karo
Re: Makro in Calc mit OOBasic, Fehler bei offset
Verfasst: Do, 20.03.2008 13:07
von martin1234
Hey Super!
Tausend Dank!
das ist genau dass, was ich brauchte!
martin