Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Makrostart

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Makrostart (3058 mal gelesen)
stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 23. Apr. 2009 21:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Zielwertsuche.zip


worksheet_calc.zip

 
Hallo,

ich habe mir folgendes einfaches Makro zur Durchführung einer Zielwertsuche per Makrorekorder erzeugt(siehe auch beigefügtes file "Zielwertsuche"):

Code:
Sub Zielwertsuche()
Range("c1").GoalSeek Goal:=Range("b1"), ChangingCell:=Range("a1")
End Sub

Wenn ich es händisch über MAKRO-AUSFÜHREN starte läuft es. Wenn ich es per Active-X Steuerelementbutton starten will mit
Code:
Private Sub CommandButton1_Click()
Application.Run "Zielwertsuche"
End Sub

läuft es nicht (Fehlermeldung „die goalseek-Methode des Range objects ist fehlerhaft“;). Ich habe statt „application.run“ auch schon „call“ oder nur den Makronamen probiert, immer kommt die Fehlermeldung. Ich frage mich seit Tagen wieso das nicht funktioniert. Jetzt hatte ich heute Gelegenheit es mal mit Excel03 zu testen und dort klappt der Aufruf per active-x Button problemlos. Also scheint es an meiner Excel-Version 97 zu liegen aber ich habe mit EX97 auch schon Makros per active-x button gestartet, also wo liegt das Problem? Mittlerweile habe ich zwar eine Alternative gefunden (wenn ich statt des Active-x Elemets den button aus der  Formularleiste verwende klappts auch in Excel97) aber ich will ja nicht dumm sterben  ;)  und der Aufruf per Steuerelement button wäre mir dann doch lieber.

Und gleich noch eine zweite Frage: ich habe ein Makro (auf Tabellenblatt1), welches per „worksheet_calculate()“ automatisch gestartet wird und die Skalierung der x-Achse eines Diagramms automatisch anpasst

Code:
Private Sub Worksheet_Calculate()
    Dim chDiagramm As Chart
    Set chDiagramm = ActiveSheet.ChartObjects(1).Chart
             
            With chDiagramm
                  .Axes(xlCategory).MaximumScale = Range("a14")
                  .Axes(xlCategory).MinimumScale = 0
            End With
   
    Set chDiagramm = Nothing
       
End Sub
Soweit kein Problem, es läuft wie gewünscht. Wenn ich jedoch in irgendein anderes Tabellenblatt der Mappe wechsle und in einer beliebigen Zelle einen beliebigen Eintrag machen möchte, kommt die Fehlermeldung „die chartsobjects-Eigenschaft des worksheet-objektes kann nicht zugeordnet werden“ und im VBA-Code wird die Zeile

Code:
Set chDiagramm = ActiveSheet.ChartObjects(1).Chart
gelb markiert. Ich habe mal versucht die Situation in beigefügtem file "worksheet_calc" nachzubauen, nur leider funktioniert es in diesem dummie-file ohne Probleme    .
Ich vermute mit meinem bescheidenen Halbwissen mal folgendes: durch den Zelleintrag auf z.B: Tabellenblatt 2 wird das „worksheet_calculate“ ausgelöst wird und somit das Makro gestartet. Da aber kein Diagramm auf dem „active sheet“ Tabellenblatt2  ist, kommt es zur Fehlermeldung. Soweit wäre es für mich nachvollziehbar, aber was ich nicht verstehe: ein Makro mit Start per „worksheet_calculate“ wird doch nur gestartet, wenn man sich auch auf dem Tabellenblatt befindet, in dem das Makro hinterlegt ist (also hier Tabellenblatt 1)? Oder woran könnte es sonst liegen?

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nepumuk
Mitglied
Entwicklungsleiter


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 24. Apr. 2009 01:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hallo Stefan,

1. GoalSeek versucht auf die Tabelle zuzugreifen, kann aber nicht, da der Commandbutton den Fokus hat. Setz mal die TakeFocusOnClick-Eigenschaft des Buttons auf False.

2. Da irrst du dich. Formel werden auch berechnet, wenn sie in einer anderen Tabelle sind. Flüchtige Formeln (Heute, Jetzt, Zufallszahl .....) werden sogar berechnet, wenn sie in einer anderen Mappe sind. Wenn du das Diagramm unbedingt bei jeder Neuberechnung skalieren musst, dann so:

Code:
Private Sub Worksheet_Calculate()
    With ChartObjects(1).Chart.Axes(xlCategory)
        .MaximumScale = Range("a14")
        .MinimumScale = 0
    End With
End Sub

Innerhalb der Klasse musst du nicht mit dem Klassenobjekt hantieren.

Activesheet kann jedes Blatt in jeder Mappe innerhalb der Application sein, daher möglich meiden.

Der Umweg über eine Objektvariable bringt keinen Vorteil, es dauert nur ein bisschen länger.

Set Nothing kannst du dir in dem Fall auch sparen, denn die Variable ist ja auf Prozedurebene deklariert und du erzeugst keine neue Instanz des Objektes. Das musst du nur machen, wenn du eine Klasseninstanz mit New erzeugst, bzw. mit der CreateObject-Funktion eine ActiveX-Komponente anlegst.

------------------
Gruß
Nepumuk 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 24. Apr. 2009 08:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi Stefan,

zu Frage 2: der Fehler tritt dann auf, wenn in dem betreffenden Arbeitsblatt kein Diagramm vorhanden ist. Das kannst du umgehen, indem du dies vorher prüfst:

Code:
Private Sub Worksheet_Calculate()
    Dim chDiagramm As Chart
    If ActiveSheet.ChartObjects.Count > 0 Then
        Set chDiagramm = ActiveSheet.ChartObjects(1).Chart
        With chDiagramm
              .Axes(xlCategory).MaximumScale = Range("a14")
              .Axes(xlCategory).MinimumScale = 0
        End With
    End If
    Set chDiagramm = Nothing
End Sub

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nepumuk
Mitglied
Entwicklungsleiter


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 24. Apr. 2009 16:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hallo Karin,

und wenn sich auf dem ActiveSheet doch ein Diagramm befindet, aber ein ganz anderes?

------------------
Gruß
Nepumuk 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 24. Apr. 2009 20:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
Zitat:
Setz mal die TakeFocusOnClick-Eigenschaft des Buttons auf False
Danke, genau das war der Fehler. Jetzt läufts. Und auch die Achsenskalierung klappt auch Dank Eurer Hilfe.

Zitat:
Da irrst du dich. Formel werden auch berechnet, wenn sie in einer anderen Tabelle sind

Aber wenn ich Dein Makro zur Achsenskalierung nehme und in mein Beispielfile "worksheet_calc" auf Tabellenblatt 1 setzte, wird das Diagramm bei jeder neuen Eingabe eines x-Wertes neu skaliert. Wenn ich das Makro auf ein anderes Tabellenblatt setze (und auf Blatt1 lösche), kann ich auf Blatt1 die x-Werte des Diagrammes beliebig ändern, ohne das die Achsenskalierung angepasst wird. Also wird das Makro doch nur gestartet, wenn die Neuberechnung auch auf dem entsprechenden Tabelenblatt stattfindet   Sonst wäre es doch  von der Funktion her mehr eine Art "workbook_calculate" statt ein "worksheet_calculate", zumindest meinem Verständnis nach.

Gibt es eigentlich noch andere Möglichkeiten ein Makro automatisch zu starten? In einem Fall habe ich nämlich ein Problem mit dem Start per "worksheet_calculate": und zwar wird hier zur Achsenskalierung ein Wert herangezogen, der per Zielwertsuche berechnet wird. Und bei jedem Iterationsschritt der Zielwertsuche wird sofort das Diagramm neu skaliert. Dies führt teilweise zu Fehlermeldungen, anscheinend da während der Iteration auch negative Zahlen auftreten, die bei einer noch stattfindenden Potenzbildung zu #Zahl! als Wert für die Achsenskalierung und somit zur Fehlermeldung führen. Deshalb bin ich dazu übergegengen, das Makro hier per "worksheet_change" zu starten und für den Makrostart alle Zellen abzufragen, die in die Formel zur Berechnung des Wertes für die Skalierung einfließen. Dummerweise fließt aber auch ein Wert ein, der aus einer dropdown Kombinationsfeld ausgewälht wird. Und wenn hier ein neuer Wert ausgewählt wird, startet das Makro nicht da es sich für Excel dabei anscheinen nicht um eine Werteeingabe handelt. Deshalb suche ich nach einer Möglichkeit das Makro automatisch zu starten, welche sowohl auf eine Werteingabe als auch auf eine Auswahl aus einer Combobox reagiert. Gibt es so etwas? In meinem VBA-Buch bin ich auf sog. "Chart-Ereignisse" gestossen. Es gibt wohl ein solches Ereignis namens "calculate", welches reagiert, wenn ein Zitat "Diagramm auf Basis veränderter Daten neu gezeichnet" wird. Könnte mir das weiterhelfen? Bisher habe ich nämlich noch nicht genau kapiert, wie das programmtechnisch zu realisieren ist, aber wenn das erfolgversprechend ist muss ich mich mal weiter damit befassen.

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 24. Apr. 2009 21:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Nepumuk:
und wenn sich auf dem ActiveSheet doch ein Diagramm befindet, aber ein ganz anderes?

...dann soll es offensichtlich nicht skaliert werden, denn im Code ist der Bezug explizit ChartObjects(1) gesetzt.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nepumuk
Mitglied
Entwicklungsleiter


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 24. Apr. 2009 22:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hallo Karin,

ChartObjects(1) gibt es auf jeder Tabelle, welche mindestens ein Diagramm beinhaltet. ChartObjects ist eine Eigenschaft der Tabelle nicht der Mappe.

Du hast eine Mappe mit drei Tabellen und auf jeder Tabelle befindet sich ein Diagramm, dann hast du dreimal ChartObjects(1). Wenn du nun Bezug nimmst auf ActiveSheet.ChartObjects(1) wird also, je nachdem welche Tabelle aktiv ist, ein anderes Diagramm angesprochen.

------------------
Gruß
Nepumuk 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 25. Apr. 2009 08:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Nepumuk:
ChartObjects(1) gibt es auf jeder Tabelle, welche mindestens ein Diagramm beinhaltet. ChartObjects ist eine Eigenschaft der Tabelle nicht der Mappe.

Du hast eine Mappe mit drei Tabellen und auf jeder Tabelle befindet sich ein Diagramm, dann hast du dreimal ChartObjects(1). Wenn du nun Bezug nimmst auf ActiveSheet.ChartObjects(1) wird also, je nachdem welche Tabelle aktiv ist, ein anderes Diagramm angesprochen.


Das ist mir alles hinreichend bekannt und für das Problem von Stefan ohne Relevanz.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nepumuk
Mitglied
Entwicklungsleiter


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 25. Apr. 2009 09:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi,

und warum schreibst du dann so ein hirnloses Programm mit ActiveSheet.ChartsObjects im Klassenmodul der Tabelle, in der das ChartObject 100% eindeutig ist? Scheint also eher so, als hättest du überhaupt nichts begriffen. Woher willst du denn wissen, dass es in anderen Tabelle keine Charts gibt?

Deine zusätzliche Abfrage würde den Zugriff auf ein falsches Chart auf alle Fälle nicht verhindern. Ist ja wie im Fahrplan nachschauen ob ich einen geschlossenen Bahnübergang trotzdem überqueren kann. Laut Fahrplan kommt kein Zug, du bist aber trotzdem tot weil der außerplanmäßige dich überrollt hat.

------------------
Gruß
Nepumuk 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

runkelruebe
Moderator
Straßen- / Tiefbau




Sehen Sie sich das Profil von runkelruebe an!   Senden Sie eine Private Message an runkelruebe  Schreiben Sie einen Gästebucheintrag für runkelruebe

Beiträge: 8075
Registriert: 09.03.2006

MS-Office 365 ProPlus x86
WIN7(x64)

erstellt am: 25. Apr. 2009 11:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Guten Morgen zusammen,
soll ich    und ein paar bequemere Stühle bereitstellen oder geht es evtl. ohne weiter?

------------------
Gruß,
runkelruebe          Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße...

System-Info | Excel -Suche | RuA-Suche | FAQ-ACAD | CAD.de-Hilfe | sinnvoll fragen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 25. Apr. 2009 13:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

über solche Beiträge wie deine letzten bin ich erhaben und sehe es unter meiner Würde, darauf einzugehen. Trage bitte die Differenzen, die du offensichtlich mir gegenüber hegst, nicht auf dem Rücken der Fragesteller aus! Das schadet dem Forum und ist eines MVP ganz und gar nicht würdig.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 25. Apr. 2009 13:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Schönen guten Tag,

das Wetter ist doch heute viel zu schön zum streiten 

Punkt 1: die Makros von euch beiden funktionieren bei mir. Somit nochmal recht schönen Dank an euch beide.

Punkt 2: trotzdem stehe ich noch immer auf dem Schlauch: ein Makro mit "worksheet_calculate" soll, wenn ich euch richtig verstehe, immer gestartet werden, sobald auf einem beliebigen Tabellenblatt der Mappe eine Neuberechnung stattfindet? Dazu folgender Test:
Ich habe bei mir das Achsenskaliermakro (egal ob die Variante von Nepumuk oder Beverly) in der VBA-Umgebung unter "VBA-Projekt - MicrosoftExcelObjekte - Tabelle1" platziert. Das zu skalierende Diagramm und die dazugehörige Wertetabelle sitzen in Excel auf Tabelle1:
-Bei einer neuen Werteeingabe (bzw. Neuberechnung)auf Tabelle1 wird das Diagramm neu skaliert -->OK.
-Nun kopiere ich den Makrocode auf "VBA-Projekt - MicrosoftExcelObjekte - Tabelle2" (und lösche ihn auf Tabelle1), Diagramm+Wertetabelle bleiben auf Tabelle1-->bei neuer Werteeingabe (bzw. Neuberechnung) wird das Diagramm nicht neu skaliert. D.h. für mich, dass das Makro durch das worksheet_calculate nur dann gestartet wird, wenn die Werteeingabe (bzw. Neuberechnung) auf demjenigen Tabellenblatt stattfindet, auf dem auch das Makro platziert ist. Ansonsten müsste die Skalierung doch auch in dem zweiten Fall durchgeführt werden Also wo mache ich den Fehler???

Punkt 3: falls jemand noch etwas dazu sagen kann/möchte, ob es außer "worksheet_calculate" noch eine Makrostartmöglichkeit gibt, die sowohl auf eine Werteeingabe als auch eine Comboboxauswahl reagiert (siehe mein obiger Beitrag), würde ich mich freuen.

Ansonsten besten Dank und schönes Wochenende.

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 25. Apr. 2009 13:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi Stefan,

zu Punkt 3: bei deiner direkten Werteeingabe in einer Zelle kannst du das Worksheet_Change Ereignis verwenden. Außerdem könntest du den Code auch direkt bei Auswahl in der ComboBox auslösen.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 25. Apr. 2009 14:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Karin,

freut mich nochmal von Dir zu hören.
das "worksheet_change" spricht aber nur auf die Werteeingabe an und nicht auf eine Auswahl aus einer Combobox. Das Problem ist, dass mein Max-Wert für die Diagrammskalierung berechnet wird in der Art von Max-Wert = a1+b1 (wobei a1 ein händisch eingegebener Wert ist, b1 der Ausgabewert aus einer Combobox). Somit wird die Neuskalierung nur bei Werteeingabe in a1 neu durchgeführt, aber nicht, wenn in der Combobox ein neuer Wert ausgewählt wird.

Zitat:

Außerdem könntest du den Code auch direkt bei Auswahl in der ComboBox auslösen

Was Du damit meinst habe ich leider nicht verstanden?

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 25. Apr. 2009 15:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi Stefan,

schreibe den Code für die eigentliche Diagrammerstellung in ein allgemeines Modul (z.B. als Sub DiaSkalieren) und rufe sie im Worksheet_Change Ereignis auf:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then DiaSkalieren
End Sub


Für die ComboBox aus der Steuerelmente-Toolbox würde der Code dann so aussehen:
Code:
Private Sub ComboBox1_Change()
    DiaSkalieren
End Sub

Somit würde das Diagramm sowohl bei einem Eintrag in Zelle A1 als auch bei Auswahl mit der ComboBox skaliert werden.

:edit ich habe mir mal erlaubt, den Zellwert auf A1 zu ändern  gruss @Τhomas Ηarmening
------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 25. Apr. 2009 15:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi Stefan,

Korrektur: A14 muss natürlich A1 heißen, da du die Eingabe ja in A1 vornimmst.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 25. Apr. 2009 20:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Karin,

da mich weder Excelhilfe, google noch stundenlanges rumprobieren weitergebracht haben muss ich nochmal nachfragen: die Sub DiaSkalieren steht in Modul1 und sieht bei mir folgendermaßen aus:

Code:

Sub DiaSkalieren()
    Dim chDiagramm As Chart
   
        Set chDiagramm = ActiveSheet.ChartObjects(1).Chart
        With chDiagramm
              .Axes(xlCategory).MaximumScale = Range("f88")
              .Axes(xlCategory).MinimumScale = Range("f87")
        End With
   
    Set chDiagramm = Nothing
End Sub


Die beiden private subs zum Aufruf von DiaSkalieren sehen aus wie von Dir beschrieben und stehen auf dem Tabellenblatt1. Der Aufruf über das worksheet_change Ereignis (sprich Werteingabe in a1) funktioniert, aber beim anklicken der Combobox kommt immer die Fehlermeldung "die maximum scale Eigenschaft des axis objektes kann nicht festgelegt werden" und die Zeile ".Axes(xlCategory).MaximumScale = Range("f88")
" wird markiert. Gibts hier auch einen Kniff wie z.B. mit dem Fokus? (wobei die Combobox lt. meinem schlauen Buch keine TakeFocusOnClick Eigenschaft besitzt).

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 26. Apr. 2009 10:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi Stefan,

ich kann den Fehler bei mir nicht nachvollziehen. Lade deine Mappe doch mal hoch, denn offensichtlich ist in meiner nachgebauten Arbeitsmappe irgend etwas anders als in deiner.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 26. Apr. 2009 14:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


start_worksheet_change+dropdown.zip

 
Hallo,

so hier meine Tabelle (stark vereinfacht). bei Werteingabe in zelle a2 oder a3 fuktioniert die Skalierung, bei Comboboxauswahl kommt die erwähnte Fehlermeldung.

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 26. Apr. 2009 16:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi Stefan,

das Problem tritt bei Excel2002 nicht auf, jedoch bei Excel97. Wenn man allerdings vorher eine Zelle aktiv macht, tritt der Fehler nicht mehr auf - da geht Excel97 offensichtlich anders vor als die neueren Versionen.

Den Code musst du außerdem nicht in das GotFocus Ereignis der ComboBox schreiben, da die Skalierung ja erst nach Auswahl in der ComboBox erfolgen soll:

Code:
Private Sub ComboBox1_Change()
    Worksheets("Tabelle1").Range("A2").Select
    DiaSkalieren
End Sub

Wenn nicht A2 (oder eine andere fest vorgegebene Zelle) selektiert werden soll, kannst du ja vielleicht mit dem SelectionChange Ereignis ermitteln, welche Zelle vorher ausgewählt war und kannst dieser wieder selektieren.

Zu deiner anderen Frage aus der hochgeladenen Mappe: werwende generell GotFocus und nicht Click für das Zuweisen von ListFillRange - der Code würde sonst jedes Mal ausgeführt sobald in der ComboBox geklickt wird, also auch wenn die ComboBox bereits aktiv ist. Das ist jedoch nur erforderlich, wenn die CombobBox angewählt wird, denn während du dich in der ComboBox befindest wird das ListFillRange (in deinem Fall) ja nicht geändert.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

stefga
Mitglied



Sehen Sie sich das Profil von stefga an!   Senden Sie eine Private Message an stefga  Schreiben Sie einen Gästebucheintrag für stefga

Beiträge: 138
Registriert: 17.05.2007

Excel97

erstellt am: 26. Apr. 2009 20:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Karin,

in meiner hochgeladenen Testmappe funktioniert das mit dem select einwandfrei, in meiner richtigen Mappe leider nicht. Wenn ich

Code:
Worksheets("Tabelle1").Range("A2").Select

einfüge klappt zwar der Makrostart per Combobox, dafür der Start per Werteeingabe mit diesem Makro
Code:

private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:Z500")) Is Nothing Then
            DiaSkalieren
End If

nicht mehr. Ich hab versucht die Zeile mit dem select hier auch einzubauen, aber das bringt auch keine Verbesserung. Auch das problem, dass bei irgendeiner Werteeingabe auf einam anderen Tabellenblatt eine Fehlermeldung kommt habe ich jetzt wieder.
Momentan weiss ich keinen Rat mehr, ich muss morgen mal weiter testen. Schönen Abend noch.

------------------
Gruß
Stefan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Beverly
Mitglied
Dipl.-Geologe (Rentner)


Sehen Sie sich das Profil von Beverly an!   Senden Sie eine Private Message an Berverly  Schreiben Sie einen Gästebucheintrag für Berverly

Beiträge: 394
Registriert: 11.08.2007

erstellt am: 26. Apr. 2009 22:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für stefga 10 Unities + Antwort hilfreich

Hi Stefan,

im Worksheets_Change Ereignis ist das Selektieren der Zelle nicht notwendig, da ja die Tabelle sowieso aktiv ist.

Hast du in deiner Originalarbeitsmappe vielleicht noch das Worksheet_Calculate Ereignis drin? Das muss natürlich raus. Wieso sollte der von mir gepostete Code einen Fehler auslösen wenn du in einem anderen Tabellenblatt etwas änderst - hier ist immer nur der Bezug auf das aktive Tabellenblatt.

Mehr kann ich dazu aus der Ferne, ohne deine Originaldatei zu kennen, leider nicht sagen.

------------------
Bis später,
Karin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz