Borders in VBA

Status
Niet open voor verdere reacties.

willema

Gebruiker
Lid geworden
26 aug 2005
Berichten
308
Dag allemaal,

ik ben bezig de code in een VBA-project aan het optimaliseren/inkorten (oa. alle overbodige Select er uit).
Ik vermoed dat onderstaande korter kan. Alle 6 borders hebben dezelfde 4 eigenschappen. Moet dat dan echt in 6 x 4 = 24 regels (zoals de macrorecorder het doet) ?
Er bestaat een methode Borderaround, maar die neemt de binnenste verticale en horizontale randen niet mee. En ook niet de eigenschap TintAndShade (voor zover die belangrijk is).


Code:
    With Range(Cells(2, 9), Cells(LaatsteRij + 1, LaatsteKolomBladNa + 1))
        .Font.Bold = True
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).ColorIndex = 0
        .Borders(xlEdgeBottom).TintAndShade = 0
        .Borders(xlEdgeBottom).Weight = xlThin
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeTop).ColorIndex = 0
        .Borders(xlEdgeTop).TintAndShade = 0
        .Borders(xlEdgeTop).Weight = xlThin
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeLeft).ColorIndex = 0
        .Borders(xlEdgeLeft).TintAndShade = 0
        .Borders(xlEdgeLeft).Weight = xlThin
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlEdgeRight).ColorIndex = 0
        .Borders(xlEdgeRight).TintAndShade = 0
        .Borders(xlEdgeRight).Weight = xlThin
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideVertical).ColorIndex = 0
        .Borders(xlInsideVertical).TintAndShade = 0
        .Borders(xlInsideVertical).Weight = xlThin
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).ColorIndex = 0
        .Borders(xlInsideHorizontal).TintAndShade = 0
        .Borders(xlInsideHorizontal).Weight = xlThin
    End With
 
Test deze eens
Code:
Set Mr = Range(Cells(2, 9), Cells(LaatsteRij + 1, LaatsteKolomBladNa + 1))
Mr.Font.Bold = True
Mr.Borders(xlEdgeBottom).Weight = xlThin
Mr.Borders(xlEdgeTop).Weight = xlThin
Mr.Borders(xlEdgeRight).Weight = xlThin
Mr.Borders(xlEdgeLeft).Weight = xlThin
Mr.Borders(xlInsideVertical).Weight = xlThin
Mr.Borders(xlInsideHorizontal).Weight = xlThin
 
Code:
With Cells(2, 9).currentregion
    .Font.Bold = True
    with .Borders
      .LineStyle = xlContinuous
      .ColorIndex = 0
      .TintAndShade = 0
      .Weight = xlThin
    end with
end with
 
Dankjewel Jean-Paul en snb,

ik ga verder met de code van snb.
Als ik het juist zie, Jean-Paul, blijft jouw voorstel nog steeds 24 regels lang want van elke rand (x6) wordt elke eigenschap (x4) apart ingesteld.

De code van snb dus. Twee zaken zijn me nog niet duidelijk.
1. Ik snap niet goed wat currentregion doet. Mijn bereik start linksboven altijd in cel I2 en stopt onderaan rechts bij een cel waarvan rij en kolom variabelen zijn.
2. En ook: als je maar één eigenschap moet instellen moet dat dan met With of niet ?
Dus:
Code:
With Range(Cells(2, 9), Cells(LaatsteRij + 1, LaatsteKolomBladNa + 1))
     .Font.Bold = True
End With
Of:
Code:
With Range(Cells(2, 9), Cells(LaatsteRij + 1, LaatsteKolomBladNa + 1)).Font.Bold = True
Of:
Code:
Range(Cells(2, 9), Cells(LaatsteRij + 1, LaatsteKolomBladNa + 1)).Font.Bold = True

Ik heb dus nog wat te experimenteren, maar vind het tot nu toe een zeer interessante oefening om alle code (waarvan het meeste afkomstig is van de macrorecorder) onder de loep te nemen om te kijken of het niet efficienter kan.
 
Laatst bewerkt:
1. Ik snap niet goed wat currentregion doet. Mijn bereik start linksboven altijd in cel I2 en stopt onderaan rechts bij een cel waarvan rij en kolom variabelen zijn.

Daarvoor heeft de VBEditor een F1 toets ingebouwd.
 
We hebben het maar moeten doen met de informatie die we hadden, had er een excel bestand bijgevoegd dan was het misschien duidelijker geweest voor ons
 
1. Ik snap niet goed wat currentregion doet. Mijn bereik start linksboven altijd in cel I2 en stopt onderaan rechts bij een cel waarvan rij en kolom variabelen zijn.

Daarvoor heeft de VBEditor een F1 toets ingebouwd.

Hey snb,
heb het vanzelfsprekend eerst gegoogled maar begrijp het dus nog niet na het lezen van de uitleg op oa. msdn.microsoft.com hoe
Cells(2, 9).currentregion hetzelfde bereik kan aanduiden als Range(Cells(2, 9), Cells(LaatsteRij + 1, LaatsteKolomBladNa + 1)).
Geen enkele cel binnen dat bereik is op dat moment geselecteerd.
Maar ik zoek het uit.
 
We hebben het maar moeten doen met de informatie die we hadden, had er een excel bestand bijgevoegd dan was het misschien duidelijker geweest voor ons

Dag Jean-Paul,
ik heb zeer veel respect voor iedereen op dit forum die probeert antwoorden te geven op vragen van andere forumleden. Ik heb al veel geleerd van jullie allemaal!
Een bestand toevoegen doe ik in dit geval niet omdat het dan gaat over tientallen werkbladen met duizenden regels code.
Beetje overkill vind ik dat bij een eenvoudige vraag: een stuk code van een kleine dertig regels waarvan ik denk dat het korter kan.
Ik vermoed dat in zo'n geval het voldoende is om die code te citeren.
 
Hey snb,

op mijn laptop van het werk (waarop ik aan de slag ben) werkt F1 niet.
Deze boodschap verschijnt:
Help.jpg
Maar goed, ik heb hier nog een PC met een oudere Excel (2007) met wel een werkende Help, die zal wellicht niet zoveel verschillen.

Nu ondertussen wel een goede verklaring in het Nederlands gevonden van currentregion en deze begrijp ik dan ook al weer :)
De verwarring zat in de namen van variabelen die ik gekozen heb: LaatsteRij en LaatsteKolomBlad. Dit zijn waarden die werden opgetekend aan het begin van de procedure.
Op het moment dat ik de code in deze post uitvoer is de currentregion al groter geworden, maar blijf ik verder acties uitvoeren op het bereik met die startwaarden (+1).

Maar goed, ik kan je voorbeeld mits een kleine aanpassing goed gebruiken en ben je hier alweer dankbaar voor.
 
Je kunt de struktuur van het werkblad ook zo maken dat cells(2,9).currentregion altijd het correcte gebied oplevert ('structuring precedes coding').
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan