• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Lege regels en regelafstand een functie in VBA?

Status
Niet open voor verdere reacties.

Senso

Meubilair
Lid geworden
13 jun 2016
Berichten
9.666
Besturingssysteem
W10 Pro en W11 Pro
Office versie
Office 2007 H@S en Office 2021 Prof Plus
Ik wil de inhoud van VBA voor de zekerheid of om te bewerken in een Word-document zetten. Nu zie ik op internet veel lege regels en in Word zie je ook een grote regelafstand. Kan ik de lege regels verwijderen en de regelafstand wijzigen zonder dat dit van invloed is op de werking van de VBA.
 
Het opslaan van broncode in Word heeft geen enkele toegevoegde waarde.
Zet het in een tekst bestand, dan heb je dat probleem niet.

Een Module kan je ook vanuit het VBA project exporteren.
Dan heb je een .bas bestand die je ook met een willekeurige tekst editor kan bewerken.
 
Laatst bewerkt:
Beste Edmoor,
Gezien jouw antwoorden, "zit jij te lang in het vak." Jij weet ontzettend veel en soms gaan dan de antwoorden voorbij of zijn teveel voor het beantwoorden van de vraag. Ik zet teksten altijd in Word omdat ik daar veel beter en sneller mutaties kan doen en daar zijn de nodige tools beschikbaar. Een module exporteren weet ik. Op internet staan vaak voorbeelden met VBA en die ga ik niet direct in een Excel-document zetten maar eerst kopiëren en dan bestuderen. Doe dan een proef en kijk of het werkt.

Samengevat is jouw antwoord:
1. Lege regels hebben geen invloed en kunnen verwijderd worden
2. Regelafstand is ook niet van invloed en kan gewijzigd worden
3. Lettertype bij voorkeur Courier 10
 
De punten 1 t/m 3 zijn niet mijn woorden.
Wijzigingen op die manier in de broncode layout kunnen alleen maar problemen qua werking en leesbaarheid in de VBE tot gevolg hebben.
 
Dan zit er niets anders op dan te gaan testen. Nog één vraag wat is een "rem" in een dergelijk bestand en staat die altijd aan het begin?

Code:
[FONT=Courier New]'************************
'* HTTP://WWW.HELPMIJ.NL*
'* Some rights reserved *
'************************[/FONT]
 
Laatst bewerkt:
Ik zie geen "rem" in dat stukje.
Het zal staan voor Remark en heeft dezelfde werking als het enkele aanhalingsteken, om commentaar te plaatsen dus.
 
"als het enkele aanhalingsteken", dat bedoel ik. Waarom zijn er altijd zo veel spaties en veel verschillende afstanden bij die regels? Een paar keer inspringen kan nuttig zijn voor de leesbaarheid, maar verder zie ik het nut niet.
 
Ik heb uiteraard geen idee wat je bedoelt als je niet een stukje laat zien waarin je zoveel lege regels en spaties tegen komt.
Plaats dus eens wat en kan ik er wellicht iets over zeggen.
 
"als het enkele aanhalingsteken", dat bedoel ik. Waarom zijn er altijd zo veel spaties en veel verschillende afstanden bij die regels?
Met CTRL+Y kan je makkelijk regels verwijderenin VBE/VBA (visual basic editor)
Een paar keer inspringen kan nuttig zijn voor de leesbaarheid, maar verder zie ik het nut niet.
Ik zou niet zonder indentation/inspringen kunnen
Code:
    For i = 1 To 10
        For j = 1 To 10
            For k = 1 To 10
            Next
        Next
    Next
is veel leesbaarder dan
Code:
For i = 1 To 10
For j = 1 To 10
For k = 1 To 10
Next
Next
Next
 
Inspringpunten zijn een MUST in iedere programmeertaal.
 
Ik zou niet zonder indentation/inspringen kunnen
Is dat louter een persoonlijke opvatting? Ik raak verward als alles "springt". De vraag is natuurlijk of dat essentieel is voor de werking.
En Edmoor heeft gezegd: Wijzigingen op die manier in de broncode layout kunnen alleen maar problemen qua werking en leesbaarheid in de VBE tot gevolg hebben.

Daar moet ik dan achter zien te komen. Op de blaren zitten of leergeld betalen.

Code:
[FONT=Courier New]testPrivate Sub Worksheet_Change(ByVal Target As Range)
 
'************************
'* HTTP://WWW.***********
'* Some rights reserved *
'************************
 
Dim bereik As Range
Dim controleer As Range
 
With ActiveWorkbook.Sheets(1)
 
    Set bereik = .Range("B1:E100")
    Set controleer = Intersect(bereik, Target)
 
        If Not controleer Is Nothing Then
 
            .Range("A1") = "Laatste wijziging op"
            .Range("A2") = DateValue(Now)
            .Range("A3") = "om"
            .Range("A4") = TimeValue(Now)
 
        End If
 
End With
 
End Sub
 [/FONT]
 
Laatst bewerkt:
In dat stukje zijn de inspringpunten voor de With...End With en voor de If...End If.
Dat is qua leesbaarheid gewoon noodzakelijk.
Het gebruik van die lege regels is persoonlijk.
Ik zou dat stukje zo doen:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    '************************
    '* HTTP://WWW.***********
    '* Some rights reserved *
    '************************
    Dim bereik As Range
    Dim controleer As Range
     
    With ActiveWorkbook.Sheets(1)
        Set bereik = .Range("B1:E100")
        Set controleer = Intersect(bereik, Target)
     
        If Not controleer Is Nothing Then
            .Range("A1") = "Laatste wijziging op"
            .Range("A2") = DateValue(Now)
            .Range("A3") = "om"
            .Range("A4") = TimeValue(Now)
        End If
    End With
End Sub

NB:
Het woord test voor Private Sub in je voorbeeld hoort er uiteraard niet.
 
Laatst bewerkt:
Enkele opmerkingen
Code:
testPrivate
mag niet, verander dit in
Code:
Private

verander
Code:
        If Not controleer Is Nothing Then
        
            .Range("A1") = "Laatste wijziging op"
            .Range("A2") = DateValue(Now)
            .Range("A3") = "om"
            .Range("A4") = TimeValue(Now)
            
        End If

in
Code:
        If Not controleer Is Nothing Then
                
            Application.EnableEvents = False
 
            .Range("A1") = "Laatste wijziging op"
            .Range("A2") = DateValue(Now)
            .Range("A3") = "om"
            .Range("A4") = TimeValue(Now)
            
            Application.EnableEvents = True
 
        End If

De reden voor Application.EnableEvents is dat de code zichzelf 4 keer aanroept omdat je de inhoud van .Range("A1") tot .Range("A4") verandert (maar dat zie je pas als je met F8 stap voor stap door de code loopt :)).

De opmaak van de code ziet er goed uit en is duidelijk leesbaar, je ziet precies wat er gebeurt tussen de if en de end if
 
Laatst bewerkt:
Mooi. Bedankt voor de uitleg. Ik sla deze topic wel op. Ik denk dat het verstandig is zo te doen als Edmoor schrijft en de module te exporteren naar een .bas bestand. Moet ik nog verder proberen. Ik wilde nu graag nog onderstaande code aangepast hebben.

Code:
            .Range("B1") = "Laatst bewerkt op"
            .Range("C1") = DateValue(Now)
            .Range("D1") = TimeValue(Now)

Set bereik > maak ik groter.
De Celeigenschappen in die regels zetten op B1 is Tekst, C1 is Aangepast dd/mm/jjjj en D1 is Aangepast op uu:mm

Deze gevonden: = Format(Date, "dd-mm-yyyy") waar en hoe?
Wat is alle sheets With ActiveWorkbook.Sheets(1)
of zet je de code dan onder VBAProject ThisWorkbook
 
Laatst bewerkt:
ik gebruik "Smart Intender" voor het automatisch inspringen, de commentaar, etc
 
Je bedoelt dit?
Code:
.Range("C1") = Format(Date, "dd-mm-yyyy")
.Range("D1") = Format(time, "hh:mm")
 
Ja, ga ik gelijk proberen.

Is helaas niet goed. De eerste wordt: Datum *14/03/01 en de tijd wordt u:mm:ss AM/PM
Code:
            .Range("C1").NumberFormat = "dd-mm-yyyy"
            .Range("D1").NumberFormat = "hh:mm"
Die werkt goed. Bedankt voor de hulp.:thumb:
 
Laatst bewerkt:
Wat ik liet zien is goed, dat van jou ook.
Maar beide zijn weer afhankelijk van reeds gedane instellingen en celwaarden.
Vandaar dat we altijd om een voorbeeld documentje "zeuren".
 
De Celeigenschappen staan verkeerd. Daarom juist wil ik de Celeigenschappen automatisch aangepast hebben door de VBA en dat is gelukt. Reeds gedane instellingen weet ik niet, want het is een leeg document uitsluitend om te testen.
Het enigste wat ik doe is wat tekst typen binnen een celbereik van A2-Z1000 en dan wijzigt > Laatst bewerkt op de datum en tijd en dat klopt. Verder staat er niets in het document.
 
Volgens mij dwarrelt dit draadje alle kanten op.
Vaak zie je in code veel onnodige lege rijen.

Mijn voorkeur gaat uit om in beperkte code helemaal geen lege rijen te gebruiken en anders zoiets
Code:
Sub VenA()
  ar = ListObjects(1).DataBodyRange
  Set d = CreateObject("Scripting.Dictionary")
    
  For j = 1 To UBound(ar)
    If Not IsNumeric(ar(j, 1)) Then
      c00 = ar(j, 1)
     Else
      d(c00 & ar(j, 1)) = Array(c00, ar(j, 1))
    End If
  Next j
    
  With Cells(1, 17).Resize(, 2)
    .Value = Split("Tekst Getal")
    .Offset(1).Resize(d.Count) = Application.Index(d.items, 0, 0)
    ListObjects.Add(xlSrcRange, .CurrentRegion, , xlYes).Name = "Tbl_gesplitst"
  End With
End Sub

Eerste paar regels het declareren van variabelen of direct toewijzen.
Volgende blokje doe iets met de for next
Volgende blokje doe iets met with end with
De standaard tapWith heb ik op 2 staan omdat je anders zo'n uitgerekte code zoals in #9 krijgt.

Nb. De code heeft niet met jouw vervolgvragen te maken maar is alleen ter illustratie.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan