Seite 1 von 1
Macro läuft nicht ;(
Verfasst: Mo, 27.04.2009 15:54
von heinetz
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
Einfacher ausgedrückt.
Verfasst: Mo, 27.04.2009 16:06
von heinetz
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
Re: Macro läuft nicht ;(
Verfasst: Mo, 27.04.2009 17:48
von keksi1970
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
Re: Macro läuft nicht ;(
Verfasst: Di, 28.04.2009 01:00
von heinetz
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 ;(
Verfasst: Di, 28.04.2009 02:08
von turtle47
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 ;(
Verfasst: Di, 28.04.2009 13:39
von heinetz
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 ;(
Verfasst: Di, 28.04.2009 17:52
von Charly
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 ;(
Verfasst: Di, 28.04.2009 18:02
von heinetz
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 ;(
Verfasst: Di, 28.04.2009 23:49
von heinetz
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 ;(
Verfasst: Mi, 29.04.2009 09:05
von Charly
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
Re: Macro läuft nicht ;(
Verfasst: Mi, 29.04.2009 10:51
von heinetz
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