Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Shapes auslesen

Shapes auslesen
04.12.2017 07:48:57
Marco
Guten Morgen =)
ich habe in zwei Shapes Werte stehen und diese möchte ich mit VBA auslesen und übergeben, aber ich habe anscheinend noch nicht den richtigen Befehl gefunden.
     von = Sheets("Tabelle1").Shapes("Start_Datum").TextFrame.Characters.Text
bis = Sheets("Tabelle1").Shapes("End_Datum").TextFrame.Characters.Text
Kann mir da bitte jemand weiterhelfen?
Anzeige

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Shapes auslesen
04.12.2017 08:10:23
Luschi
Hallo Marco,
das klappt bei mir so:
von = Sheets("Tabelle1").OLEObjects("Start_Datum").Object.Value
Gruß von Luschi
aus klein-Paris
AW: Shapes auslesen
04.12.2017 08:19:22
Marco
Das funktioniert bei mir nicht Luschi. Also ich will der Variablen "von" den Wert aus dem Shape, also aus einem Rechteck übergeben
AW: Shapes auslesen
04.12.2017 08:24:48
Luschi
Hasllo Marco,
dieser Befehl: von = Sheets("Tabelle1").Shapes("Start_Datum").TextFrame.Characters.Text
ist eindeutig Word Vba und nicht Excel-Vba.
Bisher hast Du moch nicht erklärt um was für Art Shapes es sich bei Dir jhandelt.
Ich spreche von ActiveX-Textboxen auf den Tabellenblatt und da funnktionieren bei mir folgende 4 Möglichkeiten:
Dim von
von = Sheets("Tabelle1").OLEObjects("Start_Datum").Object.Value
von = Sheets("Tabelle1").Start_Datum.Value
von = Sheets("Tabelle1").Shapes("Start_Datum").DrawingObject.Object.Text
von = Sheets("Tabelle1").Shapes("Start_Datum").DrawingObject.Object.Value
Gruß von Luschi
aus klein-Paris
Anzeige
AW: @ Luschi
04.12.2017 08:32:06
hary
Moin Luschi
ist eindeutig Word Vba und nicht Excel-Vba.
Shapes("Start_Datum").TextFrame.Characters.Text
Nee, damit spricht man Formularsteuerelemente(nicht ActiveX) an und gibt den Text zurueck.
Eigentlich ist der Code richtig.
Marco, lad mal eine Bsp.-Mappe hoch.
gruss hary
Anzeige
AW: @ Luschi
04.12.2017 08:53:52
Luschi
Hallo hary,
in Excel 2013 & 2016 sind die Formularsteuerelemente TextBox, KombinationsListe und DropDown deaktiviert und können nicht mehr benutzt werden.
Gruß von Luschi
aus klein-Paris
AW: Aha, danke gruss owt
04.12.2017 08:56:56
hary
.
AW: Aha, danke gruss owt
04.12.2017 09:11:49
Marco
Also ich habe jetzt mal eine Datei angehängt mit den beiden Shapes. Ich möchte die Information aus diesen Shapes in die Variablen "von" und "bis" einlesen. Die vorher geposteten Befehle haben leider nicht funktioniert.
Anzeige
AW: Aha, danke gruss owt
04.12.2017 09:57:20
Nepumuk
Hallo Marco,
teste mal:
Public Sub Test()
MsgBox Tabelle1.Shapes("Start_Datum").OLEFormat.Object.Text
MsgBox Tabelle1.Shapes("End_Datum").OLEFormat.Object.Text
End Sub

Gruß
Nepumuk
Anzeige
AW: Aha, danke gruss owt
04.12.2017 10:12:39
Luschi
Hallo Marco,
Nepumuk's Vorschlag ist i.O. und es funktioniert auch so:

Dim x As Variant
x = CDate(Tabelle1.Shapes("Start_Datum").TextFrame.Characters.Text)
If VarType(x) = vbDate Then
Debug.Print "Startdatum: " & x
Else
MsgBox "Startdatum ist kein Datumswert!", 16
End If
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Aha, danke gruss owt
04.12.2017 12:24:09
Marco
Also die Antwort der MsgBox ist richtig aber ich wollte den Inhalt an die Variablen "von" und "bis" übergeben und das funktioniert leider nicht. Ich bekomme keine Fehlermeldung aber mein Code liefert auch kein Ergebnis. Wisst ihr warum
von = Tabelle1.Shapes("Start_Datum").OLEFormat.Object.Text
bis = Tabelle1.Shapes("End_Datum").OLEFormat.Object.Text
Anzeige
AW: Aha, danke gruss owt
04.12.2017 13:39:53
Luschi
Hallo Marco,
in Deiner bereitgestellten xlsx-Datei gibt es natürlich keine Makros, dafür ist eine xlsm-Datei erforderlich.
Die Frage dabei ist, wann soll die Ermittlung der beiden Werte erfolgen:
- Klick auf ein Button
- nach der Eingabe eines Wertes
- und vor alles wo erfolgt diese Eingabe (Textbox oder Zelle)
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Aha, danke gruss owt
04.12.2017 15:06:55
Marco
Ich lade mal die ganze Datei hoch ich kann es sonst nicht erklären. Es ist so ich klicke "Fehler anzeigen" an und dann werden alle Fehler in Abhängigkeit vom Datum angezeigt.
Aktuell wird das Datum in die gelben Kästchen eingegeben und von da abgerufen. Ich möchte aber die Shapes (schwarz eingerahmt // das obere ist Start das untere Ende) verwenden. Wenn man die anklickt kann man ein neues Datum eingeben. Der "Fehler Anzeigen" Button soll jetzt anstatt das Datum aus den gelben Kästchen das Datum im Schwarzen Rahmen hernehmen. Das macht es aber leider nicht.
Datei:
https://www.herber.de/bbs/user/118088.xlsm
Anzeige
AW: Aha, danke gruss owt
04.12.2017 18:30:51
Daniel
Hi
wenn du den Text aus den Textfeldern verwenden willst, musst du diesen explizit in ein Datum wandeln, da es sich um einen Text handelt:
von = cdate(Sheets("Dashboard").Shapes("Start_Datum").DrawingObject.Text)
bis = cdate(Sheets("Dashboard").Shapes("End_Datum").DrawingObject.Text)
Gruß Daniel
Anzeige
AW: Aha, danke gruss owt
04.12.2017 20:45:42
Marco
Super genau danach habe ich gesucht =) Danke Daniel und allen anderen
AW: Aha, danke gruss owt
05.12.2017 08:11:44
Luschi
Hallo Marco,
Du solltest natürlich auch prüfen, ob in den Textboxen auch ein Ausdruck steht,
der in ein Datum umgewandelt werden kann:

Dim v As Variant
von = Sheets("Dashboard").Shapes("Start_Datum").OLEFormat.Object.Text
If IsDate(v) Then
v = CDate(v)
Else
v = 0
MsgBox "ungültige Eingabe, kein Datumswert", vbSystemModal + 16
Exit Sub
End If
Gruß von Luschi
aus klein-Paris
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Werte aus Shapes in Excel VBA auslesen


Schritt-für-Schritt-Anleitung

Um Werte aus Shapes in Excel VBA auszulesen, kannst du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject" und wähle "Einfügen" > "Modul".

  3. Schreibe den Code: Nutze den folgenden VBA-Code, um die Werte aus den Shapes zu lesen:

    Sub ReadShapeValues()
       Dim von As Variant
       Dim bis As Variant
    
       ' Werte aus den Shapes auslesen
       von = Sheets("Tabelle1").Shapes("Start_Datum").TextFrame.Characters.Text
       bis = Sheets("Tabelle1").Shapes("End_Datum").TextFrame.Characters.Text
    
       ' Ausgabe der Werte
       MsgBox "Von: " & von & vbCrLf & "Bis: " & bis
    End Sub
  4. Führe das Makro aus: Klicke auf „F5“ oder gehe zu „Run“ > „Run Sub/UserForm“, um das Makro auszuführen.


Häufige Fehler und Lösungen

  • Fehler: „Objekt nicht gefunden“: Stelle sicher, dass der Name des Shapes korrekt ist und das Shape tatsächlich auf dem angegebenen Arbeitsblatt vorhanden ist.

  • Fehler: „Typen unverträglich“: Wenn du versuchst, einen String in ein Datum zu konvertieren, stelle sicher, dass der Text ein gültiges Datumsformat hat. Nutze IsDate() zur Überprüfung:

    If IsDate(von) Then
       von = CDate(von)
    Else
       MsgBox "Ungültiges Datum im Shape 'Start_Datum'."
    End If
  • Shapes sind nicht sichtbar: Überprüfe, ob das Shape auf dem Arbeitsblatt ausgeblendet ist oder ob die Sichtbarkeitseinstellungen korrekt sind.


Alternative Methoden

  1. ActiveX-Steuerelemente verwenden: Wenn deine Shapes ActiveX-Textboxen sind, kannst du das OLEObject verwenden:

    von = Sheets("Tabelle1").OLEObjects("Start_Datum").Object.Value
  2. Verwendung von .OLEFormat: Für bestimmte Shapes kann es notwendig sein, die OLEFormat-Eigenschaft zu nutzen:

    von = Sheets("Tabelle1").Shapes("Start_Datum").OLEFormat.Object.Text

Praktische Beispiele

Hier sind einige praktische Beispiele, um Werte aus Shapes auszulesen:

  1. Ein einfaches Beispiel:

    Sub GetShapeText()
       Dim shapeText As String
       shapeText = Sheets("Tabelle1").Shapes("MeinShape").TextFrame.Characters.Text
       MsgBox "Der Text im Shape ist: " & shapeText
    End Sub
  2. Werte aus mehreren Shapes in Variablen speichern:

    Sub ReadMultipleShapes()
       Dim startDatum As String
       Dim endDatum As String
    
       startDatum = Sheets("Tabelle1").Shapes("Start_Datum").TextFrame.Characters.Text
       endDatum = Sheets("Tabelle1").Shapes("End_Datum").TextFrame.Characters.Text
    
       MsgBox "Startdatum: " & startDatum & vbCrLf & "Enddatum: " & endDatum
    End Sub

Tipps für Profis

  • Verwende Debug.Print: Nutze Debug.Print, um Werte im Direktfenster zu überprüfen, ohne ständig MsgBoxen zu verwenden.

  • Überprüfe die Shape-Eigenschaften: Informiere dich über die verschiedenen Excel VBA Shape Eigenschaften, um sicherzustellen, dass du die richtigen Eigenschaften für deine Shapes verwendest.

  • Makros automatisieren: Wenn du häufig auf Shapes zugreifen musst, überlege, das Makro so zu gestalten, dass es automatisch bei bestimmten Ereignissen (z.B. beim Öffnen der Datei) ausgeführt wird.


FAQ: Häufige Fragen

1. Wie kann ich den Text eines Shapes in eine Zelle einfügen?
Du kannst den Text direkt einer Zelle zuweisen:

Sheets("Tabelle1").Range("A1").Value = Sheets("Tabelle1").Shapes("Start_Datum").TextFrame.Characters.Text

2. Was ist der Unterschied zwischen Shapes und ActiveX-Steuerelementen?
Shapes sind grafische Objekte, während ActiveX-Steuerelemente interaktive Steuerelemente sind, die Daten eingeben oder anzeigen können. Du kannst mit vba .shapes und vba shapes textbox value auf beide zugreifen, aber die Methoden variieren.

3. Warum bekomme ich einen „Typen unverträglich“-Fehler?
Dieser Fehler tritt häufig auf, wenn du versuchst, einen nicht kompatiblen Datentyp zuzuweisen oder zu konvertieren. Stelle sicher, dass du den Datentyp überprüfst und sicherstellst, dass der Text im richtigen Format vorliegt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige