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
Makro in Calc mit OOBasic, Fehler bei offset
Moderator: Moderatoren
-
- Beiträge: 4
- Registriert: Di, 18.03.2008 18:44
Re: Makro in Calc mit OOBasic, Fehler bei offset
Kommt das ActiveCell aus Excel? Sowas gibt es bei OOo Basic, glaube ich, nicht.martin1234 hat geschrieben:bedauerlicherweise funktioniert der offset nicht, ich erhalte eine fehlermeldung, dass die objektvariable nicht belegt ist!Code: Alles auswählen
... args1(0).Value = ActiveCell ... args3(0).Value = ActiveCell.Offset(0,7)
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
-
- Beiträge: 4
- Registriert: Di, 18.03.2008 18:44
Re: Makro in Calc mit OOBasic, Fehler bei offset
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
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
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
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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
-
- Beiträge: 4
- Registriert: Di, 18.03.2008 18:44
Re: Makro in Calc mit OOBasic, Fehler bei offset
Hey danke für die Antwort!
hier kommt mein bisheriger versuch:
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
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
Tut mir leid, aber wenn sich deine Fragestellung mit jedem Post ändert wird das Antworten schwierig.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.
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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
-
- Beiträge: 4
- Registriert: Di, 18.03.2008 18:44
Re: Makro in Calc mit OOBasic, Fehler bei offset
Hey Super!
Tausend Dank!
das ist genau dass, was ich brauchte!
martin
Tausend Dank!
das ist genau dass, was ich brauchte!
martin