Anzeige
Archiv - Navigation
1500to1504
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

VBA: 4 Schritte mit Schleife lösen

VBA: 4 Schritte mit Schleife lösen
24.06.2016 14:55:08
Hewad
Hallo,
ich habe ein Blasendiagramm auf einem Sheet, beidem ich die einzelnen Blasen, in den jeweiligen Reihen, mit Bildern befülle. Die Reihenfolge der Bilder bestimme ich über einen im Sheet (Zelle:B62) und den Namen des Bildes - welches geladen werden soll - von der Bachbarzelle (c62).
Mein Problem ist, dass ich für jede Reihe einen Code habe (insgesamt gibt es 4 Reihen im Chart mit mehreren Blasen), die ich alle 4 über "Call" mit einem Makro ausführe.
Ich habe es leider nicht hinbekommen, mit einer Schleife, das PRoblem mit einem einzigen Code zu lösen. Hintergrund is leider die Performance, wenn ich alle 4 COdes gleichzeitig ausführen muss.
Das zweite Problem besteht darin, dass ich die Images von meinem Persönlichen Ordner auf dem Rechner lade. Ich würde gerne, dass die Images von einem anderen Sheet zwischenkopiert wird und den Blasen zugebordnet wird. ( werde ich im Code entsprechend kommentieren)
Vielen Dank für die Unterstützung im Voraus
Gruß
Hewad
'erste Reihe
Sub Image_upload_R1()
On Error Resume Next
Dim k As Integer
Dim i As Integer
Dim p As Integer
Dim sFilename As String
Dim bcontinue As Boolean
Dim spath As String
Dim strOrdner As String
Dim item_name As String
Dim fullser As FullSeriesCollection
Dim Num_bubble As Integer
Dim num_fullser As Integer
Dim bubble_order As String
Application.ScreenUpdating = False
'Pfad bestimmen
spath = Range("Main_Path")
ActiveSheet.ChartObjects("Diagramm 1").Activate
'Anzahl Serien ermitteln
num_fullser = ActiveChart.FullSeriesCollection.Count
Debug.Print varA; num_fullser
' alle Serien zurücksetzen
For k = 1 To num_fullser
ActiveChart.FullSeriesCollection(k).Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 255, 255)
.Transparency = 1
.Solid
End With
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(242, 242, 242)
.Transparency = 0.9900000095
End With
Next k
Num_bubble = ActiveChart.FullSeriesCollection(1).Points.Count ' die erste Zeile    Debug. _
Print varA; Num_bubble
For p = 1 To Num_bubble
'erster Treffer auf der Liste in der Zeile 62, Schleife
i = 62 'Vergleich aus der Zeile 62
bcontinue = True
While bcontinue
sFilename = ActiveSheet.Cells(i, 3).Value ' im zweiten Durchlauf steht der Wert in (i, 5)  _
und so weiter
Pachage, ändern!!!
bubble_order = ActiveSheet.Cells(i, 2).Value 'im zweiten Durchlauf steht der Wert in (i, 6)  _
und so weiter
If sFilename = "" Then
bcontinue = False
Else
For Each v In Array(" / ")
sFilename = Replace(sFilename, v, " ")
Next
Debug.Print varA; sFilename
item_name = spath & sFilename & ".jpg"
Debug.Print varA; item_name
Debug.Print varA; bubble_order
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.FullSeriesCollection(1).Points(bubble_order).Select
With Selection.Format.Fill
.Visible = msoTrue
.UserPicture (item_name) ' das Foto würde ich gerne von der gleichen Mappe im  _
getrennten Sheet, per copy & paste übernehmen
.TextureTile = msoFalse
End With
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = -0.150000006
.Transparency = 0
End With
i = i + 1
End If
Wend
Next p
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: 4 Schritte mit Schleife lösen
24.06.2016 16:41:25
Beverly
Hi,
hier mal ein Vorschlag, wie man ein Shape aus einem Tabellenblatt in einen Diagrammpunkt einfügen kann (Grundlage im Beispiel ist die Blasengröße):
Sub DatenpunkteFormatieren()
Dim intReihe As Integer
Dim lngPunkt As Long
With ActiveSheet.ChartObjects(1).Chart
For intReihe = 1 To .SeriesCollection.Count
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(intReihe)
arrWerte = .Values
For lngPunkt = 1 To .Points.Count
If Range(.BubbleSizes).Cells(lngPunkt).Value = 3 And _
Range(.BubbleSizes).Cells(lngPunkt) 


Anzeige
VBA: 4 Schritte mit einer Schleife lösen - Chart
27.06.2016 11:47:43
Hewad
Hallo Beverly,
vielen Dank für den Vorschlag. Es hat soweit wunderbar funktioniert. Auch das Problem mit den nächsten Reihen im Diagramm hat auch soweit funktiniert.
Ich habe noch das Problem mit der Zuordnung der Bilder für die Diagrammpunkte. Diese werden aus einer Liste im Sheet bestimmt.
Bsp.:
1. Reihe im Diagramm
- die Namen der Blasen für die erste Reihe stehen im Bereich "C62 bis C102" im Sheet
- die Reihenfolge der Blasen stehen im Bereich "B62 bis B102" im Sheet
Das Problem ist nun: für die zweite Reihe bzw. Linie stehen die Namen und die Reihenfolge der Blasen in den beiden nächsten Splate: "E62 bis E102" & "D62 bis D102".
Mit anderen Worten muss die Schleife im zweiten Durchlauf in die nächsten Spalten überspringen. Mit meinem Code werden die Namen & die Reihen der ersten Linie für alle Linien im Diagramm übernommen, was leider nicht richitg ist.
Vielen Dank für die Unterstützung.
Gruß
Hewad
Sub Image_upload_test()
'On Error Resume Next
Dim k As Integer
Dim i As Integer
Dim p As Integer
Dim sName As String
Dim bcontinue As Boolean
Dim Logoname As String
Dim fullser As FullSeriesCollection
Dim Num_bubble As Integer
Dim num_fullser As Integer
Dim bubble_order As String
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
ActiveSheet.ChartObjects("Diagramm 1").Activate
'Anzahl Serien ermitteln
num_fullser = ActiveChart.FullSeriesCollection.Count
Debug.Print varA; num_fullser
For k = 1 To num_fullser
'sName: erster Treffer in der Liste in der Zelle (C62)
i = 62
Num_bubble = ActiveChart.FullSeriesCollection(k).Points.Count
Debug.Print varA; Num_bubble
For p = 1 To Num_bubble
bcontinue = True
While bcontinue
sName = ActiveSheet.Cells(i, 3).Value ' sName: 3. Spalte der Liste Zelle (C62)
bubble_order = ActiveSheet.Cells(i, 2).Value ' bubble_order: Reihenfolge der 1. Blase Zelle  _
(B62)
If sName = "" Then
bcontinue = False
Else
For Each v In Array(" / ")
sName = Replace(sName, v, " ")
Next
Debug.Print varA; sName
Logoname = sName & " " & "Logo"
Debug.Print varA; Logoname
Debug.Print varA; bubble_order
ActiveSheet.ChartObjects("Diagramm 1").Activate
With ActiveChart.FullSeriesCollection(k).Points(bubble_order).Select
Worksheets("Supplier_Logos").Shapes(Logoname).Copy
ActiveChart.FullSeriesCollection(k).Points(bubble_order).Paste
End With
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = -0.150000006
.Transparency = 0
End With
i = i + 1
End If
Wend
Next p
Next k
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub

Anzeige
AW: VBA: 4 Schritte mit einer Schleife lösen - Chart
27.06.2016 12:43:34
Beverly
Hi,
also bei mir funktioniert dieser Code (ohne Select und Activate, was in 99% aller Fälle nicht erforderlich ist und den Codeablauf nur verlangsamt):
Sub DatenpunkteFormatieren2()
Dim intReihe As Integer
Dim lngPunkt As Long
Dim strBild As String
Dim intSpalte As Integer
intSpalte = 3
With ActiveSheet.ChartObjects(1).Chart
For intReihe = 1 To .SeriesCollection.Count
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(intReihe)
For lngPunkt = 1 To .Points.Count
strBild = Worksheets("Tabelle1").Cells(lngPunkt + 61, intSpalte)
Worksheets("Tabelle1").Shapes(strBild).Copy
.Points(lngPunkt).Paste
Next lngPunkt
intSpalte = intSpalte + 2
End With
Next intReihe
End With
End Sub

Anzeige
AW: VBA: 4 Schritte mit einer Schleife lösen - Chart
27.06.2016 15:17:35
Hewad
Hi Beverly,
vielen Dank nochmals. Es hat soweit alles wunderbar funktioniert mit deiner Methode. Ich habe lediglich leichte Anpassungen vorgenommen (Arbeitblattname etc).
Eine Sache klappt bei mir leider nicht. Die Blasen sollen zusätzlich noch einen Rahmen bekommen (siehe Code) allerdings nur die Blasen, die auch einen Namen haben. Leere Blasen dürfen keinen Rahmen haben. Mit diesem Ansatz wird leider die ganze Reihe selektiert:
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(intReihe).Format.Line 'hier wird alle  _
Blasen ausgewählt und nicht die aktuelle
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = -0.150000006
.Transparency = 0
End With

hier ist der vollständige Code:

Sub DatenpunkteFormatieren3()
Dim intReihe As Integer
Dim lngPunkt As Long
Dim strBild As String
Dim intSpalte As Integer
intSpalte = 3
Dim strBild_log As String
With ActiveSheet.ChartObjects(1).Chart
For intReihe = 1 To .SeriesCollection.Count
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(intReihe)
For lngPunkt = 1 To .Points.Count
strBild = ActiveSheet.Cells(lngPunkt + 61, intSpalte)
Debug.Print strBild
For Each v In Array(" / ")
strBild = Replace(strBild, v, " ")
Next
If strBild  "" Then
strBild_log = ActiveSheet.Cells(lngPunkt + 61, intSpalte) & " " & "Logo"
Worksheets("Supplier_Logos").Shapes(strBild_log).Copy
.Points(lngPunkt).Paste
With ActiveSheet.ChartObjects(1).Chart.SeriesCollection(intReihe).Format. _
Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorBackground1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = -0.150000006
.Transparency = 0
End With
End If
Next lngPunkt
intSpalte = intSpalte + 2
End With
Next intReihe
End With
End Sub
Danke und Gruß
Hewad

Anzeige
AW: VBA: 4 Schritte mit einer Schleife lösen - Chart
27.06.2016 16:10:29
Beverly
Hi Hewad,
versuche es mal so:
            If strBild  "" Then
strBild_log = ActiveSheet.Cells(lngPunkt + 61, intSpalte) & " " & "Logo"
Worksheets("Supplier_Logos").Shapes(strBild_log).Copy
.Points(lngPunkt).Paste
With .Points(lngPunkt).Border
.ColorIndex = 57
.Weight = xlMedium
.LineStyle = xlContinuous
End With
End If


AW: VBA: 4 Schritte mit einer Schleife lösen - Chart
27.06.2016 16:27:16
Hewad
Du bist ein Held :-)
vielen herzlichen Dank :-) :-)
Gruß
Hewad

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige