Fehler bei AddComment

Bild

Betrifft: Fehler bei AddComment
von: Juli
Geschrieben am: 27.07.2015 15:32:43

Hallo,
warum meldet mir vba bei dem Code:
Set Kommentar = Worksheets("Tabelle1").Cells(4, Spalte).AddComment
eine "Anwendungs- oder objektdefinierter Fehler" - Meldung?
Der komplette Code:

Sub Markiere_KW(iKW As Integer, iJahr As Integer, Bezeichnung As String)
  Dim Kommentar As Variant
  Dim Spalte, SpalteMax As Long
  Dim KWgegeben, KWgesucht As Integer
  If iKW > 0 And iJahr > 0 And iJahr = 2014 Then
   'markiere im Bereich "2014"
      
    SpalteMax = Worksheets("Tabelle1").Cells(3, 56).Column
    KWgegeben = iKW
    For Spalte = 5 To SpalteMax
         KWgesucht = Worksheets("Tabelle1").Cells(3, Spalte)
            If KWgegeben = KWgesucht Then
                Worksheets("Tabelle1").Cells(4, Spalte).Interior.ColorIndex = 5
                Set Kommentar = Worksheets("Tabelle1").Cells(4, Spalte).AddComment
                  Kommentar.Visible = True
                  Kommentar.Text Text:=Bezeichnung
                  Kommentar.Shape.LockAspectRatio = msoTrue
                  Kommentar.Shape.Height = 15
                  Kommentar.Shape.Width = 25
                  Kommentar.Shape.IncrementTop 6.75
                  Kommentar.Shape.Fill.ForeColor.SchemeColor = 5
                  Exit For
            End If
    Next Spalte
    
    End If
End Sub
Danke für die Hilfe

Bild

Betrifft: AW: Kommentar ist kein Variant...
von: Michael (migre)
Geschrieben am: 27.07.2015 15:44:19
Hallo Juli,
... sondern Dim Kommentar as Object
Du kannst dann auch nach Deiner Set-Anweisung mit einer With-Anweisung weitermachen und sparst hier etwas Schreibarbeit
With Kommentar
.Visible = True
.Text Text:= Bezeichnung
'usw usf
End With
LG
Michael

Bild

Betrifft: AW: Ergänzung...
von: Michael (migre)
Geschrieben am: 27.07.2015 15:59:48
Hallo nochmal!
Außerdem ist aus meiner Sicht der Weg über eine Objekt-Variable für den Zellkommentar gänzlich unnötig:

With Worksheets("Tabelle1").Cells(3, Spalte).AddComment
        .Visible = True
        .Text Text:="Lorem ipsum"
        .Shape.Fill.ForeColor.SchemeColor = 5
        'usw. usf.
End With
funktioniert genauso.
LG
Michael

Bild

Betrifft: AW: Ergänzung...
von: Juli
Geschrieben am: 28.07.2015 15:58:23
Vielen lieben Dank!
Also kann ich die "Deklaration" komplett weglassen?
Wie kommt das überhaupt? Brauch ich denn da gar kein Objekt/Variable dazu?
Bin grad dabei die Sprache zu lernen.
Viele Grüße
Juli

Bild

Betrifft: AW: Zur Info
von: Michael (migre)
Geschrieben am: 28.07.2015 16:27:16
Servus Juli!
Ja die Deklaration und Dimensionierung Deiner Variablen "Kommentar" kannst Du in diesem Fall gänzlich weglassen.
In Deinem ersten Beitrag hast Du die Variable "Kommentar" mit dem Datentyp "Variant" dimensioniert. Vereinfacht würde das bedeuten, dass die Variable dann, je nach übergebenem Wert, selbständig entscheidet zu welchem Datentyp (Long, Single, Integer...) sie wird. Du übergibst aber gar keinen Wert - sondern möchtest mit einem "Element aus Excel" (in dem Fall einem Zellkommentar) "etwas machen".
Insofern klappt Dein erster Code nur wenn "Kommentar" kein Datentyp sondern ein "Objekt" ist; also ein Programmelement mit dem "etwas gemacht wird". Aber...
"Füge einen Zellkommentar hinzu" ist bereits eine Methode (also eine Möglichkeit etwas mit einem Excel-Element zu machen) einer Range (in diesem Fall einer bestimmten Zelle). Daher reicht, was ich Dir in meiner Ergänzung vorgeschlagen habe: Du nutzt einfach nur die vorhandene Methode "Füge einen Zellkommentar hinzu" derjenigen Zelle, die Du eben gerade ansprichst (Cells(3,Spalte)... ).
Analog nutzt Du bspw. auch bei
Columns(1).AutoFit
die Methode "Passe meine Spaltenbreite automatisch an" für Spalte A. Auch hier willst Du mit einem Excel-Element (einer Spalte) "etwas machen" (automatische Anpassung der Breite), d.h. eine Methode nutzen.
Lg
Michael

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Fehler bei AddComment"