[gelöst] Calc-Makros unter 3.1.1 funtionieren nicht

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [gelöst] Calc-Makros unter 3.1.1 funtionieren nicht

Re: Versionsproblem

von SIRE.de » Mo, 09.08.2010 19:19

So wie mir scheint hab ich den Fehler gefunden. Es lag an einer falschen Koordinate (peinlicher Anfängerfehler). Hab doch tatsächlich in ner Nachtaktion verpeilt, das Zeilen und Spalten in der Nummerierung mit ner "0" starten. Im zweiten Makro lag es an ner nicht aktualisierten Verlinkung, was auch zu einer falschen Objektdeklarierung führte ....

Wie so oft ne Kleinigkeit, die einen Zeit und Nerven kostet. Danke für Bemühungen und sorry für die "Panikmache" :-)

Re: Versionsproblem

von SIRE.de » Mo, 09.08.2010 17:17

Sorry das Glaskugelproblem .... :D

Code: Alles auswählen

REM  *****  BASIC  *****
public bgid as string
public etid as string

Sub Main
' Zugriff auf die Datei
oDok = ThisComponent

' Zugriff auf Rahmen
oFrame = oDok.CurrentController.Frame

' Zugriff auf Blatt
oBlatt = oDok.Sheets().getByName( "IIS" )

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")


bgid = oBlatt.getCellByPosition(1,12).string
etid = oBlatt.getCellByPosition(10,12).string



' Zugriff auf Zieldatei

sPfad = "C:/IIS/IIS_Daten.ods"
sUrl = ConvertToUrl( sPfad )

oDokZiel = StarDesktop.loadComponentFromUrl( sUrl, "_blank", 0, Array() )
dim oDokZielFrame   as object
oDokZielFrame = oDokZiel.CurrentController.Frame


oZielBlatt = oDokZiel.Sheets().getByName("IIS 00")
oZielBlatt2 = oDokZiel.Sheets().getByName("IIS 01")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 3

dispatcher.executeDispatch( oDokZielFrame, ".uno:JumpToTable", "", 0, args1())


' Suchbereich definieren
oBereich = oZielBlatt.getCellRangeByName( "J1:J49999" )

' Suchobjekt
oSuchen = oBereich.createSearchDescriptor()
' gesucht wird...
oSuchen.SearchString = etid

' Suche ausführen und Fund-Adresse besetzen
oGefundenAdresse = oBereich.findFirst( oSuchen ).CellAddress
' Index der Zeile
' print oGefundenAdresse.Row

' Kopieren
sKopierBereich = _
"$A$" & oGefundenAdresse.Row + 1 & ":" & _
"$J$" & oGefundenAdresse.Row + 1


dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = sKopierBereich

if etid = "Teile ID" then
	oDokZiel.close(0)
else

dispatcher.executeDispatch( oDokZielFrame, ".uno:GoToCell", "", 0, args2() )
dispatcher.executeDispatch( oDokZielFrame, ".uno:Cut", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Nr"
args3(0).Value = 4

dispatcher.executeDispatch( oDokZielFrame, ".uno:JumpToTable", "", 0, args3())


rem ----------------------------------------------------------------------

dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "By"
args4(0).Value = 1
args4(0).Name = "Sel"
args4(0).Value = false

Poszeile = 1

rem ----------------------------------------------------------------------
dim args100(0) as new com.sun.star.beans.PropertyValue
args100(0).Name = "ToPoint"
args100(0).Value = "$J$1"

dispatcher.executeDispatch(oDokZielFrame, ".uno:GoToCell", "", 0, args100())

if bgid = "Teile ID" then
	oDokZiel.close(0)
else
Do Until oZielBlatt2.getcellbyPosition(9,PosZeile).string = bgid 
	dispatcher.executeDispatch(oDokZielFrame, ".uno:GoDown", "", 0, args4())
	Poszeile = Poszeile + 1
loop
dispatcher.executeDispatch(oDokZielFrame, ".uno:GoDown", "", 0, args4())
dispatcher.executeDispatch(oDokZielFrame, ".uno:GoDown", "", 0, args4())
rem ----------------------------------------------------------------------
dim args200(1) as new com.sun.star.beans.PropertyValue
args200(0).Name = "By"
args200(0).Value = 1
args200(1).Name = "Sel"
args200(1).Value = false

dispatcher.executeDispatch(oDokZielFrame, ".uno:GoLeft", "", 0, args200())
dispatcher.executeDispatch(oDokZielFrame, ".uno:GoLeft", "", 0, args200())
dispatcher.executeDispatch(oDokZielFrame, ".uno:GoLeft", "", 0, args200())
dispatcher.executeDispatch(oDokZielFrame, ".uno:GoLeft", "", 0, args200())
dispatcher.executeDispatch(oDokZielFrame, ".uno:GoLeft", "", 0, args200())
dispatcher.executeDispatch(oDokZielFrame, ".uno:GoLeft", "", 0, args200())
dispatcher.executeDispatch(oDokZielFrame, ".uno:GoLeft", "", 0, args200())
dispatcher.executeDispatch(oDokZielFrame, ".uno:GoLeft", "", 0, args200())
dispatcher.executeDispatch(oDokZielFrame, ".uno:GoLeft", "", 0, args200())
rem ----------------------------------------------------------------------

dispatcher.executeDispatch(oDokZielFrame, ".uno:InsertRows", "", 0, Array())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(oDokZielFrame, ".uno:Paste", "", 0, Array())

rem IIS_Daten speichern und schließen
If (oDokZiel.isModified) Then
   oDokZiel.store()           
End if

oDokZiel.close(0)

end if
end if
End Sub
Aber deine Glaskugel ist wirklich sehr gut. :D

Werd noch bischen basteln ... aber vom Prinzip ist das ja schon echt kritisch ... wenn ich jetzt Makros anlege wie ein Wilder und dann die EDV updated und ich jedesmal schwitzen muß, ob noch alles geht ...

Re: Versionsproblem

von komma4 » Mo, 09.08.2010 17:09

Ich denke nicht, dass ich Dir weiterhelfen kann.

Erstens habe ich (s. Footer) noch eine 3.0er-Version im Einsatz - kann also ein evtl.Fehlverhalten nicht nachstellen.

Zweitens sehe ich beim Code nicht, was das für Objekte sind. Meine Glaskugel sagt mir, dass Du mit einem SearchDescriptor arbeitest...aber, was weiss die schon 8)

Re: Versionsproblem

von SIRE.de » Mo, 09.08.2010 16:44

oGefundenAdresse = oBereich.findFirst( oSuchen ).CellAddress

kreidet er mir jetzt an. bei Version 3.0.0 läuft alles wie geschmiert ...

Re: Versionsproblem

von komma4 » Mo, 09.08.2010 16:43

SIRE.de hat geschrieben: weil angeblich Variablen nicht belegt seien.
Natürlich ändert sich in jeder Version etwas - sonst wäre es ja nix Neues.

Allerdings ist die Makroprogrammierung nur in Ausnahmefällen davon betroffen.

Welche Variablen sind es denn, sprich: mit welchen Objekten besetzt?


Ich tippe eher auf ein Deklarationsproblem.

[gelöst] Calc-Makros unter 3.1.1 funtionieren nicht

von SIRE.de » Mo, 09.08.2010 13:52

Hallo zusammen!

Kruze Frage. Ich habe Makros in der der Firma für Calc programiert. Leider ist mir gerade aufgefallen, das der Erstellungsrechner eine oO Version 3.0.0 hat und auf den übrigen Rechnern Version 3.1.1 installiert ist. Auf dem 3.0.0 er Rechner läuft alles wunderbar. Aber die 3.1.1 er Rechner machen zum Teil große Probleme und die Makro brechen ab, weil angeblich Variablen nicht belegt seien. Ist das ein bekanntes Problem?

Werd heute abend zu Hause mal auf meinem Rechner testen, wo die aktuellste Version installiert ist, wie es sich dort verhält. Hier in der Firma kann ich leider keine Programme installieren oder updaten. Und die EDV ist im Urlaub ... :?

Gruß
Thomas



Moderation,4: Titel angepasst

Nach oben