FinalRow, FinalCol Error

Status
Niet open voor verdere reacties.

KimVH

Gebruiker
Lid geworden
23 jan 2008
Berichten
10
Hallo,

Ik ben een echt leek in VBA, dus ik kan wel wat hulp gebruiken.
In mijn excel file bestaat kolom F uit percentages. Deze moet ik een bepaalde kleur geven:
onder 85: Rood en bold
boven 95: groen
De eerste rij probeer ik niet mee te rekenen, omdat dit de titel is.

Ik gebruik dit:


Code:
Sub t_Final_Row_2()
'
' colors Macro
' cijfers rood en groen
'

'
    Sheets(1).Select
        
    FinalRow = Cells(Rows.Count, 1).End(xlUp).Row - 1
    'to account for the first row of data being at row 2
    FinalCol = Cells(6, 6).End(xlToLeft).Column

    Dim MyRange As Range
    Set MyRange = Range("F2", Cells(FinalRow, FinalCol))
    For Each Cell In MyRange
        If Cell.Value < 85 Then Cell.Font.ColorIndex = 3
        If Cell.Value < 85 Then Cell.Font.Bold = True
        If Cell.Value > 95 Then Cell.Font.ColorIndex = 10
        If Cell.Value > 95 Then Cell.Font.Bold = False
    Next Cell
    Range("A1").Select
End Sub
Maar er komt steeds een error voor deze regel:
Code:
Set MyRange = Range("F2", Cells(FinalRow, FinalCol))
foutmelding: Application-defined or object-defined error

Kan iemand me helpen?

Kim
 
Laatst bewerkt door een moderator:
Declareer eens eerst je variabelen: MyRange is een Range en de 2 anderen zijn Long variabelen.

Voor de rest zie ik op het eerste gezicht geen fout in de syntax.

Wat zijn de waarden van die 2 variabelen op het moment van de fout?

Wigi
 
Dit proces zou moeten lopen van F2 tot F329.
Maar ik heb een regel (sorry ik ken die termen niet) nodig die niet aan die rijen vasthoudt, omdat die elke maand kunnen variëren in aantal.
Wat misschien help is: ik dacht de kolomlengte (= het aantal rijen) te beperken tot 1000, omdat er nooit zoveel rijen zullen zijn.

Ik gebruikte voordien een andere regel, maar dan waren er ineens ipv 329 rijen ongeveer 65000. Daarom probeerde ik iets anders, maar dat werkt blijkbaar ook niet zo goed.

Ik moet even te situatie schetsen, een week geleden had ik hier nog nooit mee gewerkt, ik heb geen training gekregen en zoek het allemaal een beetje uit via internet. Dus mijn kennis is nog minder als die van een leek, als je begrijpt wat ik bedoel.

Kan je me helpen?
 
Dit proces zou moeten lopen van F2 tot F329.
Maar ik heb een regel (sorry ik ken die termen niet) nodig die niet aan die rijen vasthoudt, omdat die elke maand kunnen variëren in aantal.
Wat misschien help is: ik dacht de kolomlengte (= het aantal rijen) te beperken tot 1000, omdat er nooit zoveel rijen zullen zijn.

Ik gebruikte voordien een andere regel, maar dan waren er ineens ipv 329 rijen ongeveer 65000. Daarom probeerde ik iets anders, maar dat werkt blijkbaar ook niet zo goed.

Ik moet even te situatie schetsen, een week geleden had ik hier nog nooit mee gewerkt, ik heb geen training gekregen en zoek het allemaal een beetje uit via internet. Dus mijn kennis is nog minder als die van een leek, als je begrijpt wat ik bedoel.

Kan je me helpen?


Ik had zoiets als onderstaand in gedachten:
Code:
Sub Test()

'Eerst een naam toevoegen aan kolom 'F' (bijvoorbeeld KPercentage.
'Dit doe je door het volgende in het Excel-werkblad:
'1) Selecteer de volledige kolom 'F' --> 2) Vervolgens menu 'Invoegen' aanklikken en 'Naam' aanklikken.
'3) Vervolgens 'Defineren' aanklikken en vervolgens een naam invullen (bijvoorbeeld KPercentage).
'De 'naam' zal altijd naar deze cellen verwijzen ongeacht of je nu een kolom ervoor invoegd. Dus stel je voegt
'voor kolom 'F' een kolom in (waardoor 'F' --> 'G' wordt, dan blijft de VBA-code nog steeds goed werken.

'In deze code ga uit uit van het volgende: het werkblad is het eerste werkblad in Excel (bijvoorbeeld Blad1).

'Hieronder volgt de code voor in VBA.

With Worksheets("Blad1").Range("KPercentage")
For Each cell In Range("KPercentage")
    If Not cell.Value = "" Then
        If cell.Value < "0,85" Then   'Waarde is kleiner als 85%
            cell.Select
            With Selection.Font
                .FontStyle = "Vet"
            End With
            With Selection.Interior
                .ColorIndex = 3
            End With
        ElseIf cell.Value > "0,95" Then 'Waarde is groter als 95%
            cell.Select
            With Selection.Interior
                .ColorIndex = 4
            End With
            
        End If
    End If
Next cell
End With

End Sub

Let op dat je de celeigenschappen van kolom 'F' insteld in percentages anders moet je i.p.v. 0,85 --> 85 invullen in de code en hetzelfde voor 95.

Hoor het graag.
 
Bedankt!!! Eindelijk werkt het.
Ik heb een combinatie gedaan van jouw voorstel en mijn vorige probeersels.
Dit is het resultaat:


Code:
Sub f_Green_Red()
'
' colors Macro
' cijfers rood en groen
'

'
    With Worksheets("Sheet1").Range("F:F")
    For Each cell In Range("F:F")
        If Not cell.Value = "" Then
            If cell.Value < 85 Then cell.Font.ColorIndex = 3
            If cell.Value < 85 Then cell.Font.Bold = True
            If cell.Value > 95 Then cell.Font.ColorIndex = 10
            If cell.Value > 95 Then cell.Font.Bold = False
        End If
    Next cell
    End With
    Range("A1").Select
End Sub
 
Laatst bewerkt door een moderator:
Kim,

zet je code eens tussen code tags aub, dan wordt het leesbaar. Klik op het # icoontje daarvoor.

Dit is verbeterde
Code:
Sub s()

Dim cell As Range

With cell
    For Each cell In Range("F:F")
        If Not .Value = "" Then
            If .Value < 85 Then
                .Font.ColorIndex = 3
                .Font.Bold = True
            ElseIf .Value > 95 Then
                .Font.ColorIndex = 10
                .Font.Bold = False
            End If
        End If
    Next cell
End With

End Sub

En loop niet door de hele kolom F, dat is niet nodig.

Wigi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan