Fehlermeldung "Gesperrte Zellen können nicht geändert w

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

WN
**
Beiträge: 30
Registriert: Fr, 17.11.2006 23:36

Fehlermeldung "Gesperrte Zellen können nicht geändert w

Beitrag von WN »

Hallo zusammen,

ich habe versucht ein Makro zu erstellen, welches jedoch immer mit der Fehlermeldung "Gesperrte Zellen können nicht geändert werden" abschließt.

Das Makro besteht aus:

Sub Funktionsaufruf
Function zit
Sub Inhalte

Die Prozedur "Sub Funktionsaufruf" dient dazu, die nachfolgende Funktion "zit" aufzurufen, indem in die aktuelle Zelle "=zit()" eingetragen wird. Anschließend läuft die Funktion "zit" ab, die als Ergebnis einen berechneten Wert in die aktuelle Zelle einträgt. Da dieser Wert als berechneter Wert eingetragen wird, soll anschließend noch die Prozedur "Inhalte" ablaufen, die diesen berechneten Wert kopieren und über "Bearbeiten/Inhalte einfügen" als Zahl in die Zelle eintragen soll. Aus diesem Grund ist in die Funktion "zit" der Aufruf der "Sub Inhalte" eingebaut. An dieser Stelle wird dann jedoch immer die genannte Fehlermeldung ausgegeben.
Nachfolgend habe ich den Programmcode dargestellt:

sub Funktionsaufruf
dim odoc as object
dim osheet as object
dim i as string

odoc = ThisComponent
osheet = odoc.CurrentController.ActiveSheet
ozelle = odoc.GetCurrentSelection()
i = "=zit()"
ozelle.formula = i
end sub


function zit as double
dim rz as double
dim gz1 as double
dim gz2 as double
dim gz3 as double
rz = 492
gz1=inputbox ("Bitte die Stunden eingeben: ")
gz2=inputbox ("Bitte die Minuten eingeben: ")
gz3=gz1*60 +gz2
zit = gz3/rz

Inhalte 'Aufruf der Prozedur Inhalte
end function




sub Inhalte
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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args2(5) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "SVDNT"
args2(1).Name = "FormulaCommand"
args2(1).Value = 0
args2(2).Name = "SkipEmptyCells"
args2(2).Value = false
args2(3).Name = "Transpose"
args2(3).Value = false
args2(4).Name = "AsLink"
args2(4).Value = false
args2(5).Name = "MoveMode"
args2(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args2())


end sub


Kann mir jemand weiterhelfen, wie ich den Fehler umgehen kann bzw. das ganze eleganter darstellen kann (insbesondere den Teil der Prozedur "Inhalte") ? Es würde mich natürlich auch interessieren, weshalb der Fehler ausgegeben wird.

Vielen Dank schon Mal im voraus.

WN
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo

Führe doch nur folgendes Makro aus , bei Selektion einer Zelle:

Code: Alles auswählen

sub zeitzuGeheimwert
dim odoc as object
dim osheet as object


odoc = ThisComponent
osheet = odoc.CurrentController.ActiveSheet
ozelle = odoc.GetCurrentSelection()
dim rz as double
dim gz1 as double
dim gz2 as double
dim gz3 as double
rz = 492
gz1=inputbox ("Bitte die Stunden eingeben: ")
gz2=inputbox ("Bitte die Minuten eingeben: ")
gz3=gz1*60 +gz2
uwert = gz3/rz 
ozelle.value = uwert
end sub 
und der Wert wird gleich in die Zelle geschrieben.

(Während der 'Laufzeit' einer Zellfunktion sind die Zellen gegen Überschreiben geschützt)

Gruß Karo
Zuletzt geändert von Karolus am Sa, 17.02.2007 00:03, insgesamt 1-mal geändert.
WN
**
Beiträge: 30
Registriert: Fr, 17.11.2006 23:36

Beitrag von WN »

Hallo Karo,

vielen Dank für Deine Mühe. Leider hat sich das Problem noch nicht gelöst. In der Zelle ist zwar der Wert sichtbar, allerdings immer noch nicht als Zahl sondern als Funktion "=zit()". Wenn ich den Inhalt der Zelle kopiere und an anderer Stelle einfüge wird dadurch wieder die Funktion aufgerufen. Wie bekomme ich es hin, dass in der Zelle der Wert als Zahl (z.B. 1) steht ?, so dass er auch kopiert werden kann ?

Viele Grüße

WN
Karolus
********
Beiträge: 7517
Registriert: Mo, 02.01.2006 19:48

Beitrag von Karolus »

Hallo

Wenn du nur den Code ausführst den ich gepostet habe, und die 'Funktion zit' bei dir löscht , hast du doch gleich den Zahlenwert in der Zelle, den kannst du kopieren wohin willst auch per weiteren Makrocode ??

Ps. Ich hab das missverständliche 'zit' mal eliminiert in der ersten Antwort.

Gruß Karo
WN
**
Beiträge: 30
Registriert: Fr, 17.11.2006 23:36

Beitrag von WN »

Hallo Karo,

vielen Dank. Es funktioniert. Ich habe Deine erste Antwort ungenau gelesen.
Entschuldigung.

Gruß

WN
Antworten