Seite 1 von 1
Worksheet code
Verfasst: Di, 02.02.2010 17:45
von shrabbels
Hallo, ich bin neu hier und habe eine Frage.
Kann mir jemand sagen wie der korrekte Oo Makro-Code für folgenden Microsoft Excel VBA-Code lautet. Oo nimmt ihn einfach so nicht.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$10" Then
If Target.Value = 23 Then
Application.EnableEvents = False
Range("S17").Value = Range("S17").Value + 1
Application.EnableEvents = True
End If
End If
End Sub
Herzlichen Dank schon mal.
Re: Worksheet code
Verfasst: Di, 02.02.2010 17:53
von komma4
Hehe, hast Du meine Antwort
hier nicht gelesen - oder nicht verstanden?
Re: Worksheet code
Verfasst: Di, 02.02.2010 18:12
von shrabbels
Hallo Ihr beiden und vielen Dank für eure Antworten.
Das mit der Formel funktioniert leider nicht, da fortlaufend gezählt werden soll. So steht immer eine 1 da.
Ehrlich gesagt ist mir das mit dem reinarbeiten zu aufwendig, da das Problem höchstwahrscheinlich das einzige sein wird, was es bei mir zu lösen gilt. Ich bin überhaupt beim Programieren ein blutiger Anfänger und stoße hier schon an die Grenzen meiner Fähigkeit und Lust. Aber mir scheint nichts anderes übrig zu bleiben...
Re: Worksheet code
Verfasst: Di, 02.02.2010 18:19
von shrabbels
oder ich muss mir doch das echte Excel besorgen.
Re: Worksheet code
Verfasst: Di, 02.02.2010 18:24
von komma4
shrabbels hat geschrieben:Hallo Ihr beiden und vielen Dank für eure Antworten.
Ich bin nur einer ... siehst Du doppelt?
shrabbels hat geschrieben:Das mit der Formel funktioniert leider nicht, da fortlaufend gezählt werden soll. So steht immer eine 1 da.
Dann machst Du etwas falsch* oder die Rahmenbedingungen** stimmen nicht!
* meine Ratschläge hier sind immer getestet und funktionieren demnach
** welche OOo-Version hast Du? für welches Betriebssystem?
Re: Worksheet code
Verfasst: Di, 02.02.2010 18:31
von komma4
shrabbels hat geschrieben:So steht immer eine 1 da.
noch ne Idee: steht in S17 ein Text? Linksbündig ausgerichet?
Re: Worksheet code
Verfasst: Di, 02.02.2010 18:33
von shrabbels
Ich habe Oo Version 3.1.
Die Formel funktionierte auch schon bei Excel nicht. Ich möchte das mir eine Zelle zählt, wie oft in einer anderen (deren Inhalt auch eine Formel ist) die 23 erscheint.
Nein, S17 ist noch leer. Mittig glaube ich.
Re: Worksheet code
Verfasst: Di, 02.02.2010 18:56
von komma4
Sorry, verstehe nur Bahnhof:
wie oft eine 23 in einer Zelle erscheint?
Wenn S17 leer ist und in A10 der Wert 23 steht (auch aus einer Formel berechnet), dann ist 1 absolut korrekt.
Was mit Excel ist kann ich nicht sagen: hier geht es um OOo und ich habe keine Microsoft-Produkte.
Re: Worksheet code
Verfasst: Di, 02.02.2010 19:19
von shrabbels
S17 = 23. A10 = 1, dann ändert sich etwas und es steht in S17 eine 42. A10 bleibt 1. Es ändert sich wieder etwas und in S17 steht wieder eine 23. Jetzt sollte in A10 eine 2 stehen. Kann es sein, dass das mit Oo nicht geht?!
Re: Worksheet code
Verfasst: Di, 02.02.2010 21:11
von bst
Abend auch,
Dein Change-Ereignis tut schon in Excel nicht das was Du möchtest.
S17 wird da nur erhöht wenn Du A10 manuell (oder per VBA) auf den Wert 23 veränderst, nicht wenn die Änderung durch eine Formel geschieht.
Von dem abgesehen sollte sich das Change-Ereignis von Excel in etwa so in OOo Calc realisieren lassen.
Um das automatisch zu starten musst Du AutoOnOpen noch mit dem Ereignis "Dokument öffnen" und AutoOnClose mit dem Ereignis "Dokument schließen" verknüpfen.
Jegliche Verbesserungen sind mehr als willkommen.
cu, Bernd
--
Code: Alles auswählen
REM ***** BASIC *****
Dim oModListener as object
Dim oModZelle as object
Sub AutoOnOpen
on error resume next
AutoOnClose
oModListener = CreateUnoListener("MyChange_", "com.sun.star.util.XModifyListener")
oModZelle = ThisComponent.sheets().getByName("Tabelle1").getCellRangeByName("A10")
oModZelle.AddModifyListener(oModListener)
End Sub
Sub AutoOnClose
on error resume next
oModZelle.removeModifyListener(oModListener)
End Sub
Sub MyChange_Modified(oEvent)
oActZelle = ThisComponent.CurrentSelection
if oActZelle.supportsService("com.sun.star.sheet.SheetCell") then
if oActZelle.Value = 23 Then
oCell = ThisComponent.sheets().getByName("Tabelle1").getCellRangeByName("S17")
oCell.Value = oCell.Value + 1
endif
endif
End Sub