Opgelost Randen plaatsen om huidig gebied in een loop

Dit topic is als opgelost gemarkeerd

Tweety1

Gebruiker
Lid geworden
6 mrt 2013
Berichten
637
Onderstaande VBA heb ik gemaakt om een border te plaatsen om huidige gebied vanaf cel A1.
Nu zou ik deze graag willen uitbreiden dat hij in kolom "A" zoekt naar de tekst "Opleiding naam" en daar vervolgens in dat huidige gebied een border plaatst.

mvg
Kasper

Code:
Sub selection()

    Dim rng As Range

    Set rng = Range("A1").CurrentRegion
   
    With rng.Offset(0, 3).Resize(rng.Rows.Count, rng.Columns.Count - 3)
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    End With

End Sub
 
hallo,
CSS:
Dim c     As Range
     Set c = rng.Columns(1).Find("Opleiding naam", lookat:=xlPart) 'vind die tekst in de A-kolom
     If Not c Is Nothing Then 'gevonden
          c.Resize(, 10).Borders.Weight = xlMedium 'dan nog een boord bijzetten
     End If
 
Als ik de macro probeer te draaien krijg ik foutmelding dat object vereist (foutcode 424) is.

xlMedium heb ik vervangen door xlthin.
Wat ik uit de VBA haal is dat border wordt geplaatst van A t/m J. Hoe pas ik dit dat het alleen voor de kolommen D t/m H geldt
 
c.offset(,3).Resize(, 5).etc (vanuit A 3 naar rechts = D en dan die 5, dus D:H)
 
Heb het aangepast.
Krijg alleen nog steeds de foutmelding object vereist (foutcode 424).
Als ie de tekst heeft gevonden is de bedoeling dat ie vanuit daar de CurrentRegion de border plaatst.
En dient dit dan te herhalen.
Zie voorbeeld hoe het eruit moet zien.


Code:
Sub Border()

Dim c As Range
     Set c = rng.Columns(1).Find("Opleiding naam", LookAt:=xlPart) 'vind die tekst in de A-kolom
     If Not c Is Nothing Then 'gevonden
          c.Offset(, 3).Resize(, 5).Borders.Weight = xlThin 'dan nog een boord bijzetten
     End If
    
End Sub
 

Bijlagen

  • Voorbeeld uitkomst.xlsx
    9,7 KB · Weergaven: 2
Je voorbeeld document bevat geen VBA code.
Je gebruikt rng en dat is niet als object aangemaakt.
Vandaar de melding Object vereist.

De tekst "Opleiding naam" is ook nergens te bekennen in dat document, dus ook niet in kolom A (Columns(1)).
 
Laatst bewerkt:
Zo:
 

Bijlagen

  • Voorbeeld uitkomst.xlsm
    15,5 KB · Weergaven: 3
CSS:
Sub M_snb()
  For Each it In Columns(1).SpecialCells(2)
     it.Offset(, 4).CurrentRegion.Borders.Weight = 4
  Next
End Sub
 
Je heb helemaal gelijk. Ik heb de macro aangepast en toegevoegd aan een nieuwe voorbeeld document.
Macro loopt nu maar is nog niet helemaal wat ik voor ogen heb.

Hoe zorg ik ervoor dat de macro door het hele document heen loopt doorloopt?

Code:
Sub Border()

Dim rng As Range

  Set rng = Range("A1:A" & Blad1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row)

Dim c As Range
     Set c = rng.Columns(1).Find("Opleiding naam", LookAt:=xlPart).CurrentRegion 'vind die tekst in de A-kolom
     If Not c Is Nothing Then 'gevonden
          c.Offset(, 3).Resize(, 5).Borders.Weight = xlThin 'dan nog een boord bijzetten
     End If
    
End Sub
 

Bijlagen

  • Voorbeeld uitkomst.xlsm
    18,8 KB · Weergaven: 1
zit al in de code.
Loopt alleen anders dan verwacht als je voorbeeldbestand niet representatief is.
 
Variatie op de elegante compacte code van snb:
Code:
Sub Randen()
  For Each it In Columns(1).SpecialCells(xlCellTypeConstants)
    If it = "Opleiding naam" Then it.Offset(, 4).CurrentRegion.Borders.LineStyle = xlContinuous
  Next
End Sub

@snb
Uit nieuwsgierigheid, je gebruikt altijd de waarde in plaats van de naam van Excelconstantes, in bovenstaand voorbeeld bijvoorbeeld 3 (=xlCellTypeConstants), heeft dat voordelen?
 
@AHulpje

Dat heeft het voordeel dat de Excel VBA interpreter (compiler = bibliiotheek)) niet aangesproken hoeft te worden om de Excel term 'xlCellTypeConstants ' te vertalen in de waarde 2.
Het wordt duidelijk als je bijvoorbeeld vanuit Word of een ander programma code schrijft die wat in Excel moet doen.
Als je in zo'n macro de term 'xlCellTypeConstants' gebruikt krijg je een foutmelding, omdat deze term in de VBA-interpreter van dat programma onbekend is.
Als je de parameter '2' gebruikt loopt de macro vlekkelings door.

Pas als je in dat andere programma de Excel VBA-compiler eerst geladen hebt ('early binding') wordt de term 'xlCellTypeConstants' herkend en omgezet in de parameter 2 en vervolgens correct verwerkt.

Als je je aanleert de parameterwaarden te gebruiken lopen al je macro's die gebruik maken van VBA-bibliotheken die anders zijn dan de VBA-bibliotheek waarin je de macro schrijft probleemloos.

Het grote voordeel van VBA is, dat alle losse Officeprogramma's aan elkaar gekoppeld kunnen worden. Als je dat nooit doet, maakt het natuurlijk niets uit. Als je daarvan gebruik wil maken zonder steeeds al die bibliotheken vooraf te moeten laden (early binding), werkt het gebruik van die parameters eenvoudig, omdat je de compiler het vertaalwerk uit handen neemt.
Ik sluit niet uit, maar nooit getest, dat een macro daardoor ook sneller loopt.

Kijk voor de lol ook eens in de VBEditor bij opties, referenties. Daar zie je hoeveel VBA-bibliotheken je aan de actieve bibliotheek kunt koppelen ( en dan heb ik het nog niet eens over alle API's.)
 
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan