| Autor |
Nachricht |
Edward
Gast
Verfasst am: 04. März 2006, 21:43 Rufname:
|
|
| |
|
Hallo Leute,
ich bin programmiertechnisch alles andere als unerfahren, hatte nur noch keinen Kontakt mit VBA und möchte zunächst eine Frage zur Realisierbarkeit meines Vorhabens stellen, bevor ich weitere Untersuchungen anstelle.
Ich möchte im Prinzip durch einen einzigen Aufruf einer Datei (.xls) eine automatische Auswertung starten. Diese soll das Laden einer Datendatei und nach automatischer Anwendung einiger Makros ohne Zutun des Anwenders ein Diagramm aus errechneten Werten erzeugen. Bis hierhin bin ich ziemlich sicher, dass dies realisierbar ist.
Nun möchte ich als Anwender aber in dem automatisch anzuzeigenden Diagramm beispielweise per Maus einen Bereich des Diagramms markieren, der nach Loslassen der Maustaste entsprechend vergrößert und mit neuer Achsen-Abschnitts-Beschriftung visualisiert wird. Wäre ein solches Feature implementierbar?
Vielen Dank für Eure Hilfestellung jetzt und zukünftig!
Gruß
Edward
|
|
Beverly
Diagrammspezialist (mit und ohne VBA)
Verfasst am: 05. März 2006, 09:12 Rufname:
|
| |
| |
|
Hi Edward,
dein erstes Vorhaben ist realisierbar, das kann ich bestätigen.
Bei deinem zweiten musst du davon ausgehen, dass du im Diagramm mit der Maus keinen Bereich markieren kannst. Du kannst zwar die Koordinaten des Mauszeigers abfragen, aber immer nur von einem einzigen Standort. Da müsstest du schon im Code festlegen, wie groß der Anzeigebereich sein soll. Für das "Zoomen" würde ich einfach ein 2. Diagramm erstellen, welches dann wieder gelöscht wird. Oder du erstellst mehrere Diagramm für von dir festgelegte Bereiche und blendest sie aus. Erst beim Aktivieren durch die Maus wird das jeweilige eingeblendet.
_________________ Bis später,
Karin
|
|
Edward
Im Profil kannst Du frei den Rang ändern
Verfasst am: 05. März 2006, 20:43 Rufname:
|
|
| |
|
Zunächst vielen Dank für die prompte Antwort...
In einem anderen Thread habe ich gelesen, dass Diagramme auch in ein JPEG konvertiert werden können?! Könnte man diese Möglichkeit nicht irgendwie nutzen und lediglich im Bild zoomen und nicht tatsächlich im Diagramm? Über die Mausposition und die Meldung "mouse-click" und "mouse-release" müsste man doch anschließend auch einen neuen Achsen-Abschnitts-Bereich errechnen können...
_________________ Gruß
Edward
Wir sind Fortuna, wir können alles.
|
|
Beverly
Diagrammspezialist (mit und ohne VBA)
Verfasst am: 05. März 2006, 23:19 Rufname:
|
|
| |
|
Hi Edward,
was würde es bringen, das Diagramm in eine Grafik (sprich Bild) umzuwandeln? Die Grafik ist nicht mehr veränderbar, sodass sich Veränderungen in deiner Wertetabelle darauf nicht auswirken. Ein Diagramm lässt sich vom Prinzip her schon in der Größe verändern.
Mir kommt da noch ein Gedanke: mit dem 1. Maus-Klick könnte man den Startbereich für das neue Diagramm festlegen. Wenn man diesen Wert irgendwo in der Tabelle hinterlegt, könnte man mit einem 2. Maus-Klick auch den Endbereich ermitteln und daraus die neue Skalierung berechnen.
_________________ Bis später,
Karin
|
|
Edward
Im Profil kannst Du frei den Rang ändern
Verfasst am: 06. März 2006, 08:13 Rufname:
|
| |
| |
|
@Beverly:
Damit hast Du zwar Recht, dies wäre in meinem Fall aber nicht sonderlich problematisch, da das Diagramm statisch sein soll, wenn es denn einmal angezeigt wurde. Erst bei einem Neu-Aufruf der Datei soll das Diagramm aktualisiert werden...
Deine Idee mit den Maus-Klicks (z.B. zur Markierung linke obere Ecke, rechte untere Ecke des zu zoomenden Bereiches) finde ich gut. Dem entnehme ich, dass die Funktionen existieren, um die Positionen der Maus-Klicks aus dem Diagramm zu extrahieren!?
_________________ Gruß
Edward
Wir sind Fortuna, wir können alles.
|
|
Beverly
Diagrammspezialist (mit und ohne VBA)
Verfasst am: 06. März 2006, 10:29 Rufname:
|
|
| |
|
Hi Edward,
es tut mir leid, dass ich dir nicht weiter antworten kann. Es war ein sehr interessantes Thema. Der Grund für meine Entscheidung hat nichts mit dir persönlich zu tun. Du kannst das in meinem letzten Beitrag unter diesem Link nachlesen
http://www.office-loesung.de/ftopic70552_0_0_asc.php#285203
_________________ Bis später,
Karin
|
|
Edward
Im Profil kannst Du frei den Rang ändern
Verfasst am: 07. März 2006, 12:34 Rufname:
|
|
| |
|
@Beverly:
Vielen Dank bis hierher!
Vielleicht hat ja noch jmd. anderes eine Idee, ob die o.g. Punkte in VBA realisierbar erscheinen?!
Gibt es außerdem die Möglichkeit, die Abfrage beim Start von Excel "...enthält Makros. [...] Können Viren enthalten..." zu unterdrücken? Es soll für den späteren Anwender möglichst einfach gehalten werden!
_________________ Gruß
Edward
Wir sind Fortuna, wir können alles.
|
|
danish_dynamite
Gast
Verfasst am: 06. Nov 2006, 15:31 Rufname:
|
|
| |
|
Guten Tag allerseits,
mich würde das mit dem zoomen durch markieren eines Diagrammbereichs auch sehr interessieren. Hat dazu mittlerweile vielleicht jemand etwas herausbekommen? Wäre extrem genial!
MfG
danish_dynamite
|
|
makrohard
Autodidakt
Verfasst am: 14. Nov 2006, 11:27 Rufname:
|
|
| Version: Office XP (2002) |
|
Hallo,
Zum Zoomen und Verschieben eines XY Diagramms habe ich ein kleines Makro geschrieben, das dies macht. Der 'Trick': Die Skalierung der Achsen wird verändert (Min/Max).
Kopiert dazu folgenden Code in ein UserForm in dem Ihr zuvor die notwendigen Elemente (6x Command Button, 7x Textfeld, 1x SpinButton) erstellt habt.
Der Code kann noch verfeinert werden.
| Code: |
Public Increment As Single
Option Explicit
Private Sub UserForm_Initialize()
Increment = 1
On Error GoTo er101
Application.EnableEvents = False
Xmin.Value = ActiveChart.Axes(xlCategory).MinimumScale
Xmax.Value = ActiveChart.Axes(xlCategory).MaximumScale
Ymin.Value = ActiveChart.Axes(xlValue).MinimumScale
Ymax.Value = ActiveChart.Axes(xlValue).MaximumScale
XUnit.Value = ActiveChart.Axes(xlCategory).MajorUnit
YUnit.Value = ActiveChart.Axes(xlValue).MajorUnit
er101:
Application.EnableEvents = True
End Sub
Private Sub CommandButton3_Click()
'Zoom +
On Error GoTo err50
Application.ScreenUpdating = False
Sheets("Polygon").ChartObjects("Diag").Activate
ActiveChart.Axes(xlCategory).MinimumScale = ActiveChart.Axes(xlCategory).MinimumScale + Increment
ActiveChart.Axes(xlCategory).MaximumScale = ActiveChart.Axes(xlCategory).MaximumScale - Increment
ActiveChart.Axes(xlValue).MinimumScale = ActiveChart.Axes(xlValue).MinimumScale + Increment
ActiveChart.Axes(xlValue).MaximumScale = ActiveChart.Axes(xlValue).MaximumScale - Increment
SetMinMaxDisplay
err50:
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton4_Click()
'Zoom -
On Error GoTo err51
Application.ScreenUpdating = False
Sheets("Polygon").ChartObjects("Diag").Activate
ActiveChart.Axes(xlCategory).MinimumScale = ActiveChart.Axes(xlCategory).MinimumScale - Increment
ActiveChart.Axes(xlCategory).MaximumScale = ActiveChart.Axes(xlCategory).MaximumScale + Increment
ActiveChart.Axes(xlValue).MinimumScale = ActiveChart.Axes(xlValue).MinimumScale - Increment
ActiveChart.Axes(xlValue).MaximumScale = ActiveChart.Axes(xlValue).MaximumScale + Increment
SetMinMaxDisplay
err51:
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton5_Click()
'Move left
On Error GoTo err52
Sheets("Polygon").ChartObjects("Diag").Activate
Application.ScreenUpdating = False
ActiveChart.Axes(xlCategory).MinimumScale = ActiveChart.Axes(xlCategory).MinimumScale + Increment
ActiveChart.Axes(xlCategory).MaximumScale = ActiveChart.Axes(xlCategory).MaximumScale + Increment
SetMinMaxDisplay
err52:
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton6_Click()
'Move Up
On Error GoTo err53
Sheets("Polygon").ChartObjects("Diag").Activate
Application.ScreenUpdating = False
ActiveChart.Axes(xlValue).MinimumScale = ActiveChart.Axes(xlValue).MinimumScale - Increment
ActiveChart.Axes(xlValue).MaximumScale = ActiveChart.Axes(xlValue).MaximumScale - Increment
err53:
SetMinMaxDisplay
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton7_Click()
' Move right
On Error GoTo err54
Sheets("Polygon").ChartObjects("Diag").Activate
Application.ScreenUpdating = False
ActiveChart.Axes(xlCategory).MinimumScale = ActiveChart.Axes(xlCategory).MinimumScale - Increment
ActiveChart.Axes(xlCategory).MaximumScale = ActiveChart.Axes(xlCategory).MaximumScale - Increment
err54:
SetMinMaxDisplay
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton8_Click()
'Move Down
On Error GoTo err55
Application.ScreenUpdating = False
Sheets("Polygon").ChartObjects("Diag").Activate
ActiveChart.Axes(xlValue).MinimumScale = ActiveChart.Axes(xlValue).MinimumScale + Increment
ActiveChart.Axes(xlValue).MaximumScale = ActiveChart.Axes(xlValue).MaximumScale + Increment
SetMinMaxDisplay
err55:
Application.ScreenUpdating = True
End Sub
Private Sub SpinButton1_SpinUp()
If Increment < 3 Then
Increment = Increment + 0.01
Else
Increment = 3
End If
Label4.Caption = Round(Increment, 2)
End Sub
Private Sub SpinButton1_SpinDown()
If Increment >= 0.02 Then
Increment = Increment - 0.01
Else
Increment = 0.1
End If
Label4.Caption = Round(Increment, 2)
End Sub
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub CommandButton2_Click()
' Zoom to full extend
On Error GoTo err56
Application.ScreenUpdating = False
Sheets("Polygon").ChartObjects("Diag").Activate
With ActiveChart.Axes(xlCategory)
.MinimumScale = 0
.MaximumScale = 12
.MinorUnit = 0.1
.MajorUnit = 1
.Crosses = xlCustom
.CrossesAt = 0
End With
With ActiveChart.Axes(xlValue)
.MinimumScale = 0
.MaximumScale = 13
.MinorUnit = 0.1
.MajorUnit = 1
.Crosses = xlCustom
.CrossesAt = 0
End With
SetMinMaxDisplay
err56:
Application.ScreenUpdating = True
End Sub
Sub SetMinMaxDisplay()
Xmin.Value = Round(ActiveChart.Axes(xlCategory).MinimumScale, 2)
Xmax.Value = Round(ActiveChart.Axes(xlCategory).MaximumScale, 2)
Ymin.Value = Round(ActiveChart.Axes(xlValue).MinimumScale, 2)
Ymax.Value = Round(ActiveChart.Axes(xlValue).MaximumScale, 2)
XUnit.Value = ActiveChart.Axes(xlCategory).MajorUnit
YUnit.Value = ActiveChart.Axes(xlValue).MajorUnit
End Sub
Private Sub Xmin_KeyPress(ByVal Taste As MSForms.ReturnInteger)
Select Case Taste
Case 48 To 57
Case Else
Beep
Taste = 0
End Select
End Sub
Private Sub Ymin_KeyPress(ByVal Taste As MSForms.ReturnInteger)
Select Case Taste
Case 48 To 57
Case Else
Beep
Taste = 0
End Select
End Sub
Private Sub Xmax_KeyPress(ByVal Taste As MSForms.ReturnInteger)
Select Case Taste
Case 48 To 57
Case Else
Beep
Taste = 0
End Select
End Sub
Private Sub Ymax_KeyPress(ByVal Taste As MSForms.ReturnInteger)
Select Case Taste
Case 48 To 57
Case Else
Beep
Taste = 0
End Select
End Sub
Private Sub XUnit_KeyPress(ByVal Taste As MSForms.ReturnInteger)
Select Case Taste
Case 48 To 57
Case Else
Beep
Taste = 0
End Select
End Sub
Private Sub YUnit_KeyPress(ByVal Taste As MSForms.ReturnInteger)
Select Case Taste
Case 48 To 57
Case Else
Beep
Taste = 0
End Select
End Sub
Private Sub Xmin_Change()
If Xmin.Value = "" Then Xmin.Value = ActiveChart.Axes(xlCategory).MinimumScale
ActiveChart.Axes(xlCategory).MinimumScale = CSng(Xmin.Value)
End Sub
Private Sub Ymin_Change()
If Ymin.Value = "" Then Ymin.Value = ActiveChart.Axes(xlValue).MinimumScale
ActiveChart.Axes(xlValue).MinimumScale = CSng(Ymin.Value)
End Sub
Private Sub Xmax_Change()
If Xmax.Value = "" Then Xmax.Value = ActiveChart.Axes(xlCategory).MaximumScale
ActiveChart.Axes(xlCategory).MaximumScale = CSng(Xmax.Value)
End Sub
Private Sub Ymax_Change()
If Ymax.Value = "" Then Ymax.Value = ActiveChart.Axes(xlValue).MaximumScale
ActiveChart.Axes(xlValue).MaximumScale = CSng(Ymax.Value)
End Sub
Private Sub XUnit_Change()
If XUnit.Value = "" Then XUnit.Value = ActiveChart.Axes(xlCategory).MajorUnit
ActiveChart.Axes(xlCategory).MajorUnit = CSng(XUnit.Value)
ActiveChart.Axes(xlCategory).MinorUnit = CSng(ActiveChart.Axes(xlCategory).MajorUnit / 10)
End Sub
Private Sub YUnit_Change()
If YUnit.Value = "" Then YUnit.Value = ActiveChart.Axes(xlValue).MajorUnit
ActiveChart.Axes(xlValue).MajorUnit = CSng(YUnit.Value)
ActiveChart.Axes(xlValue).MinorUnit = CSng(ActiveChart.Axes(xlValue).MajorUnit / 10)
End Sub
|
|
|
danish_dynamite
Gast
Verfasst am: 04. Jan 2007, 08:08 Rufname:
|
|
| Version: Office 2003 |
|
Hallo makrohard!
der code, den du gepostet hast ist wirklich sehr interessant! Leider bin aufgrund bisher noch begrenztem Knowhow bzgl. VBA nicht in der Lage den Code auf mein bestehendes Portfolio anzuwenden.
Könntest Du nochmal eine Art Schritt für Schritt Anleitung geben und sagen wo was an mein Portfolio angeglichen werden muss? Wäre unglaublich hilfreich für mich!
Danke im voraus!
danish_dynamite
|
|
makrohard_
Gast
Verfasst am: 13. Jun 2007, 15:21 Rufname:
|
|
| |
|
Hallo danish_dynamite
Sorry, 'habe lang nicht mehr ins Forum geschaut. Ich kann dir gern ein Beispieltabellenblatt schicken, wenn noch Interesse besteht. Kontaktiere mich einfach per eMail übers Forum. Alternativ kannst du aiuch mal auf www.aequometer.de schauen, das ist eine OpenSource Software von mit in der das betreffende UserForm integriert ist.
Viele Grüße
makrohard
|
|
Andy86
Im Profil kannst Du frei den Rang ändern
Verfasst am: 14. Dez 2007, 14:45 Rufname:
|
|
| Version: Office 2003 |
|
Hallo
Habe den Code eingefügt und alles gespeichert. Beim Ausführen des Makros erhalte ich die Medung, Felher beim Kompillieren, Variable nicht definiert, nach okay wird Sub SetMinMaxDisplay() gelb. Was mache ich falsch.
Vielen Dank für Eure Hilfe, Andy86
|
|
makrohard
Autodidakt
Verfasst am: 14. Dez 2007, 21:24 Rufname:
|
| |
| |
|
Hallo Andy,
Der Code muss in ein UserForm eingebunden werden, das verschiedene Elemente enthält, die auch alle den richtigen Namen haben müssen. Im Prinzip lässt sich alles aus dem Code ersehen aber vielleicht fällt es leichter wenn du es als lauffähiges Beispiel siehst. Hierzu kannst du gern mein Programm verwenden, das hier zu finden ist:
Edit: Link entfernt - makrohard
Die Funktion 'Zoom/Pan' Wird im UserForm 'Zeichnung bearbeiten' aufgerufen. Dieses wird im Menüpunkt 'Aequometer' (vor 'Datei') gestartet. Der Code ist offen.
Das Zoomen /Verschieben funktioniert zwar, ist aber noch nicht vollends ausgereift. Habe im Moment aber leider auch nicht die Zeit die Funktion wirklich zu perfektionieren.
Wenn du weitere Fragen hast, bescheibe bitte, wozu du den Code genau verwenden möchtest und wie er eingebunden werden soll. Ich kann dann Anfang nächster Woche gerne mal einen Blick darauf werfen.
Schönes Wochenende!
Edit: Der Code in der in diesem Thread gepostet wurde ist veraltet. Hier der Link zur überarbeiteten Version mit Beispiel zum Download:
XY Diagramm zoomen und verschieben
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
| |

|
|
| Verwandte Themen |
| Forum / Themen |
Antworten |
Autor |
Aufrufe |
Letzter Beitrag |
 |
Excel Auswertungen: Daten in XY Diagramm falsch dargestellt. |
4 |
peterdeepack |
118 |
18. Jan 2010, 12:53 peterdeepack  |
 |
Excel Auswertungen: wetterdaten in Diagramm an zeigen, Wochenweise, autofüllopti |
2 |
Gast |
449 |
16. Aug 2009, 21:00 Gast  |
 |
Excel Auswertungen: Im Diagramm die x-Achse teilweise ausblenden |
2 |
Stefan983 |
220 |
28. Mai 2009, 12:48 Stefan983  |
 |
Excel Formeln: In Diagramm den Wert "0" nicht anzeigen |
7 |
epsillon |
6575 |
17. Apr 2009, 11:07 Zero  |
 |
Excel Hilfe: Excel - Diagramm, Werte eines Graphen spiegeln |
1 |
Gast |
1081 |
16. Jan 2009, 08:05 Gast  |
 |
Excel Auswertungen: Diagramm mit bessel filter glätten |
0 |
MixXxen |
1053 |
30. Jul 2008, 20:26 MixXxen  |
 |
Excel Auswertungen: Punkte im Diagramm verbinden |
2 |
Matti25 |
640 |
16. Jun 2008, 15:55 Matti25  |
 |
Excel Auswertungen: Fragen zum dynamischen Diagramm |
3 |
Spartaner |
629 |
08. Jan 2008, 07:56 AndyRhandy  |
 |
Excel Formate: Kreis Diagramm, einzelne Farben??? |
2 |
Gast |
841 |
11. Dez 2007, 15:08 Zero  |
 |
Excel Formeln: Funktion in Diagramm? |
1 |
dxo |
1253 |
02. Aug 2007, 19:39 AndyRhandy  |
 |
Excel Auswertungen: Bei Diagramm leeren Abschnitt auf x-Achse nicht anzeigen |
1 |
Mexa |
518 |
31. Jul 2007, 14:23 Alto  |
 |
Excel Formate: in diagramm werte gruppieren |
2 |
dme |
2916 |
28. Nov 2006, 14:42 dme  |
| |
|