Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1624to1628
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Für musikalische mitglieder

Für musikalische mitglieder
28.05.2018 13:59:45
Antonio
Hallo an alle,
nachdem ich meine Datei nicht mehr öffne könnte (Daten alle verloren) und aus dem Gedächtniss schwer nachvollziehbar, habe beschlossen den Code neu zu schreiben.
Bin auf andere Ansätze gekommen, evtll. kurzer und besser.
Hier meine Bsp. Datei:
https://www.herber.de/bbs/user/121855.xlsm
In Tabelle1 ist einiges erklärt.
Ich möchte das wenn ein Akkord in Listbox gewählt wird das die entsprechend Koordinate abgerufen werden.
Und suche eine Verbindung vom erste obere Rechteck zum zweiten und zu den Listbox eintrag (x3221x)
Habe überhaupt keine Idee.
Bitte um Unterstützung
Vielen Dank in Voraus
Antonio

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Für musikalische mitglieder
28.05.2018 16:21:19
Antonio
ich glaube das war zu viel auf einmal.
Ich möchte nicht das ihr mir den Code fertig liefert, aber Ansätze oder Vorschläge.
Habe mit der Bedingte Formatierung probiert, falsch.
Eine Idee hätte ich noch :
in der Tabelle Chord1 sind die Akkorden aufgelistet( z.Bsp.: x3221x) ich glaube das die Verknüpfung zu den Koordinate muss hier stattfinden.
Ich weis nur nicht wie ich es realisieren kann.
Ich hoffe mich deutlich ausgedrückt zu haben.
Vielen Dank in Voraus
Antonio
AW: Für musikalische mitglieder
28.05.2018 16:31:31
Antonio
habe die Bedin. Format. vergessen:
=WENN($C$22="3";$H$12:$I$12;"")
Hiermit klappt nicht
Antonio
Anzeige
Hat keiner eine Idee?
28.05.2018 18:11:08
Antonio
Vorschläge?
Antonio
AW: Hat keiner eine Idee?
28.05.2018 18:58:01
ChrisL
Hi Antonio
Leider bin ich zu unmusikalisch.
Vielleicht das ganze noch einmal in Excelsprache (Zellen, Bereiche, Tabellen...) erklärt.
cu
Chris
AW: Hat keiner eine Idee?
28.05.2018 19:38:42
Antonio
Hallo Chris, schön das du dich meldest.
Icg Versuche, also:
in Tabelle1, der untere Rechteck (multifarbe) beinhaltet Koordinate für die Position der Ellipse auf der Form.
Ganz unten links sind Akkorden dargestellt mit Zahlen und "X", Bsp.: x3221x, die bekomme ich auch im ListBox,
Die Zahlen sind im obere Rechteck entsprechend der Koordinaten, siehe Bild.
Userbild
Wenn ich ein eintrag in ListBox anclicke dann soll nach den Zahlen x3221x die Koordinate ausgesucht und die Ellipsen platzieren.
Wie kann ich erreichen das z.Bsp.: der 3 die Koordinate 117 86 entspicht?
Ich hoffe dir Klarheit gegeben zu haben, wenn nicht bitte Schritt für Schritt, frage solang du willst.
Danke in Voraus
Antonio
Anzeige
AW: Hat keiner eine Idee?
28.05.2018 19:49:26
Antonio
ich schicke dir noch ein Bild von der Form, kannst auch selber debuggen, ein Akkord im Combo wählen auf dem Button "Akkord Laden drucken" dann ein Item in ListBox wählen und schon siest du die Ellipsen.
Userbild
wie du sehen kannst die Ellipsen sind im Pos. 0
Noch was, die Zahlen waagerecht sind für die X Achse und die senkrecht für die Y Achse
Antonio
AW: Hat keiner eine Idee?
29.05.2018 08:40:24
ChrisL
Hi Antonio
Erstmal auf die Frage konzentriert:
Wie kann ich erreichen das z.Bsp.: der 3 die Koordinate 117 86 entspicht?
Eigentlich ganz einfach mit Offset(Zeile,Spalte). Da du aber verbundene Zellen benutzt, müsstest du ein wenig tricksten z.B.
Sub t()
Dim rng As Range
With Worksheets("Tabelle1")
Set rng = .Range("H5")
MsgBox rng.Offset(7, 0) & "  /  " & .Cells(rng.Row + 7, rng.Column + 1)
End With
End Sub

Für allfällige Anschlussfragen:
Was ich nicht verstehe ist, wie wird aus...
x3221x
... das Muster...
0-1-2-2-3-0
Verstehen würde ich: 0-3-2-2-1-0
Ebenfalls unklar ist mir der Soll-Zustand in der grafischen Darstellung. Willst du da die Punkte im gleichen Muster auf das Gitter legen?
cu
Chris
Anzeige
AW: Hat keiner eine Idee?
29.05.2018 09:44:26
Antonio
Hi Chris,
zur erste Frage:
Eigentlich ganz einfach mit Offset(Zeile,Spalte).
Ein guter Tipp chris aber bei 90 Zellen eine unendliche Geschichte im Code (evtll tue ich mir die Arbeit)
Ich habe etwas versucht in Zelle C22 mit Bedin. Form.: =WENN(C22=3;$H$12:$I$12)wollte ausprobieren ob in ListBox die Ellipse mit
x5 = Range("B12").Value
y5 = Range("C12").Value

sich bewegt, NEIN, anscheined der Wert wird vom ListBox nicht übernommen.(aber das Später)
Für allfällige Anschlussfragen:
Sorry mein Fehler du hast Recht, vergessen zu sagen das die Akkorden von unten nach oben gelesen werden,
also 0 3 2 2 1 0.
Ebenfalls unklar ist mir der Soll-Zustand in der grafischen Darstellung
Ja, die Rechtecken sind so aufgebaut wie das Gitter auf der Form.
Aber das der ListBox nicht reagiert auf Bedin. Form. mache vielleicht das Ganze in VBA.
Noch eine IDEE: wie wärs wenn im ListBox neben den Zahle ab Spalte 7 bis 13 die Koordinate mit geladen werden aber unsichtbar so hätte ich ein Bezug für die Ellipsen (Punkte)
lg
Antonio
Anzeige
AW: Hat keiner eine Idee?
29.05.2018 13:06:05
ChrisL
Hi Antonio
So...
https://www.herber.de/bbs/user/121876.xlsm
Die Bildkoordinaten kannst du anhand der Werte berechnen. Die ganze Hilfstabelle braucht es nicht.
Beispiel Vertikale (vereinfacht):
Bildhöhe - (6 * Punkthöhe) = Total Abstand zwischen den Punkten
Abstand / 12 = Abstand oben und unter je Punkt
Anzahl Punkte * Höhe Punkt + Anzahl Punkte * Abstand = Top Wert
Zuzüglich Top-Wert vom Bild
Anstelle der komplexen API-Funktion, welche Shapes im Userform erzeugt, verwende einfach Bilder als Punkte.
cu
Chris
Private Sub cbx1_Change()
Dim i As Integer
ListBox1.Clear
Call PunkteAusblenden
If cbx1  "" Then
For i = 17 To 95 Step 6
With Worksheets("Chord1")
ListBox1.AddItem .Cells(cbx1.ListIndex + 1, i)
ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(cbx1.ListIndex + 1, i + 1)
ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(cbx1.ListIndex + 1, i + 2)
ListBox1.List(ListBox1.ListCount - 1, 3) = .Cells(cbx1.ListIndex + 1, i + 3)
ListBox1.List(ListBox1.ListCount - 1, 4) = .Cells(cbx1.ListIndex + 1, i + 4)
ListBox1.List(ListBox1.ListCount - 1, 5) = .Cells(cbx1.ListIndex + 1, i + 5)
End With
Next i
End If
End Sub

Private Sub ListBox1_Click()
Dim i As Integer, intWert As Integer
If ListBox1.List(ListBox1.ListIndex, 0) = "" Then
Call PunkteAusblenden
Exit Sub
Else
Call PunkteEinblenden
End If
For i = 6 To 1 Step -1
Controls("Punkt" & i).Top = Image1.Top + (((Image1.Height - (Punkt1.Height * 6)) / 12) _
* (((i - 1) * 2) + 1)) + ((i - 1) * Punkt1.Height)
If ListBox1.List(ListBox1.ListIndex, i - 1) = "x" Then
intWert = 1
Else
intWert = ListBox1.List(ListBox1.ListIndex, i - 1) + 1
End If
Controls("Punkt" & i).Left = Image1.Left + (((Image1.Width - (Punkt1.Width * 16)) / 32) * _
(((intWert - 1) * 2) + 1)) + ((intWert - 1) * Punkt1.Width)
Next i
End Sub

Private Sub UserForm_Initialize()
With Worksheets("Chord1")
cbx1.List = Application.Transpose(.Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row))
End With
End Sub

Private Sub PunkteEinblenden()
Dim i As Integer
For i = 1 To 6
Controls("Punkt" & i).Visible = True
Next i
End Sub

Private Sub PunkteAusblenden()
Dim i As Integer
For i = 1 To 6
Controls("Punkt" & i).Visible = False
Next i
End Sub

Anzeige
AW: Hat keiner eine Idee?
29.05.2018 13:38:38
Antonio
Hi Chris,
ich war am kämpfen mit tabellen und ListBox..... dann
ist mir der Kinn runtergefallen, habe sicher 10 min. damit gespielt und gestaunt.
Ich wäre nie darauf gekommen, überhaupt ohne tabelle und ohne shapes. Kann meine Ideen im Papierkorb werfen, die hätten sowieso nichts gabraucht, nur eine Menge Arbeit.
Bin komplett sprachlos!!!!Glaub es mir. Aber glücklich :).
Lieber Chris eine Frage hätte ich noch da anscheinend ich mich falsch ausgedruckt habe:
alle Positionen sind kopfüber, wenn du mir erklärst wo ich die positionen ändern kann, würde ich mich sofort daran machen um so auch dein Code zu verstehen.
:) :) :)
Antonio
Anzeige
AW: Hat keiner eine Idee?
29.05.2018 13:53:47
ChrisL
Hi
Stimmt, die Schleife rückwärts laufen lassen, ändert noch nichts an der Reihenfolge. So ist besser:
Private Sub cbx1_Change()
Dim i As Integer
ListBox1.Clear
Call PunkteEinblenden(False)
If cbx1  "" Then
For i = 17 To 95 Step 6
With Worksheets("Chord1")
ListBox1.AddItem .Cells(cbx1.ListIndex + 1, i)
ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(cbx1.ListIndex + 1, i + 1)
ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(cbx1.ListIndex + 1, i + 2)
ListBox1.List(ListBox1.ListCount - 1, 3) = .Cells(cbx1.ListIndex + 1, i + 3)
ListBox1.List(ListBox1.ListCount - 1, 4) = .Cells(cbx1.ListIndex + 1, i + 4)
ListBox1.List(ListBox1.ListCount - 1, 5) = .Cells(cbx1.ListIndex + 1, i + 5)
End With
Next i
End If
End Sub

Private Sub ListBox1_Click()
Dim i As Integer, intWert As Integer, intCounter As Integer
If ListBox1.List(ListBox1.ListIndex, 0) = "" Then
Call PunkteEinblenden(False)
Exit Sub
Else
Call PunkteEinblenden(True)
End If
For i = 6 To 1 Step -1
Controls("Punkt" & i).Top = Image1.Top + (((Image1.Height - (Punkt1.Height * 6)) / 12) _
* (((i - 1) * 2) + 1)) + ((i - 1) * Punkt1.Height)
If ListBox1.List(ListBox1.ListIndex, intCounter) = "x" Then
intWert = 1
Else
intWert = ListBox1.List(ListBox1.ListIndex, intCounter) + 1
End If
Controls("Punkt" & i).Left = Image1.Left + (((Image1.Width - (Punkt1.Width * 16)) / 32) * _
(((intWert - 1) * 2) + 1)) + ((intWert - 1) * Punkt1.Width)
intCounter = intCounter + 1
Next i
End Sub

Private Sub UserForm_Initialize()
With Worksheets("Chord1")
cbx1.List = Application.Transpose(.Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row))
End With
End Sub

Private Sub PunkteEinblenden(b As Boolean)
Dim i As Integer
For i = 1 To 6
Controls("Punkt" & i).Visible = b
Next i
End Sub
cu
Chris
Anzeige
AW: Super Lösung
29.05.2018 14:10:25
Antonio
Kann ich nur sagen "PERFEKT"
würde dir was ausmachen mir diesen Code zu kommentieren, verstehe nicht ganz.
Private Sub ListBox1_Click()
Dim i As Integer, intWert As Integer, intCounter As Integer
If ListBox1.List(ListBox1.ListIndex, 0) = "" Then
Call PunkteEinblenden(False)
Exit Sub
Else
Call PunkteEinblenden(True)
End If
For i = 6 To 1 Step -1
Controls("Punkt" & i).Top = Image1.Top + (((Image1.Height - (Punkt1.Height * 6)) / 12) _
* (((i - 1) * 2) + 1)) + ((i - 1) * Punkt1.Height)
If ListBox1.List(ListBox1.ListIndex, intCounter) = "x" Then
intWert = 1
Else
intWert = ListBox1.List(ListBox1.ListIndex, intCounter) + 1
End If
Controls("Punkt" & i).Left = Image1.Left + (((Image1.Width - (Punkt1.Width * 16)) / 32) * _
(((intWert - 1) * 2) + 1)) + ((intWert - 1) * Punkt1.Width)
intCounter = intCounter + 1
Next i
End Sub
Ansonsten vielen vielen Dank
Jetzt kann ich weiter machen.
Grüß
Antonio
Anzeige
AW: Super Lösung
29.05.2018 14:20:59
ChrisL
Hi
Freut mich, dass es passt.
- Wenn Listbox-Eintrag leer, dann ausblenden, sonst einblenden.
- Berechnung Top Wert (vertikal)
- "x" = 0 abfangen
- Berechnung Left Wert (horizontal)
Die Berechnung selber hatte ich im vorletzten Post kurz beschrieben. Leider ist die Formel etwas chaotisch...
Korrektur aufgrund der Bildposition innerhalb Userform:
Image1.Top
Abstand je Punkt:
+ (((Image1.Height - (Punkt1.Height * 6)) / 12) _
Abstand hochgerechnet auf die effektive Punktzahl:
* (((i - 1) * 2) + 1))
Höhe der Anzahl Punkte:
+ ((i - 1) * Punkt1.Height)
cu
Chris
Anzeige
AW: Super Lösung
29.05.2018 14:32:30
Antonio
Yeeeaaahhhh!!!
Super.
So eine lezte Frage. die Punkte die Du als Image verwendet hast kann man sie auch beschriften?
Wenn nein, brauchst du nicht mehr zu posten und bedanke mich erneut.
Antonio
AW: Super Lösung
29.05.2018 15:08:00
ChrisL
Hi
Da müsstest du transparente Labels über die Grafiken legen. Diese müsstest du dann nach dem gleichen Muster wie die Punkte ein-/ausblenden und positionieren.
Mit der Beschriftung bist du dann relativ nah bei einem Punktdiagramm mit Gitternetzlinien.
cu
Chris

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige