Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1864to1868
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

Makro erweitern

Makro erweitern
27.01.2022 14:56:11
Vasko
Hallo zusammen,
ich habe hier ein funktionierendes Makro um Bilder zu markieren. Ich möchte diese Makro etwas erweitenern bzw. den Bereich genauer festlegen können.
Ich würde zusätzlich gerne noch die Spalte festlegen können.

Sub ShapesMarkieren2()
Dim shShape As Shape
Dim loShapes As Long
ReDim arrShapes(0)
For Each shShape In ActiveSheet.Shapes
If shShape.Top > Rows(14).Top Then
ReDim Preserve arrShapes(0 To loShapes)
arrShapes(loShapes) = shShape.Name
loShapes = loShapes + 1
End If
Next shShape
If arrShapes(UBound(arrShapes()))  "" Then
ActiveSheet.Shapes.Range(arrShapes()).Select
End If
End Sub
Herzliche Grüße
Vasko

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro erweitern
27.01.2022 15:56:27
Yal
Hallo Vasko,
ich lasse den Array of Shapes separat herstellen, spielt aber keine Rolle.
Ubound0 ist ausgelagert, weil der Fehler ausgenutzt wird, um -1 zurückzugeben.

Sub Test()
Dim S
Dim arrShapes()
arrShapes = ShapeArray_herstellen(Worksheets("Tabelle1"), 5, 7)
For Each S In arrShapes
Debug.Print S.Name, S.TopLeftCell.Address, S.BottomRightCell.Address
Next
End Sub
Private Function ShapeArray_herstellen(WS As Worksheet, LinkeSpalte As Long, RechteSpalte As Long)
Dim S As Shape
Dim arrShapes()
For Each S In WS.Shapes
If S.TopLeftCell.Column >= LinkeSpalte And S.BottomRightCell.Column 
VG
Yal
Anzeige
AW: Makro Bilder selektieren erweitern
27.01.2022 17:26:16
Vasko
Hallo Yal,
vielen Dank für Deine Mühe!
Leider ist diese Mühe für einen nicht Eingeweihten oder auch totalen nube(Also mich). Ich habe Dein Makro ausgeführt, aber da hat sich nichts getan. Meine Unwissenheit und Unfähigkeit, überstrahlen Deinen gut gemeinte helfende Tat. Sorry das ich es nicht verstehe.
ganz herzliche Grüße
Vasko
AW: Makro Bilder selektieren erweitern
27.01.2022 19:57:48
Yal
Hallo Vasko,
eigentlich lässt es sich lesen, genau wie geschrieben:
als Start in "Test" wird die Function ShapeArray_herstellen mit 3 Parameter aufgerufen. Es soll einen Array of Shapes zurückliefern.
Die 3 Parameter sind: Worksheet, "linkeste" und "rechteste" Spalte der "Filter". Passt hier diese Parameter zu den Shapes, die Du in "Tabelle1" (oder anderes Blatt) hast.
In ShapeArray_herstellen geht man über alle Shapes der gegebenen Worksheets:

For Each S In WS.Shapes
d.h. jede Shape von WS wird in der Variable S übergeben.
Anschliessend werden die "Eigenschaften" der Shape S geprüft. Wenn Du im Schritt-Nodus (F8) mit offenem Lokalfenster (Ansicht, Lokalfenster) kannst Du S und seinen Eigenschaften sehen. Du kannst auch mit rechtsklick "Überwachung hinzufügen", u.a. S.TopLeftCell.Address und S.BottomRightCell.Address.
Sind die Spalten diesen S-gebundene Zellen innerhalb der gegebenen linken und rechten Spalten, wird S in dem Ergebnis-Array arrShapes abgelegt.
Der Weg über UBound0 überspringt man zuerst. Es geht hier darum, das Array immer auf die passende Grösse zu dimensionieren, und das Problem umgehen, dass am Anfang das Array gar nicht dimensioniert ist.
Wenn fertig wird der Ergebnis-Array arrShapes als Ergebnis der Function zurückgegeben und zurück in "Test" nach dem Auruf von ShapeArray_herstellen gesprungen (wenn Du das Gesamt im Schritt-Modus laufen lässt, kannst Du das alles genau nachvollziehen).
Als letzte wird das zurückgegebene Array durchgelaufen und die Eigenschaft Name, TopLeftCell.Address und BottomRightCell.Address in das Direktfenster herausgegeben (Strg+g oder Ansicht Direktfenster). Wenn diese nicht geöffnet ist, sieht man ... nichts.
Du kannst zuerst schauen in welchem Tabelle Shapes vorhanden sind und in welche Spalten-Bereich: von 5 bis 10 (?). Dann gibst Du diese Parameter in "Test" ein. Vielleicht sogar ein bischen "breiter", also von 4 bis 11. Nach und nach reduzieren, dann sollte immer weniger Shapes im Ergebnis-Array geben.
Lokal-, Direktfenster und vielleicht Überwachung (wäre aber Stufe 2) öffnen, Cursor auf "Test" legen dann in Schrittmodus (F8) starten.
Ich sage gern dazu: "VBA ist keine Gedanken-lesende Zauberstab, sondern Drachen reiten". Man muss das Ding domptieren. Aber zum Glück herstellst Du den Drachen selber. Also fang mit einem Baby-Drache an ;-) Mit der Anleitung hier, hast Du eine gute erste Unterrichtstunde. Mach was draus.
Der Anfang ist holprig, aber es beschleunigt sich schnell (Der Drache wird ... mächtiger).
Welcome on the other side.
VG
Yal
Anzeige
AW: Makro Bilder selektieren erweitern
28.01.2022 09:58:20
Vasko
Hi Yal,
danke aber nein!
im Direktbereich sehe ich zwar die Bilder im angegebenen Bereich, denke ich.

TPicture 2    $E$1          $E$3
Picture 4     $E$2          $E$4
Picture 6     $E$3          $E$5
Picture 8     $E$4          $E$6
Picture 10    $E$5          $E$7
Picture 12    $E$6          $E$8
Picture 14    $E$7          $E$9
Picture 16    $E$8          $E$10
Picture 18    $E$9          $E$11
Picture 20    $E$10         $E$12
Picture 22    $E$11         $E$13
Picture 24    $E$12         $E$14
Picture 2     $E$1          $E$3
Picture 4     $E$2          $E$4
Picture 6     $E$3          $E$5
Picture 8     $E$4          $E$6
Picture 10    $E$5          $E$7
Picture 12    $E$6          $E$8
Picture 14    $E$7          $E$9
Picture 16    $E$8          $E$10
Picture 18    $E$9          $E$11
Picture 20    $E$10         $E$12
Picture 22    $E$11         $E$13
Picture 24    $E$12         $E$14
Picture 2     $E$1          $E$3
Picture 4     $E$2          $E$4
Picture 6     $E$3          $E$5
Picture 8     $E$4          $E$6
Picture 10    $E$5          $E$7
Picture 12    $E$6          $E$8
Picture 14    $E$7          $E$9
Picture 16    $E$8          $E$10
Picture 18    $E$9          $E$11
Picture 20    $E$10         $E$12
Picture 22    $E$11         $E$13
Picture 24    $E$12         $E$14
Picture 2     $F$1          $F$3
Picture 4     $F$2          $F$4
Picture 6     $F$3          $F$5
Picture 8     $F$4          $F$6
Picture 10    $F$5          $F$7
Picture 12    $F$6          $F$8
Picture 14    $F$7          $F$9
Picture 16    $F$8          $F$10
Picture 18    $F$9          $F$11
Picture 20    $F$10         $F$12
Picture 22    $F$11         $F$13
Picture 24    $F$12         $F$14
extBox 31    $H$2          $H$2
Button 22     $D$2          $E$2
Button 23     $D$2          $D$2
Button 2      $I$3          $J$5
Button 3      $L$4          $N$5
Picture 2     $B$1          $B$3
Picture 4     $B$2          $B$4
Picture 6     $B$3          $B$5
Picture 8     $B$4          $B$6
Picture 10    $B$5          $B$7Button 19 $E$2          $E$2
Picture 87    $E$4          $E$4
Picture 89    $E$5          $E$5
Picture 91    $E$6          $E$6
Picture 93    $E$7          $E$7
Picture 95    $E$8          $E$8
Picture 97    $E$9          $E$9
Picture 99    $E$10         $E$10
Picture 101   $E$11         $E$11
Picture 103   $E$12         $E$12
Picture 105   $E$13         $E$13
Button 19     $E$2          $E$2
Picture 87    $E$4          $E$4
Picture 89    $E$5          $E$5
Picture 91    $E$6          $E$6
Picture 93    $E$7          $E$7
Picture 95    $E$8          $E$8
Picture 97    $E$9          $E$9
Picture 99    $E$10         $E$10
Picture 101   $E$11         $E$11
Picture 103   $E$12         $E$12
Picture 105   $E$13         $E$13
Picture 12    $B$6          $B$8
Picture 14    $B$7          $B$9
Picture 16    $B$8          $B$10
Picture 18    $B$9          $B$11
Picture 20    $B$10         $B$12
Picture 22    $B$11         $B$13
Picture 24    $B$12         $B$14
Button 2      $I$3          $J$5
Button 3      $L$4          $N$5
Picture 2     $B$1          $B$3
Picture 4     $B$2          $B$4
Picture 6     $B$3          $B$5
Picture 8     $B$4          $B$6
Picture 10    $B$5          $B$7
Picture 12    $B$6          $B$8
Picture 14    $B$7          $B$9
Picture 16    $B$8          $B$10
Picture 18    $B$9          $B$11
Picture 20    $B$10         $B$12
Picture 22    $B$11         $B$13
Picture 24    $B$12         $B$14
Button 2      $I$3          $J$5
Button 3      $L$4          $N$5
Picture 2     $B$1          $B$3
Picture 4     $B$2          $B$4
Picture 6     $B$3          $B$5
Picture 8     $B$4          $B$6
Picture 10    $B$5          $B$7
Picture 12    $B$6          $B$8
Picture 14    $B$7          $B$9
Picture 16    $B$8          $B$10
Picture 18    $B$9          $B$11
Picture 20    $B$10         $B$12
Picture 22    $B$11         $B$13
Picture 24    $B$12         $B$14
Button 2      $I$3          $J$5
Button 3      $L$4          $N$5
Picture 2     $B$1          $B$3
Picture 4     $B$2          $B$4
Picture 6     $B$3          $B$5
Picture 8     $B$4          $B$6
Picture 10    $B$5          $B$7
Picture 12    $B$6          $B$8
Picture 14    $B$7          $B$9
Picture 16    $B$8          $B$10
Picture 18    $B$9          $B$11
Picture 20    $B$10         $B$12
Picture 22    $B$11         $B$13
Picture 24    $B$12         $B$14
Button 2      $I$3          $J$5
Button 3      $L$4          $N$5
Picture 2     $B$1          $B$3
Picture 4     $B$2          $B$4
Picture 6     $B$3          $B$5
Picture 8     $B$4          $B$6
Picture 10    $B$5          $B$7
Picture 12    $B$6          $B$8
Picture 14    $B$7          $B$9
Picture 16    $B$8          $B$10
Picture 18    $B$9          $B$11
Picture 20    $B$10         $B$12
Picture 22    $B$11         $B$13
Picture 24    $B$12         $B$14
Button 2      $I$3          $J$5
Button 3      $L$4          $N$5
Picture 2     $B$1          $B$3
Picture 4     $B$2          $B$4
Picture 6     $B$3          $B$5
Picture 8     $B$4          $B$6
Picture 10    $B$5          $B$7
Picture 12    $B$6          $B$8
Picture 14    $B$7          $B$9
Picture 16    $B$8          $B$10
Picture 18    $B$9          $B$11
Picture 20    $B$10         $B$12
Picture 22    $B$11         $B$13
Picture 24    $B$12         $B$14
Button 2      $I$3          $J$5
Button 3      $L$4          $N$5
Picture 2     $B$1          $B$3
Picture 4     $B$2          $B$4
Picture 6     $B$3          $B$5
Picture 8     $B$4          $B$6
Picture 10    $B$5          $B$7
Picture 12    $B$6          $B$8
Picture 14    $B$7          $B$9
Picture 16    $B$8          $B$10
Picture 18    $B$9          $B$11
Picture 20    $B$10         $B$12
Picture 22    $B$11         $B$13
Picture 24    $B$12         $B$14
Button 2      $I$3          $J$5
Button 3      $L$4          $N$5
Picture 2     $B$1          $B$3
Picture 4     $B$2          $B$4
Picture 6     $B$3          $B$5
Picture 8     $B$4          $B$6
Picture 10    $B$5          $B$7
Picture 12    $B$6          $B$8
Picture 14    $B$7          $B$9
Picture 16    $B$8          $B$10
Picture 18    $B$9          $B$11
Picture 20    $B$10         $B$12
Picture 22    $B$11         $B$13
Picture 24    $B$12         $B$14
Button 2      $I$3          $J$5
Button 3      $L$4          $N$5
Picture 2     $B$1          $B$3
Picture 4     $B$2          $B$4
Picture 6     $B$3          $B$5
Picture 8     $B$4          $B$6
Picture 10    $B$5          $B$7
Picture 12    $B$6          $B$8
Picture 14    $B$7          $B$9
Picture 16    $B$8          $B$10
Picture 18    $B$9          $B$11
Picture 20    $B$10         $B$12
Picture 22    $B$11         $B$13
Picture 24    $B$12         $B$14
Button 2      $I$3          $J$5
aber das Ursprüngliche Makro hat mir einfach die Bilder von Zeile x bis Zeile y Markiert aber halt auch alle Spalten. Das Makro markiert gar keine Bilder.
Das Lokalfenster ist mir Welten zu hoch.
Herzliche Grüße
Vasko
Anzeige
AW: Makro Bilder selektieren erweitern
28.01.2022 10:46:47
Yal
Hallo Vasko,
3 Beispielzeilen hätten auch gereicht. Ich habe das Ding programmiert und weiss, was daraus kommt.
Aber es ist nur eine Ausgabe. Das Wesentlich ist, dass Du ein Array in der Hand hast, wo alle gesuchten Shapes aufgelistet sind.
Aber ich sehe ein, dass Du aus eigenen Wissenstand nicht deinen Code und meinen zusammenbringen kannst. Ich habe es überschätzt.
Hier die Lösung:

Sub Test2()
Worksheets("Tabelle2").Shapes.Range(ShapeArray_herstellen("Tabelle2", 8, 9)).Select
End Sub
Private Function ShapeArray_herstellen(WS As String, LinkeSpalte As Long, RechteSpalte As Long)
Dim S As Shape
Dim arrShapes()
For Each S In Worksheets(WS).Shapes
If S.TopLeftCell.Column >= LinkeSpalte And S.BottomRightCell.Column 
Alternativ wäre

Sub Test()
ActiveSheet.Shapes.Range(ShapeArray_herstellen(ActiveSheet.Name, 8, 9)).Select
End Sub
VG
Yal
Anzeige
AW: Makro Bilder selektieren erweitern
28.01.2022 10:54:14
Yal
Hallo Vasko,
würdest Du zuerst die Spalten markieren wollen und daraus die Shapes auswählen, so sähe es dann aus:
(kompletter Code wegen den zusätzlichen "ByVal" in ShapeArray_herstellen)

Public Sub ShapesInSpalten_auswählen()
Dim L, R
L = Selection.Column
R = Selection.Column + Selection.Columns.Count - 1
ActiveSheet.Shapes.Range(ShapeArray_herstellen(ActiveSheet.Name, L, R)).Select
End Sub
Private Function ShapeArray_herstellen(WS As String, ByVal LinkeSpalte As Long, ByVal RechteSpalte As Long)
Dim S As Shape
Dim arrShapes()
For Each S In Worksheets(WS).Shapes
If S.TopLeftCell.Column >= LinkeSpalte And S.BottomRightCell.Column 
VG
Yal
Anzeige
AW: Makro Bilder selektieren erweitern
01.02.2022 10:54:19
Vasko
Hallo Val,
vielen Dank für Dein Verständnis und Sorry für das spammen. Das Makro, um die Spalten zu markieren, macht richtig Spaß. Die andere Version funktioniert auch ohne Probleme.
Ich weiß gar nicht wie ich es sagen soll, aber mein ursprüngliches Problem ist damit zwar nicht gelöst, aber hat ein cooles Feature dazubekommen :).
Trotzdem ganz herzlichen Dank, dass Du Dir überhaupt die Zeit für so etwas nimmst!!! Ich hätte damals in Informatik besser aufpassen sollen...
Wenn Du Tipps aus gastronomischer, kulinarischer Sicht brauchst, helfe ich gern!
Ganz herzliche Grüße
Vasko
Anzeige
Vielen Dank für die Rückmeldung
01.02.2022 13:25:31
Yal
...das hört man gern.
Du sagst "mein ursprüngliches Problem ist damit zwar nicht gelöst", dann muss ich wohl annehmen, dass dein ursprüngliche Problem nicht teil deine bisherige Beschreibung war. Stelle dafür eine neue Frage.
Diese Thread ist damit abgeschossen.
VG
Yal
AW: Vielen Dank für die Rückmeldung
01.02.2022 17:22:48
Vasko
Hallo Val,
naja meine ursprüngliche Beschreibung war:

zusätzlich gerne noch die Spalte festlegen können 
sprich zusätzlich zu den Zeilen eine Spalte festlegen, oder nun andersrum zusätzlich zur Spalte, die Zeilen festlegen. Beide Makros markieren nun die komplette Spalte.
aber trotzdem Danke und herzliche Grüße
Vasko
Anzeige
AW: Vielen Dank für die Rückmeldung
01.02.2022 18:30:01
Yal
Hallo Vasko,
ach so! Nichts einfacheres (eigentlich hättest Du selber drauf kommen müssen ;-)

Public Sub ShapesInSpalten_auswählen()
Dim L, R, O, U 'links, rechts, oben unten
L = Selection.Column
R = Selection.Column + Selection.Columns.Count - 1
O = Selection.Row
U = Selection.Row + Selection.Rows.Count - 1
ActiveSheet.Shapes.Range(ShapeArray_herstellen(ActiveSheet.Name, L, R, O, U)).Select
End Sub
Private Function ShapeArray_herstellen(WS As String, ByVal LS As Long, ByVal RS As Long, ByVal OZ As Long, ByVal UZ As Long)
Dim S As Shape
Dim arrShapes()
arrShapes = Array() 'Dummy-Initialisierung, UBound = -1 zu bekommen
For Each S In Worksheets(WS).Shapes
If S.TopLeftCell.Column >= LS And S.BottomRightCell.Column = OZ And S.BottomRightCell.Row 
(Ich habe inzwischen die Lösung gegen den "UBound0" gefunden. Die Function wird nicht mehr benötigt)
Nicht getestet.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige