Excel/VBA - cell comments

Status
Niet open voor verdere reacties.

MauriceSmit

Gebruiker
Lid geworden
1 jul 2008
Berichten
168
Hoi!

Ik probeer in een excel template een assumptie log bij te voegen. In mijn werkmap wil ik dit op de volgende manier graag terug zien:
1. Een aparte sheet met een opsomming van alle assumpties
2. Op het invoerveld waar de gebruiker een assumptie over wil maken, moet deze in het 'comment' van deze cell komen.

Het toevoegen van assumpties verloopt via een simpel formulier, waarop in ieder geval de omschrijving van deze assumptie wordt geplaats; en tevens wie het heeft opgevoerd (naam van de gebruiker) en een eventuele referentie. Indien er al een comment in het veld staat, moet er worden gecontroleerd of deze in het assumptie log staat (zo ja, wordt het formulier geladen met de juiste gegevens en kan deze worden aangepast; zo nee, gaat het om een algemeen comment en geen assumptie en zal het systeem je vragen of je het huidige comment wilt overschrijven).

Enfin, ik loop echter vast op het opvragen van informatie van een 'activecell'; achter het formulier . De code die wordt gebruikt tijdens het laden van het formulier:

Code:
Public Sub UserForm_Activate() 
    Dim RRow As Integer 
     
     'check if there is already a comment in the field
    If ActiveCell.Comment.Text <> "" Then 
        With Sheets("Assumptions") 
            RRow = 8 
             'find comment from assumptions list
            Do Until RRow = .Range("A1") 'this cell contains the last used row of the assumption sheet
                If CInt(Left(ActiveCell.Comment, InStr(0, ActiveCell.Comment, ":"))) = .Cells(RRow, 3) Then 
                    Me.Input_Description = .Cells(RRow, 5) 'comment description
                    Me.Input_Owner = .Cells(RRow, 6) 'comment owner
                    Me.Input_Reference = .Cells(RRow, 7) 'comment reference
                    Exit Do 
                End If 
                RRow = RRow + 1 
            Loop 
             'comment not found in Assumptions list, but there IS already a comment
             'in the selected cell; confirm if it may be overwritten
            If MsgBox("Overwrite existing comment?", vbYesNo) = vbNo Then 
                Me.Hide 
            End If 
        End With 
    End If 
End Sub

Hij geeft een foutmelding op de regel:
If ActiveCell.Comment.Text <> "" Then (code 91, block variable / with niet ingesteld)

Hoe kan ik deze het beste verhlelpen?

Gr. Maurice

PS
Overige code:
Code:
Private Sub Btn_Add_Click() 
    Dim Assumption_Nr As Integer 
    Dim CText As String 
     
    With Sheets("Assumptions") 
        Assumption_Nr = .Range("A1") - 7 
        .Rows(.Range("A1")).Insert xlUp 
        .Cells(.Range("A1"), 3) = Assumption_Nr 
        .Cells(.Range("A1"), 4) = Now() 
        .Cells(.Range("A1"), 5) = Me.Input_Description 
        .Cells(.Range("A1"), 5) = Me.Input_Owner 
        .Cells(.Range("A1"), 5) = Me.Input_Reference 
    End With 
     
    With ActiveCell 
        CText = Assumption_Nr & ": " & Me.Input_Description & " (" & Me.Input_Owner & ")" 
        .AddComment CText 
    End With 
End Sub 
 
 
Private Sub Btn_Cancel_Click() 
    Me.Hide 
End Sub 
 
Private Sub Btn_Remove_Click() 
    If ActiveCell.Comment.Text <> "" Then 
        ActiveCell.ClearComments 
    End If 
    Me.Hide 
End Sub
 
Je vraagt de inhoud van Activecell.Comment.Text op, maar bestaat Activecell.Comment wel?

Check daar eerst op.
 
goede vraag; ik heb mijn twijfels (alhoewel de .comment in the pulldown staat na het commande activecell) echter ben ik bang dat de fout resulteerd vanuit het feit dat ik het probeer vanuit een formulier. De (soortgelijke) code werkt wel als ik deze wil uitvoeren vanachter het sheet-object. Ik vraag me dus af of 'activecell' achter het formulier wel bekend is. Zo niet, moet ik dan 1 global variable aanmaken en voordat het formulier geopend wordt, hier het 'activesheet' en 'activecell' in wegschrijven? Het is een workaround; maar het zou ook nog een optie zijn..
 
gebruik

sheets(1).ActiveCell.Comment.Text

in plaats van

ActiveCell.Comment.Text
 
gebruik

sheets(1).ActiveCell.Comment.Text

in plaats van

ActiveCell.Comment.Text

goede optie echter is "Sheets(1)" een variabele; men zou op ieder sheet de functie moeten kunnen gebruiken en met deze optie zal de macro ten alle tijde naar sheet(1) refereren.
 
sheets(1) is geen variabele maar een object.

Als activecell.comment.text een foutmelding geeft is er geen werkblad geaktiveerd.
Daar zul je toch eerst voor moeten zorgen.
activesheet.activecell.comment.text is dan nl. ook geen oplossing.
 
Klopt; ik maak zelf een taalfout ^^ het is geen variabele, maar de sheet is variabel. ik begrijp wel wat je bedoeld mbt het wel/niet actief zijn van een sheet. Maar ik ben nu op het volgende gekomen:

Als ik in een cel een comment zet (handmatig) en maak gebruik van de onderstaande simpele code in een willekeurige module krijg ik netjes te zien in een msgbox wat er in het comment'field staat:

Code:
Sub test()
    With ActiveCell
        If .Comment.Text <> "" Then
            MsgBox .Comment.Text
        End If
    End With
End Sub

zodra de cel geen comment heeft; geeft hij de bekende foutmelding; hij heeft dus problemen met de eigenschap 'comment' als deze niet gevuld is. Ik moet dus eigenlijk weten wat de functie is om te controleren of er uberhaupt een comment aanwezig is (zoals bijvoorbeeld the .hasformula eigenschap)

(((ik kom er wel... :cool:)))
 
daar is volgens mij geen methode of funktie voor.

doe het daarom zo:

Code:
on error resume next
c0=activesheet.activecell.comment.text
on error goto 0
if err.number= 0 then
 ' als de cel al een opmerking (comment) bevat.......
end if
err.clear
 
Opgelost inderdaad via de Errorhandler... Niet de mooiste oplossing; maar het functioneerd naar behoren.

Bedankt voor jullie input!
 
Dit is inderdaad de manier van werken voor cell comments.
 
Anders geformuleerd:

Hieruit blijkt weer eens de inconsistentie in de VBA-programmeertaal.
Voor sommige objecten bestaat er een ...exists methode, of een ....count eigenschap, voor andere ontbreekt die.
 
Maurice, kan je de vraag nog even op opgelost zetten aub?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan