Selectionchange Diagramm

Hallo Leute,

ich stricke gerade ein Auswertungs-Makro mit diversen Tabellenblättern.

Alle Import-, Sortier- und Filteroperationen laufen schon. ich habe jetzt eine Tabelle mit (je nach Benutzereingabe) unterschiedlich vielen Datensätzen drin.
Jetzt möchte ich, dass dem Nutzer ein Diagramm angezeigt wird, wenn er eine Zelle der entsprechenden Zeile anklickt. Von der Microsoft-HP habe ich mir ein Makro für das SelectionChange-Ereignis runtergeladen, was die aktuell markierte Zelle fett schreibt. Dazu soll jetzt nur noch die Funktion Tortendiagramm() kommen, die ich schon programmiert habe und die auch funktioniert. Nun habe ich folgende Fragen:

  1. Wohin muss ich das SelectionChange-Ereignis schreiben, damit es bereits bei der Erstellung des ganzen Workbooks dabei ist? Weil im Moment läufts so: Das Makro führt alle Aktionen aus => Ergebnis: Mappe01.xls => VB öffnen => erstellte Tabelle öffnen => Workbook als Objekt wählen => Quellcode in das SelectionChange-Ereignis kopieren.

Das muss doch besser gehen…

  1. Wie kann ich innerhalb dieses SelectionChange-Ereignisses meine Sub tortendiagramm() ausführen? Ich bekomme ein Sub oder Funktion nicht definiert-Fehler. Diese Prozedur liegt in Modul1.

Weil ich noch nicht sooooo tief in VBA stecke, hab ich kaum ne Ahnung über den Aufbau, wo was wann hingehört. Ich würde mich freuen, wenn ihr mir helfen könntet! ciao

Achso, was ich noch vergessen habe: Das SelectionChange Ereignis soll nur auf dem einen bestimmten Tabellenblatt funktionieren.

Gibts denn hier im Forum keine Möglichkeit, einen Artikel zu ändern. Dann müsste ich nicht doppelposten…

ciao

Hi Micha,

  1. Wohin muss ich das SelectionChange-Ereignis schreiben,
    damit es bereits bei der Erstellung des ganzen Workbooks dabei
    ist? Weil im Moment läufts so: Das Makro führt alle Aktionen
    aus => Ergebnis: Mappe01.xls => VB öffnen =>
    erstellte Tabelle öffnen => Workbook als Objekt wählen
    => Quellcode in das SelectionChange-Ereignis kopieren.
    Das muss doch besser gehen…

Mir unklar, du hast ein Makro was eine mappe01.xls erstellt und den Code dort einfügt, oder wie soll ich das deuten.

  1. Wie kann ich innerhalb dieses SelectionChange-Ereignisses
    meine Sub tortendiagramm() ausführen? Ich bekomme ein Sub oder
    Funktion nicht definiert-Fehler. Diese Prozedur liegt in
    Modul1.

Sub tortendiagramm() in Modul1 ist korrekt. Im Codebereich des Tabellenblattes (Doppelklick auf den Namen), z.B. Tabelle1:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call tortendiagramm
End Sub

Gruß
Reinhard

Gibts denn hier im Forum keine Möglichkeit, einen Artikel zu
ändern. Dann müsste ich nicht doppelposten…

Hi Micha,
ändern kannst du nicht. Aber solange kein andrer geantwortet hat kannst du es löschen und neu einstellen.
Prinzipell hättest du erst dein 2tes dann dein 1tes Posting löschen können und dann einen neuen Artikel einstellen.
Jetzt geht das nicht mehr da ich antwortete :smile:
Gruß
Reinhard

Hi Micha,

  1. Wohin muss ich das SelectionChange-Ereignis schreiben,
    damit es bereits bei der Erstellung des ganzen Workbooks dabei
    ist? Weil im Moment läufts so: Das Makro führt alle Aktionen
    aus => Ergebnis: Mappe01.xls => VB öffnen =>
    erstellte Tabelle öffnen => Workbook als Objekt wählen
    => Quellcode in das SelectionChange-Ereignis kopieren.
    Das muss doch besser gehen…

Also: Das Makro liegt in der Personl.xls (hatte ich vergessen).

Mir unklar, du hast ein Makro was eine mappe01.xls erstellt

exakt!

und den Code dort einfügt, oder wie soll ich das deuten.

das leider nicht. Nachdem Mappe01.xls erstellt ist und alle möglichen Sachen abgearbeitet sind, muss ich im VBA-Editor manuell in die entsprechende Tabelle der ersteltten Mappe01 wechseln und den Code dort im SelectionChange-Ereignis ablegen. Nach dem Speichern funktioniert das Ereignis dann. Ich würde gerne, dass direkt bei der Erstellung der Mappe01.xls im Worksheet-Objekt der „Tabelle7“ (das ist sie bei mir) der SelectionChange-Code eingefügt wird.

Eigentlich ist die Diagrammsache ähnlich gelagert. Bei der Erstellung der Mappe01 soll die Sub tortendiagramm() reingeschrieben werden (ich kann die 5 Zeilen Code eigentlich auch gleich ins SelectionChange-Ereignis schreiben, ich brauch es eh nur dort)

Vielen Dank erstmal für deine schnelle Antwort. Wenn du noch weitere Infos brauchst, sag Bescheid!

Hi Micha,

Mir unklar, du hast ein Makro was eine mappe01.xls erstellt

exakt!

Prinzipiell ist es immer gut vorhandenen relevanten Code mitzuposten.

und den Code dort einfügt, oder wie soll ich das deuten.

das leider nicht. Nachdem Mappe01.xls erstellt ist und alle
möglichen Sachen abgearbeitet sind, muss ich im VBA-Editor
manuell in die entsprechende Tabelle der ersteltten Mappe01
wechseln und den Code dort im SelectionChange-Ereignis
ablegen. Nach dem Speichern funktioniert das Ereignis dann.
Ich würde gerne, dass direkt bei der Erstellung der
Mappe01.xls im Worksheet-Objekt der „Tabelle7“ (das ist sie
bei mir) der SelectionChange-Code eingefügt wird.

das geht über Insertlines, also Zeilen einfügen.

z.B. hier sind einige Codes:

http://groups.google.de/groups/search?hl=de&ie=UTF-8…

Gruß
Reinhard

Hi Reinhard,
danke für den Tipp. Habe jetzt in meinem Modul1 direkt bei der Erstellung des entsprechenden Tabellenblatts folgenden Code eingefügt

Sheets.Add
Sheets("Tabelle7").Move After:=Sheets(5) 
With ActiveWorkbook.VBProject.VBComponents"Tabelle7").CodeModule 
.InsertLines .countoflines + 1, "Dim x As Long" 
.InsertLines .countoflines + 1, "Private Sub Worksheet\_SelectionChange(ByVal Target As Excel.Range)" 
.InsertLines .countoflines + 1, "' Set the row containing the active cell to bold." 

...

.InsertLines .countoflines + 1, "End Sub"

leider schmiert mein Excel nun jedesmal ab, wenn ich das Makro ausführe. Hast du ne Ahnung woran es liegen könnte?

Wenn ich nur die erste Zeile einfüge klappt es. Ich habe es auch mit absoluten Zeilenangaben (1,2,3…) probiert aber das ging auch nicht.

Wenn ich .Insertlines eingebe, erwartet der VBA-Editor die Argumente (Zeile, String) in Klammern. schreibe ich es aber so, kommt am Ende ein „= erwartet“-Fehler.
Erst dachte ich, dass es an der Angabe „Zeile 1“ lag, weil dort ja schon „Option Explicit“ steht, aber auch wenn ich ab Zeile 3 loslege, schmierts ab.

Weisst du zufällig wie der Code hierfür richtig geschrieben wird?

ciao,
Micha

Hallo,

Gibts denn hier im Forum keine Möglichkeit, einen Artikel zu
ändern. Dann müsste ich nicht doppelposten…

… das ist so gar kein Doppelposting, also völlig in Ordnung. :smile:

Wenn Du selbst nicht mehr löschen kannst und die Änderung nicht dazu führt, daß eine bereits gegebene Antwort davon betroffen ist, gibt es auch noch eine Möglichkeit, eine kleine Mail an mich. Ich kann den Beitrag dann für Dich ändern und schreibe auch dazu, daß das auf Deinen Wunsch geschehen ist. Ich bin nicht immer so langsam wie heute. :smile:

Gruß, Rainer [MOD]

Sheets.Add
Sheets(„Tabelle7“).Move After:=Sheets(5)
With
ActiveWorkbook.VBProject.VBComponents"Tabelle7").CodeModule
.InsertLines .countoflines + 1, „Dim x As Long“
.InsertLines .countoflines + 1, „Private Sub
Worksheet_SelectionChange(ByVal Target As Excel.Range)“
.InsertLines .countoflines + 1, „’ Set the row containing the
active cell to bold.“
.InsertLines .countoflines + 1, „End Sub“

leider schmiert mein Excel nun jedesmal ab, wenn ich das Makro
ausführe. Hast du ne Ahnung woran es liegen könnte?
Wenn ich nur die erste Zeile einfüge klappt es. Ich habe es
auch mit absoluten Zeilenangaben (1,2,3…) probiert aber das
ging auch nicht.

Hi Micha,
folgender Code läuft problemlos durch, auch mit Option Expilicit:

Sub tt()
With ActiveWorkbook.VBProject.VBComponents("Tabelle1").CodeModule
 .InsertLines .countoflines + 1, "Dim x As Long"
 .InsertLines .countoflines + 1, "Private Sub Worksheet\_SelectionChange(ByVal Target As Excel.Range)"
 .InsertLines .countoflines + 1, "' Set the row containing the active cell to bold."
 .InsertLines .countoflines + 1, "End Sub"
End With
End Sub

Allerdings mußte ich vorher in Excel unter Extras–Makros–Sicherheit ein Häkchen setzen bei „Zugriff auf Vba-Projekt vertrauen“
Das gleiche leistet wohl der (ungetestete) Sendbefehl:
SendKeys „%xksv {TAB 3} +~“ 'lässt Zugriff auf VBA zu
Gruß
Reinhard

Hallo Reinhard,

erstmal das große Plus: EXCEL schmiert nicht mehr ab, wenn der Code ausgeführt werden soll.

Jetzt das große Minus: Er wird nicht ausgeführt.

ActiveWorkbook.VBProject.VBComponents(„Tabelle1“).CodeModule

bei dieser Zeile bricht das Makro mit dem Laufzeitfehler 9 (…ausserhalb des Index) ab. Das heisst doch, dass ich scheinbar in den Code einer Tabelle schreiben wollte, die es nicht gibt, oder? Das hab ich aber mit mehreren SICHER vorhandenen Tabellen geprüft…
Vielleicht ist das auch so eine public/private-Geschichte, dachte ich
Hab dann einfach mal die betreffenden Prozeduren Public gemacht - kein Erfolg.

Allerdings mußte ich vorher in Excel unter
Extras–Makros–Sicherheit ein Häkchen setzen bei „Zugriff auf
Vba-Projekt vertrauen“

Das Häkchen war nämlich auch angeklickt bei mir

(Nebenbei:Nachdem EXCEL zuletzt immer abgeschmiert ist, hatte ich mir schon eine andere Lösung überlegt, und zwar sollte eine Schaltfläche auf einem Tabellenblatt eine kleine Userform öffnen. Darin kann der Nutzer dann die entsprechende Zeile auswählen und bestätigen. Also als Selectionchange-Ersatz.
Auch das hat zu nichts geführt, weil ich nicht mal einem (ohne VBA erstelltem) Knopf ein Makro zuweisen konnte. Der Menüpunkt „Makro zuweisen…“ blieb grau unterlegt.

Kann es sein, dass es Firmenversionen von Excel gibt (an so einer sitz ich gerade, die unter der Oberfläche restriktivere Sicherheitseinstellungen besitzen als oberflächlich zu sehen sind?)

Hi Micha,

erstmal das große Plus: EXCEL schmiert nicht mehr ab, wenn der
Code ausgeführt werden soll.
Jetzt das große Minus: Er wird nicht ausgeführt.

ActiveWorkbook.VBProject.VBComponents(„Tabelle1“).CodeModule

bei dieser Zeile bricht das Makro mit dem Laufzeitfehler 9
(…ausserhalb des Index) ab. Das heisst doch, dass ich
scheinbar in den Code einer Tabelle schreiben wollte, die es
nicht gibt, oder? Das hab ich aber mit mehreren SICHER
vorhandenen Tabellen geprüft…

das kann ich nicht nachvollziehen, bei mir läuft der Code durch und wird auch ausgeführt.
Probier mal:

Sub tt()
With ActiveWorkbook.VBProject.VBComponents(2).CodeModule
 .InsertLines .countoflines + 1, "Dim x As Long"
 .InsertLines .countoflines + 1, "Private Sub Worksheet\_SelectionChange(ByVal Target As Excel.Range)"
 .InsertLines .countoflines + 1, "' Set the row containing the active cell to bold."
 .InsertLines .countoflines + 1, "End Sub"
End With
End Sub

Vielleicht ist das auch so eine public/private-Geschichte,
dachte ich
Hab dann einfach mal die betreffenden Prozeduren Public
gemacht - kein Erfolg.

Der Code gehört in Modul1, aber selbst wenn er wo anders steht müßte er ausgeführt werden wenn du dich reinstellst und F5 drückst.

Allerdings mußte ich vorher in Excel unter
Extras–Makros–Sicherheit ein Häkchen setzen bei „Zugriff auf
Vba-Projekt vertrauen“

Das Häkchen war nämlich auch angeklickt bei mir

(Nebenbei:Nachdem EXCEL zuletzt immer abgeschmiert ist, hatte
ich mir schon eine andere Lösung überlegt, und zwar sollte
eine Schaltfläche auf einem Tabellenblatt eine kleine Userform
öffnen. Darin kann der Nutzer dann die entsprechende Zeile
auswählen und bestätigen. Also als Selectionchange-Ersatz.
Auch das hat zu nichts geführt, weil ich nicht mal einem (ohne
VBA erstelltem) Knopf ein Makro zuweisen konnte. Der Menüpunkt
„Makro zuweisen…“ blieb grau unterlegt.

Kann ich nicht nachvollziehen.

Kann es sein, dass es Firmenversionen von Excel gibt (an so
einer sitz ich gerade, die unter der Oberfläche restriktivere
Sicherheitseinstellungen besitzen als oberflächlich zu sehen
sind?)

Bill ist zwar alles zuzutrauen aber ich glaube nicht daß es so ist.
Mal unter Extras–Optionen und Extras–Makros–Sicherheit alle Häkchen aktivieren die evtl. relevant sein könnten.
Was ich nicht weiß, da ich kein Netzwerk habe, ob der Admin deines Netzwerkes irgendwie deine Rechte eingeschränkt hat und du keine Recht hast schreibend auf ein Blatt, also auf die Datei, zuzugreifen.

Ich habe hier XL2002, welche Version benutzt du?

Gruß
Reinhard

Jetzt kommts: Excel schmiert NICHT ab, wenn ich vor dem Ausführen des Makros den VB-Editor schließe.

Dann funktionierts. komisch aber wahr.