Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Array füllen

Array füllen
30.03.2005 12:17:55
Hendrik
Hallo,
Ich habe das Problem ein Array mit 144 "Freeforms" füllen zu wollen.
die Freiformen werden in Excel ja alle irgendwie nicht nachvollziehbar numeriert, so dass ich ein Makro aufgezeichnet habe in dem ich alle ein mal markierte, um den Namen rauszubekommen.
wie schreibe ich nun die Namen komfortabel in ein Array, wenn diese in VBA codeform auf meiner VBA-Oberfläche stehen und nicht in einer, bzw. 144 Excel-Zellen?
hier ein Auszug des Makros:
ActiveChart.Shapes("Freeform 56").Select
ActiveChart.Shapes("Freeform 61").Select
ActiveChart.Shapes("Freeform 66").Select

ActiveChart.Shapes("Freeform 39").Select
ActiveChart.Shapes("Freeform 44").Select
ActiveChart.Shapes("Freeform 49").Select

ActiveChart.Shapes("Freeform 22").Select
ActiveChart.Shapes("Freeform 27").Select
ActiveChart.Shapes("Freeform 32").Select
u.s.w.
die stehen da jetzt.
Wie bekomme ich diese 144! Zeilen (oder insbes. die Namen aus den Zeilen) in ein Array?
Danke für jede Hilfe!
Hendrik.
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Array füllen
30.03.2005 12:42:12
Uduuh
Hallo,
ungetestet:

Sub chartnames()
dim i as integer, arrChart(144), sh as shape
i=1
for each sh in activechart.shapes
arrchart(i)=sh.name
i=i+1
next sh
End Sub

Gruß aus'm Pott
Udo
AW: Array füllen
30.03.2005 12:59:49
Hendrik
Naja, das füllt mir das Array mit den ersten 144 shapes des aktiven Charts. Leider geht das so nicht, da ich nicht alle shapes brauche, sondern NUR die aus dem Makro. Insgesamt gibt es ca. 1000 shapes in 4 verschiedenen charts.
danke trotzdem für den Ansatz.
Hendrik.
Anzeige
Um auch nur die Freeforms einzulesen...
30.03.2005 13:01:09
Boris
Hi Hendrik,
...und nicht auch mögliche andere Shapes, dann:
Option Explicit

Sub free_forms()
Dim ff As Shape, arr() As String, i As Integer
For Each ff In ActiveChart.Shapes
If ff.Type = 5 Then
ReDim Preserve arr(i)
arr(i) = ff.Name
i = i + 1
End If
Next ff
End Sub

Grüße Boris
Anzeige
AW: Um auch nur die Freeforms einzulesen...
30.03.2005 13:25:56
Hendrik
Tut mir leid, das ist es leider auch nicht, ich muss auch sicher stellen, dass genau eine bestimmte Freeform an einer bestimmten Stelle im Array steht um schließlich die Farbe in einer Schleife nach bestimmten Regeln zu ändern. Ich glaube außerdem, dass die 1000 Shapes alle Freeforms sind, da ich sie per Copy/Paste aus Powerpoint geholt habe.
Danke aber für die Idee.
Hendrik.
Anzeige
Excel kann leider noch nicht hellsehen...
30.03.2005 13:31:46
Boris
Hi Hendrik,
...insofern müssen die gewünschten Freeforms mindest ein gemeinsame typische Eigenschaft haben, um sie dynamisch aus deinem Formenwust zu identifizieren.
Grüße Boris
AW: Excel kann leider noch nicht hellsehen...
30.03.2005 18:31:17
ransi
hallo hendrik
wie boris sagte:
"...insofern müssen die gewünschten Freeforms mindest ein gemeinsame typische Eigenschaft haben, um sie dynamisch aus deinem Formenwust zu identifizieren."
wenn ich dich richtig verstanden habe sind die alle selectiert.
versuch mal so:(ungetestet)

Sub chartnames()
dim i as integer
dim arrChart(144)
dim sh
i=1
for each sh in selection
arrchart(i)=sh.name
i=i+1
next sh
End Sub

ransi
Anzeige
;
Anzeige

Infobox / Tutorial

Array in VBA füllen: Ein praktischer Leitfaden


Schritt-für-Schritt-Anleitung

Um ein Array in VBA mit Namen von Freeforms zu füllen, kannst Du die folgenden Schritte befolgen. Dieses Beispiel geht davon aus, dass Du bereits einige Freeforms in einem Excel-Diagramm hast.

  1. Öffne den VBA-Editor: Drücke ALT + F11.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub FillArrayWithFreeforms()
        Dim i As Integer
        Dim arr() As String
        Dim ff As Shape
    
        ' Dynamisches Array initialisieren
        ReDim arr(1 To 144)
        i = 1
    
        ' Durchlaufe alle Shapes im aktiven Diagramm
        For Each ff In ActiveChart.Shapes
            If ff.Type = msoFreeform Then
                arr(i) = ff.Name
                i = i + 1
                If i > 144 Then Exit For ' Beende die Schleife nach 144 Elementen
            End If
        Next ff
    End Sub
  4. Führe das Makro aus: Setze den Cursor in die Subroutine und drücke F5.

Dies füllt das Array mit den Namen der ersten 144 Freeforms, die im aktiven Diagramm gefunden werden.


Häufige Fehler und Lösungen

  • Fehler: "Typ nicht definiert"

    • Lösung: Stelle sicher, dass Du die richtige Typenreferenz verwendest. In diesem Fall sollte msoFreeform verwendet werden, um Freeforms zu identifizieren.
  • Problem: Array ist nicht vollständig gefüllt

    • Lösung: Überprüfe, ob alle Freeforms im aktiven Diagramm ausgewählt oder vorhanden sind. Achte darauf, dass das Diagramm aktiv ist, bevor Du das Makro ausführst.

Alternative Methoden

Eine alternative Methode, um ein vba dynamisches Array zu füllen, ist die Verwendung von Selection. Wenn Du nur die aktuell ausgewählten Freeforms im Array speichern möchtest, kannst Du folgenden Code verwenden:

Sub FillArrayFromSelection()
    Dim i As Integer
    Dim arr() As String
    Dim sh As Shape

    ' Dynamisches Array initialisieren
    ReDim arr(1 To Selection.Count)
    i = 1

    ' Durchlaufe die ausgewählten Shapes
    For Each sh In Selection
        If sh.Type = msoFreeform Then
            arr(i) = sh.Name
            i = i + 1
        End If
    Next sh
End Sub

Praktische Beispiele

Hier sind einige Beispiele, wie Du das gefüllte Array weiterverwenden kannst:

  1. Farben ändern: Du kannst die Farben der Freeforms im Array nach bestimmten Regeln ändern. Beispiel:

    For i = LBound(arr) To UBound(arr)
        ActiveChart.Shapes(arr(i)).Fill.ForeColor.RGB = RGB(255, 0, 0) ' Ändert die Farbe in Rot
    Next i
  2. Namen auflisten: Du kannst die Namen der Freeforms in eine Excel-Zelle schreiben:

    For i = LBound(arr) To UBound(arr)
        Cells(i, 1).Value = arr(i) ' Schreibt die Namen in die erste Spalte
    Next i

Tipps für Profis

  • Dynamische Arrays: Nutze ReDim Preserve, um ein dynamisches Array während der Laufzeit zu ändern, ohne die vorherigen Werte zu verlieren.
  • Fehlerbehandlung: Implementiere On Error GoTo, um Fehler während der Ausführung zu behandeln.
  • Optimierung: Vermeide unnötige Schleifen, indem Du gezielt nach spezifischen Eigenschaften der Freeforms suchst.

FAQ: Häufige Fragen

1. Wie kann ich nur bestimmte Freeforms in das Array füllen? Du kannst Bedingungen hinzufügen, um nur Freeforms mit spezifischen Eigenschaften zu füllen, z.B. basierend auf ihren Namen oder Farben.

2. Gibt es eine maximale Größe für Arrays in VBA? Ja, der maximale Index für ein Array in VBA beträgt 65535 für statische Arrays. Bei dynamischen Arrays ist die Grenze abhängig vom verfügbaren Arbeitsspeicher.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige