Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Excel-beperking mbt datum pré 1900 wegwerken met VBA  (gelezen 244831 keer)

0 leden en 6 gasten bekijken dit topic.

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #120 Gepost op: 13 januari 2019, 21:55:49 »
Hey pitufo,

Geen probleem ivm het wachten, privéleven gaat voor.  ;)

Ik ben nog wat blijven knutselen aan de code en heb deze eindelijk werkende gekregen, hopelijk op de
juiste wijze gecodeerd maar de code doet alleszins wat ze hoort te doen.

Volgende code heb ik nu dus toegevoegd onder 'cmd_bewerken' :
aantal_boeken = 25
   For i = 1 To aantal_boeken
   Set ilb_blad = Sheets("IdxLst_Bk" & Format(i, "00"))
   p_kolom = i * 2
   If WorksheetFunction.CountIf(ilb_blad.Columns(1), nr) = True Then
        i_rij = WorksheetFunction.Match(nr, ilb_blad.Columns(1), 0)
    End If
   If Bkn.Cells(bkn_rij, p_kolom) = "P" Then
       Invoer("ChckB_Boek" & i).Value = True
       Invoer("TxtB_Boek" & i).Enabled = True
   Else
       Invoer("ChckB_Boek" & i).Value = False
       Invoer("TxtB_Boek" & i).Enabled = False
   End If
   If Bkn.Cells(bkn_rij, p_kolom + 1) = "-" Then
       Invoer("TxtB_Boek" & i) = ""
   
    Else
        Invoer("TxtB_Boek" & i) = Bkn.Cells(bkn_rij, p_kolom + 1)
   End If
Next i

Dus, als je denkt dat de code zo goed genoeg is dan hou ik deze er definitief in en kuis ik
het gehele codeblad een grondig op.
Geniet van je driedaagse en ik hoor je dan nog wel tegen het einde van komende week.
En als ik er echt niet uit kom kan ik altijd op het forum terecht met mijn vragen.

Vriendelijke en dankbare groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #121 Gepost op: 15 januari 2019, 23:11:58 »
Hey pitufo,

Hopelijk valt jouw driedaagse goed mee?  :)

Ik heb ondertussen niet stilgezeten met de codering, heb nog enkele kleine aanpassingen gemaakt, nog enkele kleine foutjes opgelost, hier en daar een regeltje code toegevoegd, enz…
En terwijl ik dit aan het doen was en nog enkele testjes aan het doen was bedacht ik dat ik eigenlijk nog een extra werkblad nodig had om de indexlijsten naartoe te kopiëren ter voorbereiding van het overnemen van de lijsten in mijn boeken want deze dienen eerst gesorteerd te zijn maar dan ook onmiddellijk in het juiste formaat en met de juiste opmaak te staan alvorens ik ze kan overzetten.
Dus bedacht ik dat het wel handiger zou zijn om dit ook, mits een opdrachtknopje, ook door VBA te laten doen.
Ik ben op een ideetje gekomen om op het extra werkblad (waar de handelingen moeten gebeuren) een userform vast te zetten met een keuzelijst en een opdrachtknop.
De keuzelijst om het juiste werkblad te kiezen en dan de opdrachtknop om de handelingen voor de lijst op dat werkblad uit te voeren.
Het extra werkblad, de userform met de keuzelijst & opdrachtknop en de keuzelijst heb ik reeds gemaakt. Ook het vastzetten van het userform op het extra werkblad heb ik reeds in orde gebracht, enz…
Maar nu…. In grote lijnen weet ik welke code ik moet gebruiken alsook de opbouw ervan (min of meer) maar waar ik nu niet helemaal uit geraak is waar juist ik welke code moet gaan plaatsen.
Voor de handelingen met de gekozen lijst te laten uitvoeren had ik in gedachten om dit te doen volgens hetzelfde principe zoals we dat gedaan hebben voor de invoer van de gegevens in de indexlijsten maar ik weet niet of dit wel de juiste werkwijze is bij een combobox.
Ik ga even proberen te schetsen hoe het in zijn werk zou moeten gaan : 

Het extra werkblad (“PrepCopytoWord”) kiezen, userform word automatisch getoond (dit is al in orde) en de keuzelijst dient de 25 lijsten te bevatten (dit is ook reeds in orde).
Men kiest de benodigde indexlijst (“IdxLst_Bk**”) en klikt op uitvoeren.
Uitvoeren :
-   Kolommen (“B:I”) van de gekozen lijst kopiëren naar werkblad(“PrepCopytoWord”) in cel A1
-   Vervolgens in werkblad (“PrepCopytoWord”) de juiste opmaak toepassen (zie bijgevoegde code)

Sub CopytoWord()
'
' CopytoWord Macro
'   Is de code om de CopytoWord van de IdxLst_Bk** lijsten voor te bereiden dmv tussenstap

'
    Range("B2:I50").Select
    Selection.Copy
    Sheets("CopytoWord").Select
    Range("A1").Select
    ActiveSheet.Paste
    Sheets("CopytoWord").Cells.EntireColumn.AutoFit

End Sub
Sub Sort()
'
' Sort Macro
'   Is de code om de selectie te sorteren en reeds in de juise layout te zetten

'
    Columns("A:H").Select
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("CopytoWord").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("CopytoWord").Sort.SortFields.Add Key:=Range( _
        "A1:A49"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("CopytoWord").Sort.SortFields.Add Key:=Range( _
        "B1:B49"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("CopytoWord").Sort.SortFields.Add Key:=Range( _
        "D1:D49"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("CopytoWord").Sort
        .SetRange Range("A1:H49")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
   
    End With
   
    Columns("A:H").Select
    With Selection.Font
        .Name = "Gabriola"
        .Size = 16
        .Superscript = True
    End With
    With Selection
        .VerticalAlignment = xlTop
    End With
    Cells.Select
    Selection.RowHeight = 18
End Sub
(deze code kan vermoedelijk misschien nog korter en/of efficiënter…)

Waar ik dus vastzit is met het correct koppelen van de gemaakte keuze in de keuzelijst met de opdrachtknop…


Verder heb ik nog een klein bugje gevonden in het werkblad (“leeftijdsberekeningen”).
Namelijk, wanneer de geboortedatum niet word ingegeven word bij ‘leeftijd vandaag’ als waarde de leeftijd weergegeven alsof de geboortedatum 01-01-1900 is en in alle andere kolommen word als
waarde “0 jaar, 0 maand en 0 dagen” weergegeven.
Echter, wanneer geen geboortedatum word weergegeven dan zouden deze cellen “leeg” dienen te blijven. Te meer omdat het doel van het werkblad (“Leeftijdsberekeningen”) zuiver als ‘hulp-werkblad’ diende om deze waarden automatisch te laten invullen in de ‘Personenfiche’ om te voorkomen dat daar ellenlange formules zouden moeten geplaatst worden.
Die formules aanpassen op zich vormt voor mij geen problemen maar wat de waarde van de blanco geboortedatum betreft heb ik geen idee hoe ik deze moet oplossen, vooral omwille van die speciale “p_dif”-functie.
Want zo heb ik de formules op de personenfiches bij de datums ook reeds aangepast omdat daar steeds als waarde “0” werd weergegeven als een bepaalde datum niet ingevuld was terwijl dit dan ook ‘leeg’ hoort te zijn.


Maar goed, ik ga nu in afwachting nog een beetje verder knutselen aan dat andere projectje ;D.


Vriendelijke en dankbare groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #122 Gepost op: 18 januari 2019, 10:54:17 »
Hey BlackDevil,

Citaat
Geen probleem ivm het wachten, privéleven gaat voor.
Hopelijk valt jouw driedaagse goed mee?
Oei, ik vrees dat je mijn uitspraak
Citaat
daarna wacht mij een uiterst belastende driedaagse in mijn job
meer dan een beetje verkeerd hebt geïnterpreteerd : ik heb op het werk 3 LOODzware dagen achter de rug, boordevol onderhandelingen, opleidingen (geven en krijgen), vba- en sql-demonstraties (enkel geven…), enz., alles in bijzijn van een pakket hiërarchische toplui.

Heb serieus moeten ‘terugbladeren’ in je laatste posts en e-mail om de openstaande probleempjes te verzamelen. Haal ze vooral even terug aan mocht ik er over het hoofd hebben gezien !

En ja, ik kan je nu natuurlijk ook geen bijlage meer bezorgen vermits we beiden op een vroeger exemplaar onze eigen weg zijn gegaan, dus op goed geluk wat antwoordjes :

Citaat
Citaat
Bovendien zou ik die laatste regel tussen If en Else opnemen.
Bedoel je een nieuw If-statement dan?
want het opnemen in dat van de ChckB_Boek gaat niet werken hé aangezien de TxtB_Boek ook leeg kan
zijn indien ChckB_Boek aangevinkt is.
Toch wel, hoor, we zullen er wel voor zorgen dat het gaat werken.

(Tussen haakjes : ik vond in je code ook “Set ilb_blad = Sheets("IdxLst_Bk" & Format(i, "00"))”. Dat is overbodig, want je doet verder niets meer met ‘ilb_blad’. Enkel gegevens uit Boeken naar Invoer overbrengen is hier het doel. Ook “i_rij = WorksheetFunction.Match(nr, ilb_blad.Columns(1), 0))” is daarom overbodig. Al wat je nodig hebt is bkn_rij, en die is al eerder bepaald)

Eerst even de logica bepalen : als je “Bewerken” aanklikt is je formulier nog niet geladen. Elke keer dat het wel geladen wordt zal het enkel die zaken bevatten die in het ontwerp zijn voorzien. Daar zijn alle checkboxen uitgevinkt, alle textboxen leeg én disabled. Alles wat we in Boeken vinden en daarmee overeenstemt moeten we vooral niet opnieuw gaan doen.
Wat we kunnen aantreffen in Boeken : in de linker kolom P of ‘-‘, in de rechter ‘-‘ of een paginanummer.
Dus : als in de linker kolom ‘-‘ staat moeten we niets doen.
Alleen als er P staat is actie nodig : chkbox moet aangevinkt worden en textbox enabled, en als rechts ‘-‘ staat blijft textbox leeg, anders nemen we het paginanummer over.
In vba-taal :
aantal_boeken = 25
For i = 1 To aantal_boeken
    p_kolom = i * 2
    If Bkn.Cells(bkn_rij, p_kolom) = "P" Then
        Invoer("ChckB_Boek" & i).Value = True
        Invoer("TxtB_Boek" & i).Enabled = True
        If Bkn.Cells(bkn_rij, p_kolom + 1) <> "-" Then
            Invoer("TxtB_Boek" & i).Value = Bkn.Cells(bkn_rij, p_kolom + 1)
        End If
    End If
Next i
Met de code in je volgende post zat je dus goed, maar deze hierboven leest prettiger en volstaat.

Citaat
Want zo heb ik de formules op de personenfiches bij de datums ook reeds aangepast omdat daar steeds als waarde “0” werd weergegeven als een bepaalde datum niet ingevuld was terwijl dit dan ook ‘leeg’ hoort te zijn.
Dat was mij ook al opgevallen, en ik had het in mijn ‘interne’ versie ook al opgelost toen ik vernam dat je zelf volop aan het coderen was.

Citaat
Die formules aanpassen op zich vormt voor mij geen problemen maar wat de waarde van de blanco geboortedatum betreft heb ik geen idee hoe ik deze moet oplossen, vooral omwille van die speciale “p_dif”-functie.
Heel wat posts geleden hebben we een verandering moeten aanbrengen, al weet ik echt niet meer waarom, waardoor alle lege cellen als 0 werden gezien, en dat werd niet meer zoals tevoren opgevangen met “als.fout”.
Ik zou helemaal vooraan in de “p-dif”-functie zetten (om de wiskundige 100% zeker te zijn) :
If d1 = "" Or d2 = "" Or d1 = 0 Or d2 = 0 Then
    p_dif = "": Exit Function
End If
Een andere kleine aanpassing is ook een goed idee (zij het enkel om cosmetische redenen) :
waar (bijna op het einde) “IF dagen > 1” staat kan dit beter worden “IF dagen <> 1”

Citaat
Ik heb ook de wijze om de formulieren op te roepen gewijzigd naar een mini-formuliertje maar dat dient ook nog op punt gezet te worden.
Citaat
Het extra werkblad, de userform met de keuzelijst & opdrachtknop en de keuzelijst heb ik reeds gemaakt. Ook het vastzetten van het userform op het extra werkblad heb ik reeds in orde gebracht, enz…
Ik heb uit alle macht geprobeerd om een meerwaarde te ontdekken in deze beide nieuwe formulieren, maar zonder resultaat. Als experiment is er uiteraard niets mis mee, maar naar mijn gevoel is het er een beetje ‘over’. Vermoedelijk heb je ondertussen ook al ondervonden dat je niet één klik hebt gewonnen ?
Citaat
maar telkens ik elders in het bestand wil werken moet ik het mini-form afsluiten en als ik het dan erna weer
wil gebruiken moet ik gewoon in het werkblad "Start" ergens klikken om het weer te voorschijn te halen
Dus als je hier toch wil aan vasthouden kunnen we dat natuurlijk wat ordentelijker laten verlopen.

Voor je allernieuwste extra werkblad zie ik inderdaad een veel simpeler manier, maar moet straks weer de deur uit, dus die gaat even in de koelkast.

Misschien toch een goed idee om, eens je deze zaken hebt verwerkt, mij nog eens de laatste versie te bezorgen ?

Groetjes,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #123 Gepost op: 18 januari 2019, 19:58:24 »
Hey pitufo,

Het mini-userform op het werkblad 'START' en het mini-userform op het werkblad "PrepCopytoWord" zijn louter
om 'optische' redenen (door mijn aandoening zijn ook mijn ogen aangetast) en omdat ik het mooier en efficiënter werken vind.
Zeker op het werkblad "PrepCopytoWord" wou ik de keuzelijst en opdrachtknop zeker niet op het werkblad zelf hebben.
Dus dit is echt pure persoonlijke voorkeur.

Het koppelen/vastzetten van de userforms met/op de betreffende werkbladen heb ik ondertussen opgelost met in de worksheet
onder 'Activate' de .Show en onder Deactivate de .Hide functies te gebruiken.

Om elders te kunnen klikken indien de userform actief is heb ik gewoon in de userform de eigenschap "ShowModal" op 'False' gezet.

Zodra ik je andere input, inzake aanpassingen van de code, heb uitgevoerd zal ik mijn laatste versie nogmaals doorsturen.


vriendelijke en dankbare groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #124 Gepost op: 19 januari 2019, 11:30:24 »
Hey BlackDevil,

Zoals voorzien heb ik nog even je nieuwste werkblad en code bekeken.

Er vallen direct enkele zaken op :

Je hebt 2 afzonderlijke procedures (kopiëren + sorteren). Die kunnen we alvast tot eentje herleiden.

Stel dat je manueel zou kopiëren, dan zou je eerst dit werkblad leegmaken vooraleer de nieuwe gegevens er te plakken (de vorige lijst kan namelijk langer zijn), dus moeten we vba dat ook laten doen. Dat stond nog niet in je voorbeeldcode.

De volgorde waarin je vba laat werken is nu : kopiëren en plakken – kolommen uitvullen – opmaak aanpassen. Door de nieuwe opmaak ‘rek je de kolommen terug een beetje uit’ wat een aantrekkelijke look geeft. Maar : de kolommen met naam en voornaam bv. zullen dan niet voor elk boek even breed zijn. Ik zou eerder denken dat je die in elk boek volkomen identiek wil (?).
Het enige wat je daarvoor moet doen is eenmalig manueel je ideale opmaak instellen en er daarna door vba laten afblijven, d.w.z. bij het leegmaken en bij het plakken (bij ‘normaal’ kopiëren worden bv. ook formules en opmaak meegenomen terwijl we enkel in de gegevens geïnteresseerd moeten zijn).

Citaat
deze code kan vermoedelijk misschien nog korter en/of efficiënter…
Inderdaad dus  :) 0:-) :

Sub CopytoWord()
    Columns("A:H").ClearContents
    With Sheets(…)    ‘variabele nog invullen die het werkblad bepaalt (uit je keuzelijst)
        rijen = .Cells(Rows.Count, 1).End(xlUp).Row
        tabel = .Range("B2:I" & rijen)
    End With
    Range("A1:H" & rijen - 1) = tabel
    Columns("A:H").Sort key1:=[A1], key2:=[B1], key3:=[D1], Header:=xlNo
End Sub

Groetjes,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #125 Gepost op: 19 januari 2019, 12:04:11 »
Om elders te kunnen klikken indien de userform actief is heb ik gewoon in de userform de eigenschap "ShowModal" op 'False' gezet.

Werkelijk waar, ik volg dit draadje al vanaf het begin, je weet immers nooit wat je opsteekt van de experts ;) Maar dit wist ik niet en het was mij al heel lang een doorn in het oog dat ik niet even kon terug scrollen terwijl mijn userform actief is. Top dus :D

Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #126 Gepost op: 19 januari 2019, 12:22:26 »
Hallo Johan,

Lang geleden...
Gek genoeg heb je hier blijkbaar een goede tip gevonden van iemand die nota bene zelf hulp zocht...

Citaat
het was mij al heel lang een doorn in het oog dat ik niet even kon terug scrollen
Had je het maar eerder gevraagd, dan had ik je kunnen vertellen dat, wanneer je ShowModal zo instelt, niet enkel al je andere formulieren, maar ook al je werkbladen toegankelijk zijn !

Groetjes,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #127 Gepost op: 19 januari 2019, 13:17:33 »
Citaat
Citaat van: BlackDevil op Gisteren om 19:58:24
Om elders te kunnen klikken indien de userform actief is heb ik gewoon in de userform de eigenschap "ShowModal" op 'False' gezet.
Werkelijk waar, ik volg dit draadje al vanaf het begin, je weet immers nooit wat je opsteekt van de experts ;) Maar dit wist ik niet en het was mij al heel lang een doorn in het oog dat ik niet even kon terug scrollen terwijl mijn userform actief is. Top dus :D

Leuk dat ik, als complete beginneling in VBA, iemand heb kunnen helpen met een tip  :)
Geeft een super goed gevoel en nog meer motivatie om nog meer te leren over VBA  ;D

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #128 Gepost op: 19 januari 2019, 17:06:45 »
Hey pitufo,

Hey BlackDevil,

Zoals voorzien heb ik nog even je nieuwste werkblad en code bekeken.

Er vallen direct enkele zaken op :

Je hebt 2 afzonderlijke procedures (kopiëren + sorteren). Die kunnen we alvast tot eentje herleiden.

Stel dat je manueel zou kopiëren, dan zou je eerst dit werkblad leegmaken vooraleer de nieuwe gegevens er te plakken (de vorige lijst kan namelijk langer zijn), dus moeten we vba dat ook laten doen. Dat stond nog niet in je voorbeeldcode.

De volgorde waarin je vba laat werken is nu : kopiëren en plakken – kolommen uitvullen – opmaak aanpassen. Door de nieuwe opmaak ‘rek je de kolommen terug een beetje uit’ wat een aantrekkelijke look geeft. Maar : de kolommen met naam en voornaam bv. zullen dan niet voor elk boek even breed zijn. Ik zou eerder denken dat je die in elk boek volkomen identiek wil (?).
Het enige wat je daarvoor moet doen is eenmalig manueel je ideale opmaak instellen en er daarna door vba laten afblijven, d.w.z. bij het leegmaken en bij het plakken (bij ‘normaal’ kopiëren worden bv. ook formules en opmaak meegenomen terwijl we enkel in de gegevens geïnteresseerd moeten zijn).
Inderdaad dus  :) 0:-) :

Sub CopytoWord()
    Columns("A:H").ClearContents
    With Sheets(…)    ‘variabele nog invullen die het werkblad bepaalt (uit je keuzelijst)
        rijen = .Cells(Rows.Count, 1).End(xlUp).Row
        tabel = .Range("B2:I" & rijen)
    End With
    Range("A1:H" & rijen - 1) = tabel
    Columns("A:H").Sort key1:=[A1], key2:=[B1], key3:=[D1], Header:=xlNo
End Sub

Groetjes,
pitufo

Ik weet dat het jouw doel is om mij te motiveren om zelf uit te zoeken hoe ik de code moet
vervolledigen en daar slaag je ook in, ik ben enorm gemotiveerd om VBA volledig te leren
en ik kan nu eenmaal het best leren door het gewoon te doen.
Nu wat je bovenstaande code-blok betreft begrijp ik deze volledig en weet ik min of meer
hoe ik de With Sheets(...) moet aanvullen en vermoed ik dat ik deze vooraf
dien te gaan met een For i = 1 To ... maar waar ik nu niet uitgeraak is het
volgende :

De code-blok definieert alleen maar kolommen waaruit ik opmaak dat ik de code onder het
werkblad 'PrepCopytoWord' moet plaatsen (corrigeer mij gerust als ik het fout heb  ;D).
Maar ik heb natuurlijk ook nog mijn userform met combobox en opdrachtknop die zal
bepalen welke van de Sheets zal moeten gekopieerd worden.
Dus ik zou dan onder de opdrachtknop al eerst de code plaatsen welke dan zal zeggen
wat er moet gebeuren bij elke mogelijke keuze.
Aangezien de code-blok voor de 'copy/paste/sort' volledig afhankelijk is van de code-blok
voor de opdrachtknop zou ik de "copy/paste/sort"-code dan eerder in een module steken.

Daar loop ik dus met men hoofd tegen de muur inzake hoe ik beide code-blokken moet
gaan laten samenwerken.... ik doe echt wel mijn best maar zoals je weet is mijn focus
niet altijd op punt door mijn situatie en de laatste weken heb ik dan ook héél weinig
geslapen dus...
Voor de basics ben ik echt wel goede vorderingen aan het maken maar heb ze lang nog
niet onder knie dus is het niet zo evident om al aan een hoger niveau te beginnen   :-\  ;D

Zou je me toch nog eventjes in de juiste richting op weg willen helpen?  ;D

vriendelijke en dankbare groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #129 Gepost op: 19 januari 2019, 17:56:09 »
Hoi Pitufo

Lang geleden...
Gek genoeg heb je hier blijkbaar een goede tip gevonden van iemand die nota bene zelf hulp zocht...

Zo lang toch niet....
Ik hoop ook altijd "iets" te kunnen bijdragen, ondanks dat mijn kennis van VBA nog zeker niet "professioneel" te noemen valt...

Had je het maar eerder gevraagd, dan had ik je kunnen vertellen dat, wanneer je ShowModal zo instelt, niet enkel al je andere formulieren, maar ook al je werkbladen toegankelijk zijn !

Als ik had geweten dat ik zulks kon verwachten in de lijn der mogelijkheden, dan had ik dit zeker weten al veel eerder op dit fantastisch forum naar voren gebracht, ik dacht werkelijk dat het gewoon niet tot de mogelijkheden behoorde. Maar nu kan ik er nochtans even lustig mee aan het werk.
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline Josc1965

  • Ervaren lid
  • ***
  • Berichten: 279
  • Geslacht: Man
  • Je leert echt wat op "Oplossing.be"
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #130 Gepost op: 19 januari 2019, 18:06:37 »
Hoi BlackDevil,

Leuk dat ik, als complete beginneling in VBA, iemand heb kunnen helpen met een tip  :)
Geeft een super goed gevoel en nog meer motivatie om nog meer te leren over VBA  ;D

Ik ben zelf ook nog maar een "brugklasser" wat VBA betreft, maar heb wel gemerkt dat je altijd ongemerkt behulpzaam kunt zijn voor anderen, gewoon door vragen te stellen... Ik persoonlijk probeer heel veel te leren van casus die hier en op andere fora voorbijkomen en jouw vraagstelling is "zeer" interessant. Dank hiervoor ;)
Johan
Windows 10 Home   NLD 64bit
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 2808
838F
Intel(R) HD Graphics 630 1024MB -
NVIDIA Virtual Audio Device (Wave Extensible) (WDM)
C:\ NTFS 118,01GB 44,78GB 8.079MB
AV: Avast Antivirus
FW: Windows Firewal Enabled: True
Office 2016

Offline Ex-lid

  • Oplosser
  • ****
  • Berichten: 670
  • Geslacht: Man
  • dit lid is verbannen
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #131 Gepost op: 19 januari 2019, 18:20:06 »
Citaat
Leuk dat ik, als complete beginneling in VBA, iemand heb kunnen helpen met een tip  :)
Geeft een super goed gevoel en nog meer motivatie om nog meer te leren over VBA  ;D
:thumbsup: :thumbsup: \o/ \o/
Elkaar helpen en bijleren is volgens mij de bedoeling van oplossing, niet?
(met uitzondering van Pitufo, zijn familienaam is Google en die weet alles :D :D :D :D 0:-))

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #132 Gepost op: 20 januari 2019, 09:46:14 »
@ Dotchiejack,

Nu moet ik je toch echt helemaal terugfluiten : je hebt er géén idee van hoeveel enorme gaten er in mijn Excel- en vba-kennis zitten.
Nog niet zo heel lang geleden wist ik niet eens dat vba bestond. Maar daar waar de meesten schrik krijgen als ze iets nieuws te zien krijgen, is mijn reactie steeds "ik zal eens kijken hoe dat spel hier werkt"  :D
En zo ben ik, met veel vallen en opstaan, gekomen tot waar ik nu sta, én word ik dus, als 100 % autodidact, nog af en toe geconfronteerd met heel eenvoudige voor mij nieuwe zaken die vermoedelijk in de eerste de beste initiatiecursus aan bod komen...

@ BlackDevil,

De reden waarom ik je de code op deze manier had aangereikt was voornamelijk omdat ik je nieuwe formulier nog niet te zien had gekregen (je motiveren om vba verder te leren was in dit verband meer een welgekomen bonus  :) )
Méér dan deze code heb je helemaal niet nodig, er is m.a.w. geen sprake van meerdere code-blokken. Die mag gewoon gekoppeld zijn aan de met grote waarschijnlijkheid aanwezige opdrachtknop "Opslaan" op je formulier. Evenmin heb je een for/next-loop nodig om het bronwerkblad te vinden. Dat werblad vind je namelijk via het gekozen item in je combobox, d.w.z. in de veronderstelling dat in die keuzelijst de preciese benamingen van je indexwerkbladen zitten, zoniet heb je een tussenstap(je) nodig.
Citaat
De code-blok definieert alleen maar kolommen
Dat heeft 'dezelfde' reden. Ik had namelijk begrepen dat je dit nieuwe formulier activeert samen met dat werkblad. En als die code aan een commandbutton is gekoppeld is het risico ze uit te voeren via de vba-editor ook quasi nihil. Mocht je het als veiliger aanvoelen vooraan nog een sheets("PrepCopytoWord").select te zetten... het is geenszins verboden  0:-)

Lukt het hiermee ?

Groetjes,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #133 Gepost op: 23 januari 2019, 15:20:17 »
Hey pitufo,

Zoals je weet, was, op één ding na, het progje vermoedelijk 'af'.
Dat ene ding was de codering van de "CmdB_Verwijderen" (heb deze wel gewijzigd naar "Wissen" gezien het doel ervan).
Deze dient om het formulier bij foutieve ingave ineens volledig te wissen met uitzondering van het unieke ID-nr.
Ik heb zelf een code onder deze opdrachtknop geschreven en het lijkt in eerste instantie te werken maar vooraleer
ik het programma vol gegevens begin te steken wil ik toch wel zeker zijn dat alle code perfect in orde is.
Dus wou ik je even vragen of volgende code correct is én of hij op de juiste plaats werd gezet :

Private Sub CmmndB_Wissen_Click()

   With Invoer
       For Each element In Controls
            If TypeName(element) = "TextBox" Or TypeName(element) = "ComboBox" Then
                element.Value = ""
            End If
            If TypeName(element) = "OptionButton" Or TypeName(element) = "CheckBox" Then
                element.Value = False
            End If
        Next element
   
   End With

End Sub

vriendelijke en dankbare groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline pitufo

  • Ambassadeur
  • *****
  • Berichten: 1.343
  • Geslacht: Man
Re: Excel-beperking mbt datum pré 1900 wegwerken met VBA
« Reactie #134 Gepost op: 23 januari 2019, 21:52:24 »
Hoi BlackDevil,

Ja hoor, die code ziet er helemaal o.k. uit (ze komt mij overigens niet helemaal onbekend voor  ;) )

Als ze, maar daar twijfel ik weer niet aan, gekoppeld is aan de commandbutton met deze naam op het formulier Invoer, dan staat ze inderdaad ook op de juiste plaats.
Meer dan hooguit enkel willekeurige gegevens op het formulier zetten (bijvoorbeeld eentje van elk type) kan trouwens volstaan om dat snel te testen.

Ten laatste morgen (wéér TE druk geweest) antwoord ik ook op je berichtjes die al even in mijn mailbox zitten te wachten.

Groetjes,
pitufo

"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

 


www.combell.com