Leesbaarheid DIM

Status
Niet open voor verdere reacties.
Ik gebruik Calibri (Lettergrootte 9). Deze doet hetzelfde. Ik heb overigens al met meerdere lettertypes gespeeld, maar niet allen vind ik even netjes. Dus dan zit ik vast aan een voorloopspatie.

Ik heb het moment van voorloopspatie verplaatst. Op het werkblad: Opzet is deze nu meteen zonder voorloopspatie. Hierna neem ik deze waarde enkel weer met een voorloopspatie over op het formulier alwaar ik de artikelen invoer. Enkel zodra ik het formulier met de klantgegevens opsla en wegschrijf in het werkblad, dan zie ik de voorloopspaties alleen nog bij de klantgegevens en niet meer bij het bestelnummer. Toch wil ik deze ook graag wegwerken en ik weet bijna zeker dat dit wel mogelijk is om dat met een simpele code te doen. Anders blijf ik dimmen.

Let op alle labels dienen een spatie aan de voorzijde te hebben. Deze krijgen zij al, maar zodra ik de cellen in het werkblad Opzet laat vullen dan komen daar ook de spaties in. Dit is ook niet de bedoeling. Al is het minder storend daar met deze gegevens geen bestanden worden opgeslagen. Toch zou ik hier wel een oplossing voor willen hebben. Wel dienen de voorloopspaties weer in een ander userform terug te komen. Hier heb ik dan al een simpel en veelvuldig gebruikte oplossing voor: LabelXX = " " & Range("B4").

Ik zit er aan te denken om onderstaande code aan te passen, maar tegelijk heb ik daar weer mijn twijfels over en word ik door alle informatie afgeleid. Ook dit zou naar mijn idee via DIM kunnen gaan.

Code:
For Each ctl In Me.Controls
                If TypeName(ctl) = "Label" And Right(ctl.Name, 13) = "_Laatste_Show" Then ctl.Caption = vbNullString
           Next

De volledige code voor userform: Frm_Invoer_Gegevens is als volgt:

Code:
Private Sub UserForm_Initialize()
    
    Select Case Sheets("Besteloverzicht").Cells(Rows.Count, 1).End(xlUp)
        Case Is = "0"
            Label14 = " M" & Year(Date) & " - " & Format(("1"), "0000")
        Case Is > vbNullString
            Dim sq
                sq = Split(Sheets("Besteloverzicht").Cells(Rows.Count, 1).End(xlUp), " - ")
                Label14 = " " & sq(0) & " - " & Format(sq(1) + 1, "0000")
    End Select
    
    ComboBox1.RowSource = "Bedrijfsnaam"
    ComboBox1.SetFocus

End Sub

Private Sub ComboBox1_Change()

    On Error Resume Next

    Label4 = " " & Application.WorksheetFunction.VLookup(ComboBox1, Sheets("Debiteuren").Range("A4:U9000"), 2, False)
    Label6 = " " & Application.WorksheetFunction.VLookup(ComboBox1, Sheets("Debiteuren").Range("A4:U9000"), 3, False)
    Label8 = " " & Application.WorksheetFunction.VLookup(ComboBox1, Sheets("Debiteuren").Range("A4:U9000"), 4, False)
    Label12 = " " & Application.WorksheetFunction.VLookup(ComboBox1, Sheets("Debiteuren").Range("A4:U9000"), 11, False)
    Label10 = " " & Application.WorksheetFunction.VLookup(ComboBox1, Sheets("Debiteuren").Range("A4:U9000"), 8, False)
    
    TextBox1.SetFocus

End Sub

Private Sub Cb_Invoer_Artikelen_Click()
'Knop Invoeren gegevens op werkblad Opzet

    Dim NBO As String 'NBO is Nummer Besteloverzicht
            Dim TrimString As String
            NBO = Label14
            TrimString = LTrim(NBO)
              
    With Sheets("Opzet")
        .Unprotect "1235"
        Range("B3") = LTrim(NBO)                        'Nummer besteloverzicht (DIM NBO)
        Range("B5") = Date                              'Datum (dd-mm-jjjj)
        Range("B6") = Format(Time, "hh:mm") & "  UUR"   'Tijd (hh:mm:ss)
        Range("C10") = " " & ComboBox1                  'Bedrijfsnaam
        Range("C11") = Label4                           'straat
        Range("C12") = Label6                           'postcode
        Range("C13") = Label8                           'plaats
        Range("C14") = Label12                          'Telefoonnummer
        Range("C15") = Label10                          'Klantnummer
        Range("C17") = " " & TextBox1                   'Referentie
        .Protect "1235"
    End With
        
        Unload Me
        Frm_Invoer_Artikelen.Show
        

End Sub

Private Sub Cb_Annuleren_Click()
'Knop
    Unload Me

End Sub

Private Sub InvullingKlant()

    
    
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then Cancel = True
    
End Sub
 
Laatst bewerkt:
Waar ik voor mijn gevoel op uitkwam is toch anders dan ik had verwacht. Echter de code is vrij lang.

Kan dit ook korter?

Code:
Private Sub Cb_Invoer_Artikelen_Click()
'Knop Invoeren gegevens op werkblad Opzet

    Dim NBO As String 'NBO is Nummer Besteloverzicht
    Dim STR As String 'STR is Straat
    Dim PSC As String 'PSC is Postcode
    Dim PLS As String 'PLS is Plaats
    Dim TEL As String 'TEL is Telefoonnummer
    Dim KNR As String 'KNR is Klantnummer
    Dim TrimString As String
    NBO = Label14
    STR = Label4
    PSC = Label6
    PLS = Label8
    TEL = Label12
    KNR = Label10
    TrimString = LTrim(NBO)
    TrimString = LTrim(STR)
    TrimString = LTrim(PSC)
    TrimString = LTrim(PLS)
    TrimString = LTrim(TEL)
    TrimString = LTrim(KNR)
      
    With Sheets("Opzet")
        .Unprotect "1235"
        Range("B3") = LTrim(NBO)                        'Nummer besteloverzicht
        Range("B5") = Date                              'Datum (dd-mm-jjjj)
        Range("B6") = Format(Time, "hh:mm") & "  UUR"   'Tijd (hh:mm:ss)
        Range("C10") = ComboBox1                        'Bedrijfsnaam
        Range("C11") = LTrim(STR)                       'Straat
        Range("C12") = LTrim(PSC)                       'Postcode
        Range("C13") = LTrim(PLS)                       'Plaats
        Range("C14") = LTrim(TEL)                       'Telefoonnummer
        Range("C15") = LTrim(KNR)                       'Klantnummer
        Range("C17") = TextBox1                         'Referentie
        .Protect "1235"
    End With
           
        Unload Me
        Frm_Invoer_Artikelen.Show
        

End Sub
 
Dit :
Code:
    TrimString = LTrim(NBO)
    TrimString = LTrim(STR)
    TrimString = LTrim(PSC)
    TrimString = LTrim(PLS)
    TrimString = LTrim(TEL)
    TrimString = LTrim(KNR)

Doet helemaal niets. Bovendien herhaal je de functionaliteit verderop nog eens. Makkelijke besparing dus ;)
 
Oke en dus kan dit gewoon weg begrijp ik uit jouw verhaal? Maar dan vraag ik mij even af. DIM Trimstring as String. Moet dit dan wel blijven staan of moet deze er ook uit?
 
Ik heb het nu zo gedaan. Ook als ik de DIM Trimstring as String verwijder (in dit geval uitschakel), dan doet de code het ook nog.

Domme vraag wellicht, maar is LTrim opzicht dan al een "opdracht".

Code:
Private Sub Cb_Invoer_Artikelen_Click()
'Knop Invoeren gegevens op werkblad Opzet

    Dim NBO As String 'NBO is Nummer Besteloverzicht
    Dim STR As String 'STR is Straat
    Dim PSC As String 'PSC is Postcode
    Dim PLS As String 'PLS is Plaats
    Dim TEL As String 'TEL is Telefoonnummer
    Dim KNR As String 'KNR is Klantnummer
    'Dim TrimString As String
    NBO = Label14
    STR = Label4
    PSC = Label6
    PLS = Label8
    TEL = Label12
    KNR = Label10
      
    With Sheets("Opzet")
        .Unprotect "1235"
        Range("B3") = LTrim(NBO)                        'Nummer besteloverzicht
        Range("B5") = Date                              'Datum (dd-mm-jjjj)
        Range("B6") = Format(Time, "hh:mm") & "  UUR"   'Tijd (hh:mm:ss)
        Range("C10") = ComboBox1                        'Bedrijfsnaam
        Range("C11") = LTrim(STR)                       'Straat
        Range("C12") = LTrim(PSC)                       'Postcode
        Range("C13") = LTrim(PLS)                       'Plaats
        Range("C14") = LTrim(TEL)                       'Telefoonnummer
        Range("C15") = LTrim(KNR)                       'Klantnummer
        Range("C17") = TextBox1                         'Referentie
        .Protect "1235"
    End With
           
        Unload Me
        Frm_Invoer_Artikelen.Show
        

End Sub
 
Laatst bewerkt:
LTRIM "hoor" je zo te gebruiken in jouw geval:
Code:
test = LTRIM(test)

In je eerste code stop je de getrimde string in trimstring en vervolgens gooi je trimstring weer weg. Doet dus helemaal niets
 
Wampier. Sorry voor mijn late reactie.

Als ik dat stukje: Dim TrimString As String verwijder. Klopt het dan verder wel in de rest van de code? Ik had deze al uitgeschakeld door er een apostrof voor te zetten.

Verder en waar het ook over ging. Ik heb nog meer sub's met meerdere Dim's. Alleen hier staan de Dim's en de variabele door de code heen op het moment dat ik het ga gebruiken. Wat is nu beter vraag ik mij af. Alle Dim's en de gegeven variabele per sub bovenaan en verder alleen de variabele in de sub gebruiken of gewoon, wat ik al deed, makkelijk door de code heen?

En wat ik mij ook afvraag. Als ik de Dim 1 keer heb gedeclareerd in een userform. Bijvoorbeeld in Private Sub UserForm_Initialize. Kan ik dan telkens de variabele blijven gebruiken over heel het userform in alle sub's? En zo ja... tot waar kan ik deze dan gebruiken.

Sorry voor mijn vele vragen, maar ik ben er nu meteen een beetje mee aan het experimenteren en kom er met Help(F1) niet helemaal uit.
 
Laatst bewerkt:
En dan dit:

Code:
Dim LNBO 'Laatste Nummer Besteloverzicht
    LNBO = Split(Sheets("Besteloverzicht").Cells(Rows.Count, 1).End(xlUp), " - ")

Wat moet hier achter LNBO... As Long werkt niet, As Worksheet werkt niet.....

Met As Long krijg ik iets over een matrix.. en met As Worksheet krijg ik een fout in het oproepen van een userform.

Zet ik er niets achter dan werkt het naar behoren??

Deze foutmeldingen krijg ik nu omdat ik Option Explicit heb toegevoegd....
 
Laatst bewerkt:
Die foutmelding krijg je niet omdat je Option Explicit hebt gebruik maar omdat de compiler door het gebruik van die Option Explicit op tijd heeft geconstateerd dat er ergens in de code iets met een variabele niet in orde is. In dit geval inderdaad de variabele LNBO. Deze is gedeclareerd zonder een datatype op te geven en is daarmee een variabele van het type Variant geworden.

Daarnaast gebruik je de functie Split() om hem te vullen en dat kan alleen met een matrix (Array). Je probeert dus een Array te vullen met tekst en daarom moet de variabele LNBO als volgt worden gedeclareerd:

Dim LNBO() As String
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan