Help!

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

Hulp bij posten

Recente topics

Auteur Topic: VBA wijziging (nieuw) werkblad na gebeurtenis / kopiëren & benoemen van werkblad  (gelezen 4429 keer)

0 leden en 1 gast bekijken dit topic.

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Hallokes,

Hier ben ik nog eens  :).
Voor een nieuw VBA-projectje zoek ik hulp die me op weg helpt mbt aanpak en (de structuur van) de codering.

1 – Eerste blad ‘template’ (met een opdrachtknop) bevat volgende standaard opmaak :
       Cel B1 met waarde “Planning” en opmaak (vet – onderlijnd - gecentreerd en lettergrootte 20)
       Cel B2 met formule ‘=vandaag()’ en opmaak (cursief – lettergrootte 14 en getalnotatie “ddd dd-mm-jjjj”)
       Cel A4 met waarde “1” en opmaak (lettergrootte 12)
       Kolom A heeft getalnotatie “000.”
       Kolom C heeft lettertype “Wingdings 2”

     (deze inhoud/opmaak moet dus steeds aanwezig blijven)

2 – Blad ‘template’ dient aangepast te worden als volgt :
      Zodra er in kolom B vanaf rij 4 een waarde word ingevuld dient in kolom C van dezelfde rij de waarde “Ł”
      geplaatst te worden en in kolom A op de volgende rij de waarde van de vorige rij + 1 (dus A5 = 2, A6 = 3, enz…).
      Maar zolang er in kolom B van de vorige rij geen waarde is ingegeven dient cel C van de vorige rij en cel A van de
      huidige rij dus leeg te blijven.

3 – Zodra alle benodigde rijen zijn ingevuld en er op de opdrachtknop (afbeelding) geklikt wordt dient het blad ‘template’
      gekopieerd te worden (zonder opdrachtknop) binnen dezelfde werkmap met als nieuwe naam de datum (Cel B2) in het
      format “dd-mm-jjjj”. De volledige opmaak van het werkblad (incl getalnotatie en lettertype) dient behouden te blijven.
      Enkel de formule in Cel B2 dient in het nieuwe werkblad een vaste waarde te zijn zonder de formule.
      Zodra dit is uitgevoerd dient het blad ‘template’ terug naar de standaard opmaak te worden gezet zoals vermeld in punt 1
      (dus de waarden van B4, C4 en alle rijen vanaf rij 5 dienen gewist te worden, niet de opmaak).

4 – In het nieuwe aangemaakte werkblad dient dan volgende aanpassing te gebeuren :
      Wanneer de waarde in kolom C wijzigt dient de gehele betreffende rij met waarden in een bepaalde kleur te worden ingekleurd.
      Waarde “R” in een lichtgroene achtergrondkleur
      Waarde “T” in een lichtrode achtergrondkleur
      Waarde “N” in een lichtblauwe achtergrondkleur
      Waarde “W” in een lichtgrijze achtergrondkleur


Van een paar van deze onderdelen weet ik wel hoe ik ze moet coderen maar van de meeste niet en vooral heb ik geen idee hoe ik alles moet combineren, in welke structuur ik het moet coderen en welke code ik waar (module/werkblad) moet plaatsen.

Alle hulp is welkom waarvoor reeds op voorhand mijn oprechte dank.
In bijlage mijn voorbeeldbestandje.

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 Montagnard

  • Ambassadeur
  • *****
  • Berichten: 2.383
  • Geslacht: Man
  • To Windows or not to Windows , that's the question
deel 2 van uw vraag was niet zo moeilijk , ik heb de opmaak formules doorgetrokken tot rij 20....
Mvg,
HP ProBook 450 G3 15 inch
OS : Windows 11 Pro NLD 64bit
Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
16 GB  Vengeance 2666 MHz
KINGSTON SA400S37480G - 447,13 GB als bootdisk
WD Blue Solid state 2 TB - intern - M.2 2280 - SATA als datadisk
AV: Windows Defender
FW: Windows Firewal

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
@Montagnard,

Hartelijk dank voor je bijdrage maar dit was niet wat ik nodig had. Dergelijke werkwijze (met formules) kan ik blindelings.
De bedoeling was om alles binnen VBA te laten uitvoeren. Om het geheel van alle punten tezamen zonder VBA uit te voeren daar heb ik geen problemen mee, integendeel, zo doe ik het al jaren (punt 2 = formules, punt 3 = rechtsklik op de tab en blad kopieren + naam wijzigen, punt 4 = voorwaardelijke opmaak). Het is net omdat ik het efficiënter (en tijdbesparender) werken vind om het allemaal te automatiseren via VBA dat ik de vraag hier geplaatst heb.
Met uitzondering van de formule '=vandaag()' wil ik op het blad 'template' geen enkele formule hebben.

PS: de formule in kolom A is trouwens ook foutief.
Als ik al een formule zou willen gebruiken zou deze in cel 'A5' als volgt moeten zijn :
=ALS(B4="";"";A4+1)
en dus niet "B4+1" zoals jij hebt gedaan.
In kolom B gaan tekstwaarden komen dus dat geeft sowieso al een foutmelding.
Kolom A betreft de nummering (001., 002., 003., enz...)

Toch bedankt voor de moeite.

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: VBA wijziging (nieuw) werkblad na gebeurtenis / kopiëren & benoemen van werkblad
« Reactie #3 Gepost op: 02 augustus 2021, 07:10:05 »
*update*

Na ruim twee dagen zoeken, puzzelen en testen eindelijk de code gevonden voor punt 2.
Volgende code heb ik achter het werkblad 'template' geplaatst :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B4:B54")) Is Nothing Then
    If Target.Count > 1 Then Exit Sub
    If IsEmpty(Target) Then Exit Sub
    nr = Target.Offset(0, -1).Value
    Target.Offset(0, 1).Value = "Ł"
    Target.Offset(1, -1).Value = nr + 1
End If
End Sub
Dit werkt perfect. Wel heb ik ervoor gekozen om in cel B2 de datum handmatig in te voeren en niet via '=vandaag()'.

Punt 3 heb ik vrij snel in orde gekregen (amper een kwartiertje) met volgende code achter de opdrachtknop in een module :
Sub toevoegen()
Sheets("template").Select
Range("A1:C54").Copy
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
Columns("A:C").EntireColumn.AutoFit
Sheets("template").Select
Range("A5:A54, B2, B4:C54").ClearContents
End Sub
Ook hier werkt het perfect en een kleine aanpassing, nl. het hernoemen van het nieuwe toegevoegde blad zal ik (voorlopig) handmatig doen.

Rest mij nog punt 4 waar ik volledig ben vast te komen zitten omdat dit enerzijds opnieuw een eventmacro moet zijn
die op elk toegevoegd blad (dus NIET op blad 'template') moet worden toegepast maar omdat een eventmacro achter
het werkblad moet geplaatst worden en de werkbladen nog niet bestaande zijn heb ik dus totaal geen idee hoe ik dat
klaargespeeld moet krijgen (als dat al zou mogelijk zijn).

Dus als iemand mij daar nog zou bij willen helpen dan zou ik dat ten zeerste appreciëren.

groetjes,
BlackDevil



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 JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: VBA wijziging (nieuw) werkblad na gebeurtenis / kopiëren & benoemen van werkblad
« Reactie #4 Gepost op: 02 augustus 2021, 13:03:08 »
Je gaat dan richting een Workbook_SheetChange event.

Die vind je niet achter je bladmodule maar achter thisworkbook(daar moet je de code ook plaatsen). Dan zul je moeten coderen welke specifieke acties voor welke specifieke sheets gelden.



Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: VBA wijziging (nieuw) werkblad na gebeurtenis / kopiëren & benoemen van werkblad
« Reactie #5 Gepost op: 02 augustus 2021, 13:43:11 »
@Veerj,

Dank voor je reactie  _/-\o_.

Ik wou net mijn gevonden oplossing hier plaatsen toen ik zag dat je gereageerd had  ;D.

Ik heb na grondig puzzelen en testen volgende codeblok opgebouwd die op eerste zicht volledig doet wat ik er van verwacht :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

With ActiveSheet
If ActiveSheet.CodeName = "Blad1" Then Exit Sub
If Not Intersect(Target, Range("c4:c54")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
If Target.Value = "R" Then
    Range("A" & Target.Row & ":C" & Target.Row).Interior.Color = RGB(198, 224, 180)
End If
If Target.Value = "T" Then
    Range("A" & Target.Row & ":C" & Target.Row).Interior.Color = RGB(248, 203, 173)
End If
If Target.Value = "N" Then
    Range("A" & Target.Row & ":C" & Target.Row).Interior.Color = RGB(180, 198, 231)
End If
If Target.Value = "W" Then
    Range("A" & Target.Row & ":C" & Target.Row).Interior.Color = RGB(217, 217, 217)
End If
End If

End With

End Sub

Mogelijks zal er een betere/mooiere oplossing zijn maar voor een leek op vlak van VBA vind ik toch dat ik, ondanks drie dagen kostbare tijd erin gestoken te hebben, fier mag zijn op mijn code voor de drie punten die ik in mijn vraag had beshreven.

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 JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: VBA wijziging (nieuw) werkblad na gebeurtenis / kopiëren & benoemen van werkblad
« Reactie #6 Gepost op: 02 augustus 2021, 13:47:06 »
Zeker en ik zie dat je het event al had gevonden! Je kunt uiteraard beter de code gebruiken die je zelf het beste begrijpt. ;D

 


www.combell.com