Macro läuft 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: Macro läuft nicht ;(

Re: Macro läuft nicht ;(

von heinetz » Mi, 29.04.2009 10:51

Hallo Charly,

auf den ersten Blick würde ich sagen, es ist exakt das, was ich brauche. Tausend Dank !!!
Daran kann man hervorragend nachvollziehen, wie es geht.

beste gruesse,
heinetz

Re: Macro läuft nicht ;(

von Charly » Mi, 29.04.2009 09:05

Hallo Heinetz!

Ich muss gestehen, dass ich bisher auch noch nicht mit einem "Listener" gearbeitet habe. Auf Grund deiner Frage habe ich mich jetzt mal daran gewagt und einen Code aus dem Forum, ich glaube es war einer von Jürgen =Turtle, entsprechend abgeändert.
Nachdem ich in meiner Beispieldatei Textwerte hatte, habe ich zum Übertrag den Befehl "string" verwendet. Bei Zahlen und Datums werte musst das durch "value" ersetzen.
Schau mal die Datei an, ob sie so funktioniert, wie du es brauchst.

Gruss
Charly
Dateianhänge
Listener_Beispiel.ods
(12.21 KiB) 113-mal heruntergeladen

Re: Macro läuft nicht ;(

von heinetz » Di, 28.04.2009 23:49

Hallo Forum,

nun habe ich einen Listener gefunden, der eventuell für mein Makro passen könnte und ausprobiert:

Code: Alles auswählen

Sub initializeListener
oListener = CreateUnoListener( "ClicListener_", "com.sun.star.view.XSelectionChangeListener" )
oDocument = ThisComponent
oDocument.getCurrentController.addSelectionChangeListener(oListener)
End Sub

Sub ClicListener_selectionChanged(oEvent)
MSGBOX("Selektion")
end sub
Das funktioniert. Sobald ich mit der Maus etwas markiere, wird die MsgBox ausgegeben. Wenn
ich aber den Code des Makros statt dessen definiere, funktioniert das Makro nicht mehr richtig ;(

Was ist hieran falsch ?

Code: Alles auswählen

Sub initializeListener
oListener = CreateUnoListener( "ClicListener_", "com.sun.star.view.XSelectionChangeListener" )
oDocument = ThisComponent
oDocument.getCurrentController.addSelectionChangeListener(oListener)
End Sub

Sub ClicListener_selectionChanged(oEvent)
oDoc = ThisComponent
ListeSheet = oDoc.sheets.getbyname("Liste")
AusdruckSheet = oDoc.sheets.getbyname("Ausdruck")

oSelect = ThisComponent.CurrentSelection.getRangeAddress
oSelectAR = oSelect.StartRow +1
Zellenwert = ListeSheet.getcellrangebyname("A" & oSelectAR).String

AusdruckSheet.getcellrangebyname("B5").String = Zellenwert
end sub
Der Listener 'hört' nur im Tabellenblatt Ausdruck.

danke für Tipps und
beste gruesse,
heinetz

Re: Macro läuft nicht ;(

von heinetz » Di, 28.04.2009 18:02

Jo,

das mit dem Listener habe ich nun auch schon mehrfach gelesen. Allerdings auch, dass
es je nach Event verschiedene Typen von Listenern gibt und welcher nun für mich der
richtige ist (beim markieren von irgendwas?), konnte ich nicht herausfinden. Ausserdem
habe ich nicht ganz verstanden, wo und wie ich den Listener in meinem Fall einbinden
muss.

beste gruesse,
heinetz

Re: Macro läuft nicht ;(

von Charly » Di, 28.04.2009 17:52

Hallo Heinetz!
heinetz hat geschrieben: Das ist natürlich zu umständlich. Ich möchte Schritt 2 automatisieren. Wie sorge ich nun
dafür, dass das Makro 'permanent' läuft bzw. immer angestossen wird, sobald ich im
Tabellenblatt 'Liste' irgendetwas markiere. So lief's als Excell-Makro.
Wenn du willst, dass ein Makro automatisch gestartet wird, brauchst du einen "Listener". Suche nach diesem Wort im Forum und du wirst eine Menge
Antworten finden z.b. folgende Links.

viewtopic.php?f=2&t=22620
viewtopic.php?f=18&t=22723

Gruß
Charly

Re: Macro läuft nicht ;(

von heinetz » Di, 28.04.2009 13:39

Hallo Forum,

so sieht's jetzt aus und funktioniert schon ganz gut:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main

oDoc = ThisComponent
ListeSheet = oDoc.sheets.getbyname("Liste")
AusdruckSheet = oDoc.sheets.getbyname("Ausdruck")

oSelect = ThisComponent.CurrentSelection.getRangeAddress
oSelectAR = oSelect.StartRow +1
Zellenwert = ListeSheet.getcellrangebyname("A" & oSelectAR).String

AusdruckSheet.getcellrangebyname("B5").String = Zellenwert

End Sub
... allerdings nur so:

1) Ich öffne das Dokument, markiere eine Zelle oder Zeile im Tabellenblatt 'Liste',
2) Ich öffne den Makro-Editor und führe es aus.
3) gewünschtes Ergebnis ist eingetreten.

Das ist natürlich zu umständlich. Ich möchte Schritt 2 automatisieren. Wie sorge ich nun
dafür, dass das Makro 'permanent' läuft bzw. immer angestossen wird, sobald ich im
Tabellenblatt 'Liste' irgendetwas markiere. So lief's als Excell-Makro.

danke für Tipps und

beste gruesse,
heinetz

Re: Macro läuft nicht ;(

von turtle47 » Di, 28.04.2009 02:08

Hallo,
heinetz hat geschrieben:Und jetzt würde ich die '1' aus 'A1' gerne 'dynamisieren[
Dann funktioniert folgendes:

Code: Alles auswählen

	oSelect = ThisComponent.CurrentSelection.getRangeAddress
	oSelectAR = oSelect.StartRow +1
	Zellenwert = ListeSheet.getcellrangebyname("A" & oSelectAR).value
Schau Dir auch mal die Seite von Michael an. Dort findest Du viele wertvolle Hinweise.

Viel Erfolg.

Jürgen

Re: Macro läuft nicht ;(

von heinetz » Di, 28.04.2009 01:00

Hi,

tausend Dank.
Zellenwert = ListeSheet.getcellrangebyname("A1").value
Und jetzt würde ich die '1' aus 'A1' gerne 'dynamisieren'. Etwa so:

$ZELLE = "A"+aktuelle_markierung().zeile();
Zellenwert = ListeSheet.getcellrangebyname($ZELLE).value

tausend Dank für jeden Tipp und
beste gruesse,
heinetz

Re: Macro läuft nicht ;(

von keksi1970 » Mo, 27.04.2009 17:48

Hi

oDoc = ThisComponent
ListeSheet = oDoc.sheets.getbyname("Liste")
AusdruckSheet = oDoc.sheets.getbyname("Ausdruck")

Zellenwert = ListeSheet.getcellrangebyname("A1").value
AusdruckSheet.getcellrangebyname("B5").value = Zellenwert

LG
Andreas

Einfacher ausgedrückt.

von heinetz » Mo, 27.04.2009 16:06

Hallo Forum,

vielleicht fange ich mal anders an:

Wie sieht ein Makro aus, dass den Wert der Zelle A1 in Tabellenblatt 'Liste' in B5 in Tabellenblatt 'Ausdruck' schreibt ?

danke für Hilfe und

beste gruesse,
hienetz

Macro läuft nicht ;(

von heinetz » Mo, 27.04.2009 15:54

Hallo Forum,

das folgende Macro ist ein ursprüngliches Excel-Macro und von Calc so importiert:

Rem Attribute VBA_ModuleType=VBADocumentModule
Sub Worksheet_SelectionChange(ByVal Target As Range)
Worksheets("Ausdruck").Cells(1, 3) = Cells(ActiveCell.Row, 2)
Worksheets("Ausdruck").Cells(2, 3) = Cells(ActiveCell.Row, 3)
Worksheets("Ausdruck").Cells(3, 3) = Cells(ActiveCell.Row, 4)
Worksheets("Ausdruck").Cells(5, 3) = Cells(ActiveCell.Row, 5)
Worksheets("Ausdruck").Cells(1, 7) = Cells(ActiveCell.Row, 7)
Worksheets("Ausdruck").Cells(2, 7) = Cells(ActiveCell.Row, 9)
Worksheets("Ausdruck").Cells(3, 7) = Cells(ActiveCell.Row, 10)
End Sub

Allerdings funktioniert es nicht ;(

Fehlermeldung: Basic-Laufzeitfehler. Sub- oder Function-Prozedur nicht definiert.

Was es tun soll ?

Im Tabellenblatt 'Ausdruck' sollen bestimmte Zellen mit den Werten der im
aktuell ausgewählten Tabellenblatt/Zeile automatisch gefüllt werden.

Sieht jemand, was da los ist ?

danke für Tipps und
beste gruesse,
heinetz

Nach oben