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

Prüfen ob ein Objekt schon vorhanden ist

Forumthread: Prüfen ob ein Objekt schon vorhanden ist

Prüfen ob ein Objekt schon vorhanden ist
30.08.2018 18:51:14
P.
Hallo Zusammen,
ich habe eine Frage zum o.g. Thema.
Ich möchte folgendes umsetzen:
Bei "Strg+egal" soll ein Makro starten, dass ein paar Formatierungen erledigt (das ist soweit kein Problem) und anschließend aus dem Inhalt einer Zelle einen Data-Matrixcode erstellt. Das habe ich soweit auch mit "ActiveBarcode" umgesetzt bekommen. Im Anschluss möchte ich diesen Code Formatieren... Hier habe ich ein Problem:
Ich führe das Makro aus ein Barcode wird erstellt. Im nächsten Schritt steigt er aus mit der Fehlermeldung "'438' Objekt unterstützt diese Eigenschaft oder Methode nicht"
Wenn ich nun aber das Makro erneut ausführe... kein Problem er setzt die Eigenschaft des Barcodes wie gewünscht. Jedoch erstellt er dann jedes mal einen weiteren Barcode.
Was ich nun möchte ist eine Überprüfung ob das Objekt "Barcode1" schon vorhanden ist. Wenn ja _ dann soll kein neuer Barcode erzeugt werden und nur die Eigenschaften angepasst werden. So soll dann auch der Barcode aktualisiert werden bei wechselnden Zelleninhalt (A32).

Sub Makro1()
' Makro1 Makro
' Formaterung der Zellen
Range("A32").Select
ActiveCell.FormulaR1C1 = _
"=""**C2**""&R[-26]C[8]&""**""&R[-26]C[10]&""**""&R[-29]C[5]&""**"""
Range("A32").Select
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.NumberFormat = "General"
'Erzeugen des Barcodes
ActiveSheet.OLEObjects.Add(ClassType:="BARCODE.BarcodeCtrl.1", Link:=False _
, DisplayAsIcon:=False, Left:=509.25, Top:=475.5, Width:=139.5, Height:=65.25 _
).Select
'Anpassen der Eigenschaften
ActiveSheet.Barcode1.Text = Range("A32")
ActiveSheet.Barcode1.Type = "43"
ActiveSheet.Barcode1.LinkedCell = Range("A32")
End Sub

Ich habe schon ein paar If-Anweisungen versucht... Ich lande jedoch immer beim Fehler "Benötigt Objekt".
Ist das denn so mit einer Wenn-Funktion umsetzbar?
Ich gehe schwer von Ja aus. Mir fehlt nur leider das nötige Wissen.
F1 F1 F1 =)
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob ein Objekt schon vorhanden ist
30.08.2018 19:43:15
Sepp
Hallo ?,
ungetestet.
Modul Modul1
Option Explicit 
 
Sub Makro1() 
  Dim objCtrl As OLEObject 
   
  With ActiveSheet 
    ' Formaterung der Zellen 
    With .Range("A32") 
      .FormulaR1C1 = "=""**C2**""&R[-26]C[8]&""**""&R[-26]C[10]&""**""&R[-29]C[5]&""**""" 
      With .Font 
        .ThemeColor = xlThemeColorDark1 
        .TintAndShade = 0 
      End With 
      .NumberFormat = "General" 
    End With 
    ' Prüfen ob Control bereits vorhanden 
    For Each objCtrl In .OLEObjects 
      If objCtrl.Name = "Barcode1" Then Exit For 
    Next 
    'Erzeugen des Barcodes 
    If objCtrl Is Nothing Then 
      Set objCtrl = .OLEObjects.Add(ClassType:="BARCODE.BarcodeCtrl.1", _
        Link:=False, DisplayAsIcon:=False, Left:=509.25, _
          Top:=475.5, Width:=139.5, Height:=65.25) 
      objCtrl.Name = "Barcode1" 
    End If 
    'Anpassen der Eigenschaften 
    With objCtrl 
      .Text = Range("A32") 
      .Type = "43" 
      .LinkedCell = Range("A32") 
    End With 
  End With 
   
End Sub 
 
 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Prüfen ob ein Objekt schon vorhanden ist
30.08.2018 21:24:43
P.
Uh Super! Vielen Dank für die flotte Hilfe.
Das klappt schon fast perfekt. Leider funktioniert der Teil Anpassen der Eigenschaften so nicht.
 With objCtrl
.Text = Range("A32")
.Type = "43"
.LinkedCell = Range("A32")
End With 
Ich habe hier wieder den vorherigen Teil übernommen.
        ActiveSheet.Barcode1.Text = Range("A32")
ActiveSheet.Barcode1.Type = "43"
ActiveSheet.Barcode1.LinkedCell = Range("A32")
Dieser Funktioniert leider wieder erst wenn das Makro min. 2 mal ausführe.
Muss evtl. das Objekt "Barcode1" noch einmal gesondert definiert werden?
Noch mal Danke Sepp
Anzeige
AW: Prüfen ob ein Objekt schon vorhanden ist
30.08.2018 21:30:13
Sepp
Hallo ?,
probier es so.
    'Anpassen der Eigenschaften 
    With objCtrl.Object
      .Text = Range("A32")
      .Type = "43"
      .LinkedCell = Range("A32")
    End With

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

Da ich diese Steuerelement nicht installiert habe, kann ich den Code nicht testen.
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Prüfen ob ein Objekt schon vorhanden ist
30.08.2018 21:50:56
Pascal
Hallo Sepp,
leider zeigt er wieder den selben Fehler an. Nun auch bei wiederholter Ausführung des Makros.
Jetzt läuft das Makro aber weiter. Jedoch übernimmt er die Eigenschaft LinkCell nicht.
Ich frage mich wieso es nun bei jeder Ausführung auftritt.
Im FAQ von ActiveBarcode empfehlen die diese Methode:
Um Zugriff auf die Eigenschaften des Controls zu erhalten, gehen Sie wie folgt vor:
With ab.OLEFormat
.Activate
Set abobject = .Object
End With
abobject.Text = "987698769812"
Über die Variaable abobject können Sie nun auf alle Eigenschaften und Methoden des Controls zugreifen.

Anzeige
AW: Prüfen ob ein Objekt schon vorhanden ist
30.08.2018 22:01:48
Sepp
Hallo Pascal,
setzte eine Haltepunkt in der Zeile
With objCtrl.Object

und schau dir im Lokalfenster die Eigenschaften von 'objCtrl' an.
Ansonsten keine weiteren Ideen.
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Prüfen ob ein Objekt schon vorhanden ist
03.09.2018 18:53:14
Pascal
Danke noch einmal. Das hat mir sehr weiter geholfen.
Leider konnte ich das Problem nicht lösen, dass ich das Makro 2 mal ausführen muss bevor es klappt.
;
Anzeige
Anzeige

Infobox / Tutorial

Objekte in Excel mit ActiveBarcode prüfen und aktualisieren


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Excel, indem Du ALT + F11 drückst.
  2. Füge ein neues Modul hinzu:
    • Klicke im Menü auf Einfügen und dann auf Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub Makro1()
    Dim objCtrl As OLEObject
    With ActiveSheet
        ' Formatierung der Zellen
        With .Range("A32")
            .FormulaR1C1 = "=""**C2**""&R[-26]C[8]&""**""&R[-26]C[10]&""**""&R[-29]C[5]&""**"""
            With .Font
                .ThemeColor = xlThemeColorDark1
                .TintAndShade = 0
            End With
            .NumberFormat = "General"
        End With

        ' Prüfen ob Control bereits vorhanden
        For Each objCtrl In .OLEObjects
            If objCtrl.Name = "Barcode1" Then Exit For
        Next

        ' Erzeugen des Barcodes
        If objCtrl Is Nothing Then
            Set objCtrl = .OLEObjects.Add(ClassType:="BARCODE.BarcodeCtrl.1", _
                Link:=False, DisplayAsIcon:=False, Left:=509.25, _
                Top:=475.5, Width:=139.5, Height:=65.25)
            objCtrl.Name = "Barcode1"
        End If

        ' Anpassen der Eigenschaften
        With objCtrl.Object
            .Text = Range("A32")
            .Type = "43"
            .LinkedCell = Range("A32")
        End With
    End With
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Führe das Makro aus, indem Du ALT + F8 drückst, das Makro auswählst und auf Ausführen klickst.

Häufige Fehler und Lösungen

  • Fehler "438: Objekt unterstützt diese Eigenschaft oder Methode nicht":

    • Stelle sicher, dass Du auf die Eigenschaften des Barcode-Objekts korrekt zugreifst. Verwende With objCtrl.Object, um sicherzustellen, dass Du die richtigen Eigenschaften anpasst.
  • Barcode wird nicht aktualisiert oder bleibt leer:

    • Überprüfe, ob das korrekt verknüpfte Zell-Referenz (LinkedCell) vorhanden ist. Achte darauf, dass die Zelle A32 den erwarteten Inhalt hat.

Alternative Methoden

Wenn Du Probleme mit dem ActiveBarcode-Control hast, kannst Du auch das Excel Barcode Add-in verwenden. Dieses Add-in bietet eine benutzerfreundliche Oberfläche und erfordert keine Programmierung. Die Integration von Barcodes in Excel wird damit erheblich erleichtert.


Praktische Beispiele

Hier ist ein Beispiel, wie Du den Barcode aktualisieren kannst, wenn sich der Zellinhalt ändert. Du kannst das folgende Makro nutzen:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("A32")) Is Nothing Then
        Call Makro1
    End If
End Sub

Füge dieses Makro in das Arbeitsblatt-Modul ein, um automatisch einen Barcode zu generieren, wenn sich der Inhalt der Zelle A32 ändert.


Tipps für Profis

  • Debugging: Setze Haltepunkte im VBA-Code, um den Fluss zu überprüfen. Dies hilft, das Verhalten des Barcode-Controls besser zu verstehen.
  • Objektverwaltung: Achte darauf, dass Du OLE-Objekte effizient verwaltest. Überprüfe immer, ob das Objekt bereits existiert, bevor Du es neu erstellst.
  • ActiveBarcode-Dokumentation: Konsultiere die spezifische Dokumentation von ActiveBarcode für weiterführende Anpassungen und Fehlerbehebungen.

FAQ: Häufige Fragen

1. Warum muss ich das Makro mehrmals ausführen, bevor es funktioniert? Es könnte sein, dass die Eigenschaften des Barcodes nicht korrekt gesetzt werden, weil das Objekt nicht ordentlich initialisiert ist. Überprüfe, ob die Objektverweise korrekt sind.

2. Wie kann ich sicherstellen, dass das Barcode-Objekt korrekt aktualisiert wird? Verwende die Worksheet_Change-Ereignisprozedur, um sicherzustellen, dass der Barcode automatisch aktualisiert wird, wenn sich die Zellinhalte ändern.

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