Help!

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

Hulp bij posten

Recente topics

Auteur Topic: geautomatiseerd sjabloon voor budget  (gelezen 58058 keer)

0 leden en 1 gast bekijken dit topic.

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: geautomatiseerd sjabloon voor budget
« Reactie #75 Gepost op: 01 augustus 2023, 10:54:45 »
***UPDATE*** (extra vraag)


Ik ben nu voor de 2e dag op rij bezig met de 2e pagina van de multipage, nog steeds met de optie “alleenstaand”.
Zowel bij “alleenstaand” als bij “samenwonend” zijn er diverse scenario’s mogelijk die elk met een ander 1e frame zullen starten.
Vanaf het 2e frame kunnen de frames in hoogte verschillen afhankelijk van de gegevens in het vorige frame. De .top positie van een volgend frame wordt dan in dit geval ook altijd bepaald op basis van de hoogte van het vorige frame (dus .top huidige frame = .top + .height vorige frame + tussenruimte).
Door de diverse mogelijke scenario’s zal de hoogte van de multipage-pagina soms onvoldoende zijn voor alle frames voor dat betreffende scenario.
Om in dit geval niet telkens een tweede multipage-pagina te moeten maken voor dezelfde optie dacht ik om eventueel bij bereik van het ‘einde’ van de multipage-pagina deze te ‘clearen’ door de reeds verwerkte frames opnieuw ‘buiten zicht’ te plaatsen zodat het volgende frame opnieuw bovenaan komt.

Vanaf het tweede frame is er rechtsonder in het frame telkens een klein label(knop) voorzien met “>>>” als .caption zodat, via tussenkomst gebruiker, vba weet dat het volgende frame getoond moet worden.

Om globaal naar een volgende multipage-pagina te gaan voorzie ik onderaan de multipage-pagina een commandbutton “volgende” die pas ‘binnen beeld’ gezet wordt zodra het laatste frame verwerkt wordt.

Concreet zou ik dus, indien 1 multipage-pagina lengte onvoldoende zou zijn, bij bereik van het einde van de pagina een aparte commandbutton (volgende deel) ‘binnen beeld’ willen plaatsen om aan te tonen dat alle reeds verwerkte frames terug ‘buiten beeld’ gezet moeten worden en dat het volgende frame bovenaan geplaatst moet worden.

Hoe, en vooral waar, kan ik dit best in mijn code verwerken?

Groetjes,
BlackDevil/Bieke

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.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: geautomatiseerd sjabloon voor budget
« Reactie #76 Gepost op: 01 augustus 2023, 11:44:05 »
zou deze opbouw kunnen werken als ik deze plaats onderaan het codeblok van het te plaatsen frame? en dit dan in elk frame dat die waarde zou kunnen overschrijden?


If (.top + .height) > 390 then
   .top = 10
   cmdVolgendDeel.Left = 93
end if

en dan in de code van de cmdVolgendDeel_click de code om alle reeds geplaatste voorgaande  frames 'buiten beeld' te zetten?

groetjes,
BlackDevil/Bieke
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 MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: geautomatiseerd sjabloon voor budget
« Reactie #77 Gepost op: 01 augustus 2023, 12:03:59 »
Hey Bieke,

Vergis ik me nu dat ik gisteren, vooraleer te moeten vertrekken, in een flits nog een andere post heb zien passeren die ondertussen terug verdwenen is?
In dat geval is het waarschijnlijk goed nieuws, want dan heb je het zelf in orde gekregen :)

Wat je huidige vraag (+ daaropvolgende eigen suggestie) betreft: van radicale uitspraken onthou ik me liever, maar op het eerste zicht zou ik denken dat je daarmee met grote waarschijnlijkheid in de goede richting zit.
Veel verliezen met het eens te proberen zal je wel niet ;)

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: geautomatiseerd sjabloon voor budget
« Reactie #78 Gepost op: 01 augustus 2023, 12:15:16 »
Hey Molly,

Ja klopt, ik had hier gisteren eventjes een bericht geplaatst mbt een klein obstakeltje dat ik was tegen gekomen maar uiteindelijk dan toch zelf in orde heb gekregen  ;).

voor wat mijn huidige vraag betreft heb ik nu volgende code opgebouwd :

deze in elk frame dat 'te hoog' zou kunnen uitvallen :
'bepalen of einde page is bereikt
    If (.Top + .Height) > 390 Then
      .Top = 10
      .Left = 310
      cmdVlgndDeel.Left = 93
    End If

en deze code dan in de commandbutton (volgend deel) :
Private Sub cmdVlgndDeel_Click()
  Dim frm As Object, i As Long
  For Each frm In Me.MultiPage1.Pages(1).Controls
    If TypeName(frm) = "Frame" Then
      If frm.Left = 10 Then
        frm.Left = 310
        i = Right(frm, 1)
      End If
    End If
  Next
  i = i + 1
  Me.Controls("frmAllnstnd" & i).Left = 10
End Sub

Ik zal dan wel merken of het werkt zodra ik aan een frame zit dat effectief de hoogte overschrijdt  ;D.
het resultaat zal hier dan wel duidelijk worden adhv mijn volgende berichten hieromtrent  :D

groetjes,
Bieke
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.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: geautomatiseerd sjabloon voor budget
« Reactie #79 Gepost op: 01 augustus 2023, 14:18:03 »
Goeienamiddag iedereen,

Ik heb nog eens een vraagje, ditmaal omtrent een hulpmiddeltje (sub) dat ik gemaakt heb mbt het ontwerp van dit project.

Omdat ik (bijna) alle controls in de UF een eigen (genummerde) naam geef en alle controls reeds op voorhand maak heb ik dus al héél wat namen gecreëerd.
Om een beetje het overzicht te kunnen behouden heb ik een codeblokje opgebouwd om alle namen van deze controls weg te schrijven in een werkblad (“ctrl-namen”) per multipage-pagina en per frame.
De code werkt perfect maar omdat ik nog niet alle multipage-pagina’s heb gemaakt moet ik wel telkens per multipage-pagina mijn code gaan aanpassen wat betreft het multipage-pagina-nummer en het kolom-nr én moet ik naderhand op het werkblad ook nog eens handmatig de hoofdtitels (rij 1) invoeren en in elke kolom de controls-namen alfabetisch gaan sorteren.
In rij 1 komt dus telkens de hoofdtitel in formaat : “Multipage1.” & paginanaam
In rij 2 komen dan de namen van de frames (dus elk framenaam in de volgende kolom)
En vanaf rij 3 komen dan alle namen van de controls van het betreffende frame in dezelfde kolom.

Hoe kan ik best mijn code aanpassen dat hij enerzijds alle multipage-paginas doorloopt, de titel voor de multipage-pagina in de juiste kolom zet (dus de tweede titel in de kolom na het laatste frame van de eerste titel, enz…) én dat hij dan per kolom vanaf rij 3 alles alfabetisch sorteert?

Dit is mijn code-blokje ingesteld voor de allereerste pagina (“multipage1.pages(0)”) :
Sub getnamen()
  Dim frm As Object, ctrl As Object, frij As Long, crij As Long, kol As Long
  With Sheets("ctrl-namen")
    kol = 0
    For Each frm In UserForm1.MultiPage1.Pages(0).Controls
      If TypeName(frm) = "Frame" Then
        kol = kol + 1
        frij = 2
        .Cells(frij, kol) = frm.Name
        crij = 2
        For Each ctrl In frm.Controls
          crij = crij + 1
          .Cells(crij, kol) = ctrl.Name
        Next
      End If
    Next
  End With
End Sub

Alvast bedankt op voorhand.

Groetjes,
BlackDevil/Bieke
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 MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: geautomatiseerd sjabloon voor budget
« Reactie #80 Gepost op: 01 augustus 2023, 14:22:08 »
Hey Bieke,

Ik was hier net voor iemand (los van welk forum ook, 'gewoon' persoonlijke kennis) een paar zaken in orde aan het brengen, en daarin kwam iets voor dat in de verste verte niet op jouw project lijkt, maar me plots wel op een alternatief idee bracht :-X
Je zou het ook met een verticale scrollbar kunnen oplossen die dan onvermijdelijk op de multipage-pagina moet staan.

Laat misschien even bezinken wat je het beste acht, want het is echt wel totaal anders 0:-)

Groetjes,
Molly

Oeps: posts weer bijna gekruist..., ik kon deze nog net van dit 'vervolg' voorzien.
Je nieuwste probleempje moet ik weer tijdelijk opbergen, meteen weer de deur uit, maar hierboven vindt je alvast weer iets om over na te denken ;)

Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: geautomatiseerd sjabloon voor budget
« Reactie #81 Gepost op: 01 augustus 2023, 14:30:50 »
Nog rap-rap :D

Misschien rond je bestaande lus nog een andere:
For Each pagina In UserForm1.MultiPage1.Pages
Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: geautomatiseerd sjabloon voor budget
« Reactie #82 Gepost op: 01 augustus 2023, 20:44:44 »
Hey Bieke,

Voor één keer op een ordentelijk uur thuis geraakt moest ik ook nog wat pc-kwesties regelen.
Voor de verandering je laatste post opnieuw maar dan non-diagonaal gelezen en gemerkt dat er toch meerdere maar overduidelijke vraagjes in stonden.
Vandaar:
Sub getnamen()
 
Dim frm As Object, pagina As Object, ctrl As Object, crij As Long, kol As Long
With Sheets("ctrl-namen")
  .Cells.ClearContents
  kol = 1
  aantal = 0
  For Each pagina In UserForm1.MultiPage1.Pages
    For Each frm In pagina.Controls
      If TypeName(frm) = "Frame" Then
        .Cells(1, kol) = pagina.Caption
        .Cells(2, kol) = frm.Name
        crij = 2
        For Each ctrl In frm.Controls
          crij = crij + 1
          .Cells(crij, kol) = ctrl.Name
        Next
        If crij > 3 Then
          .Range(.Cells(3, kol), .Cells(crij, kol)).Sort key1:=.Cells(3, kol), Header:=xlNo
        End If
        kol = kol + 1
      End If
    Next
  Next
End With

End Sub

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: geautomatiseerd sjabloon voor budget
« Reactie #83 Gepost op: 01 augustus 2023, 21:09:08 »
***UPDATE***

En met nog een klein extraatje erbij (dat ik persoonlijk iets duidelijker/overzichtelijker vind) heb ik het meteen in je laatste bestand geplakt :)

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: geautomatiseerd sjabloon voor budget
« Reactie #84 Gepost op: 01 augustus 2023, 21:20:52 »
Hey Molly,

Hartelijk dank voor deze aanpassing, werkt perfect  :thumbsup: (heb enkel een niet gebruikte variabele moeten verwijderen)

Nu puur visueel gezien (opmaak werkblad) zou ik nog drie elementen willen toevoegen, indien mogelijk uiteraard.

1) bij elke kolom waar een nieuwe pagina begint aan de linkerzijde een dubbele randlijn (visuele scheidingslijn)
2) ook de frames tov elkaar (dus binnen dezelfde multipage-pagina) gesorteerd op hun volgnummer (dus laatste karakter (cijfer))
3) En dan nog eentje mbt de titels (rij 1) deze heb ik graag in een samengevoegde cel die het aantal gebruikte kolommen (vermelde frames dus)
     per pagina overkoepeld. Kan dat mee verwerkt worden in de code of dien ik dat toch handmatig te blijven doen?

groetjes,
Bieke

Oops, net je nieuwe bericht gemerkt... ik ga meteen eens kijken  ;)
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.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: geautomatiseerd sjabloon voor budget
« Reactie #85 Gepost op: 01 augustus 2023, 21:30:12 »
***UPDATE***

En met nog een klein extraatje erbij (dat ik persoonlijk iets duidelijker/overzichtelijker vind) heb ik het meteen in je laatste bestand geplakt :)

Groetjes,
Molly

Net bekeken  :thumbsup:
de toevoeging  "miltipage1" aan de titel had ik er zelf reeds aan toegevoegd (had dit reeds bij de nog handmatige invoer ook zo gedaan).
De autofit voor de kolommen die was ik eventjes vergeten dus bedankt mij eraan te herinneren  ;D

groetjes,
Bieke
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.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: geautomatiseerd sjabloon voor budget
« Reactie #86 Gepost op: 02 augustus 2023, 02:49:37 »
Nu puur visueel gezien (opmaak werkblad) zou ik nog drie elementen willen toevoegen, indien mogelijk uiteraard.

1) bij elke kolom waar een nieuwe pagina begint aan de linkerzijde een dubbele randlijn (visuele scheidingslijn)
2) ook de frames tov elkaar (dus binnen dezelfde multipage-pagina) gesorteerd op hun volgnummer (dus laatste karakter (cijfer))
3) En dan nog eentje mbt de titels (rij 1) deze heb ik graag in een samengevoegde cel die het aantal gebruikte kolommen (vermelde frames dus)
     per pagina overkoepeld. Kan dat mee verwerkt worden in de code of dien ik dat toch handmatig te blijven doen?

@Molly,

aangezien ik bovenstaande niet meer kon aanpassen doe ik het dan maar via een nieuw berichtje  ;D

Punten 1 en 3 heb ik ondertussen zelf in orde gekregen.
Na een hele avond (en wat nachtelijke uurtjes  :D) wat puzzelen heb ik de lay-out van het werkblad volledig naar wens verkregen, inclusief de juiste borders  :thumbsup:.

Het enige wat er nog tussen zou moeten is dus punt 2 uit bovenstaand bericht.
Ik heb namelijk multipage-pagina's waarbij het eerste frame het volgnummer "0" heeft en met de huidige code komt dit dan als laatste
in de 'for each--'-loop waardoor het in de laatste kolom voor de betreffende pagina komt te staan terwijl ik dit dus , visueel gezien, toch
liever in de eerste kolom van de betreffende pagina zou hebben.

Dit is mijn huidig code-blokje voor het werkblad "ctrl-namen" :
Sub getnamen()
Dim frm As Object, pagina As Object, ctrl As Object, crij As Long, fkol As Long, pkol As Long
Application.ScreenUpdating = False
  With Sheets("ctrl-namen")
    .Cells.UnMerge
    .Cells.ClearContents
    .Cells.Borders.LineStyle = xlNone
    .Cells(1, 1) = "Multipage1"
    pkol = 1
    fkol = 0
    For Each pagina In UserForm1.MultiPage1.Pages
      pkol = fkol + 1
      With .Columns(pkol).Borders(xlEdgeLeft)
        .Weight = xlMedium
        .Color = RGB(58, 56, 56)
      End With
      .Cells(2, pkol) = " " & pagina.Caption & " "
      For Each frm In pagina.Controls
        If TypeName(frm) = "Frame" Then
          fkol = fkol + 1
          With .Columns(fkol).Borders(xlEdgeLeft)
            If .Weight <> xlMedium Then
              .Weight = xlThin
              .Color = RGB(58, 56, 56)
            End If
          End With
          .Cells(3, fkol) = " " & frm.Name & " "
          .Cells(3, fkol).BorderAround , Weight:=xlMedium, Color:=RGB(58, 56, 56)
          crij = 3
          For Each ctrl In frm.Controls
            crij = crij + 1
            .Cells(crij, fkol) = " " & ctrl.Name & " "
            With .Cells(crij, fkol).Borders(xlEdgeBottom)
              .Weight = xlHairline
              .Color = RGB(58, 56, 56)
            End With
          Next
          If crij > 4 Then
            .Range(.Cells(4, fkol), .Cells(crij, fkol)).Sort key1:=.Cells(4, fkol), Header:=xlNo
          End If
        End If
      Next
      .Range(.Cells(2, pkol), .Cells(2, fkol)).Merge
    Next
    With .Columns(fkol).Borders(xlEdgeRight)
      .Weight = xlMedium
      .Color = RGB(58, 56, 56)
    End With
    .Range(.Cells(1, 1), .Cells(1, fkol)).Merge
    .Range(.Cells(1, 1), .Cells(1, fkol)).BorderAround , Weight:=xlMedium, Color:=RGB(58, 56, 56)
    .UsedRange.EntireColumn.AutoFit
  End With
End Sub

groetjes,
Bieke
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 MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: geautomatiseerd sjabloon voor budget
« Reactie #87 Gepost op: 02 augustus 2023, 09:49:28 »
Hey Bieke,

Kleine rechtzetting om te beginnen?
Citaat
Ik heb namelijk multipage-pagina's waarbij het eerste frame het volgnummer "0" heeft en met de huidige code komt dit dan als laatste
in de 'for each--'-loop waardoor het in de laatste kolom voor de betreffende pagina komt te staan
Dat komt niet omwille van de '0' maar omdat dat het laatst aangemaakte frame is dat hernoemd is. Anders gezegd: als je een eerste frame Frame0 zou noemen en daarna meer frames toevoegen zou Frame0 wél als eerste aan bod komen.

Daar heb je voor je recentste wens niet veel aan, dus sorteren dan maar. Om niet je ganse code overhoop te moeten halen heb ik het maar pragmatisch aangepakt, dus volgende code mag je gewoon invoegen, onmiddelijk na je regel met de eerste 'merge'-instructie:
kolommen = (fkol - pkol) + 1
If kolommen > 1 Then
  rijen = .UsedRange.Rows.Count - 2
  ReDim sort_kol(1 To kolommen)
  For i = 1 To kolommen
    sort_kol(i) = Join(Application.Transpose(.Cells(3, pkol + i - 1).Resize(rijen)), "|")
  Next i
  For i = 1 To kolommen - 1
    For ii = i + 1 To kolommen
      If sort_kol(ii) < sort_kol(i) Then
        tmp = sort_kol(i)
        sort_kol(i) = sort_kol(ii)
        sort_kol(ii) = tmp
      End If
    Next ii
  Next i
  For i = 1 To kolommen
    arr = Split(sort_kol(i), "|")
    .Cells(3, pkol + i - 1).Resize(rijen) = Application.Transpose(arr)
  Next i
End If

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.031
  • Geslacht: Vrouw
  • veni vidi vici
Re: geautomatiseerd sjabloon voor budget
« Reactie #88 Gepost op: 02 augustus 2023, 11:52:31 »
Hey Molly,

Bedankt voor dit mooie stukje code  _/-\o_, werkt perfect  :thumbsup:

Kleine rechtzetting om te beginnen?Dat komt niet omwille van de '0' maar omdat dat het laatst aangemaakte frame is dat hernoemd is. Anders gezegd: als je een eerste frame Frame0 zou noemen en daarna meer frames toevoegen zou Frame0 wél als eerste aan bod komen.
Hiervan was ik ondertussen al in kennis gekomen via mijn opzoekingen mbt de sorteercode  ;)


Toen ik gisterenavond/vannacht zo langdurig met die lay-out van het werkblad "ctrl-namen" bezig was kwam ik tot de realisatie dat ik opnieuw wat
'hernoem'-werk had mbt de controls van de multipage-pagina "Alleenstaand".
Ik ga namelijk voor de multipage-pagina "Samenwonend" grotendeels dezelfde soorten controls nodig hebben voor soortgelijke doelen en aangezien elke naam
uniek moet zou het bijna onmogelijk zijn hiervoor volledige nieuwe namen te gaan verzinnen dus moet ik er nog een extra letter aan toevoegen om ze toch uniek te houden :
"A" voor de pagina "Alleenstaand" en "S" voor de pagina "Samenwonend".
Gelukkig had ik nog maar een 20-tal controls benoemd dus ben ik nu eerst nog eventjes bezig deze te hernoemen en dan in de code alle verwijzingen aan te passen  ;D.
Zodra dat klaar is zal ik vermoedelijk voor mijn recentste frame(s) misschien nog eens hulp nodig hebben dus zal ik dan nog eens een recente versie plaatsen.


groetjes,
Bieke

***EDIT : ***
Toen ik net, na het aanpassen van alle relevante control-namen, het overzicht uit mijn werkblad wou afdrukken merkte ik nog één klein bugje met de aangevulde code.
Alles staat wel degelijk netjes in de juiste kolom-volgorde gesorteerd MAAR mijn onderste borders bij de ctrl-namen zelf kloppen nu natuurlijk wel niet meer.
Kan dit in de code nog simpel opgevangen worden of moet het hele blok dan toch maar 'herschreven' worden?
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 MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: geautomatiseerd sjabloon voor budget
« Reactie #89 Gepost op: 02 augustus 2023, 16:02:42 »
Hey Bieke,

Citaat
MAAR mijn onderste borders bij de ctrl-namen zelf kloppen nu natuurlijk wel niet meer.
Kan dit in de code nog simpel opgevangen worden of moet het hele blok dan toch maar 'herschreven' worden?

Dat gaan we niet doen, hé, hoogstens wat code verschuiven en een kleinigheid toevoegen.
Jouw ogen zullen wel anders werken dan de mijne, want even ging het woord 'spielerei' door me heen, maar dat zal dan waarschijnlijk komen omdat ik het verschil nauwelijks zie :(

Ik plaats hier liever de volledige hernieuwde code, dat zal makkelijker zijn dan jou de aanpassingen uiteen te zetten.

Tegelijk heb ik nog een andere aanpassing gedaan voor het kolommen sorteren.
Citaat
ook de frames tov elkaar gesorteerd op hun volgnummer (dus laatste karakter (cijfer))
Dat is wat ik eerst letterlijk had gedaan, maar zal maar correct werken zolang je niet hoger gaat dan frame 10, dus voor het geval dat één regel gewijzigd waardoor bv. 10 netjes na 9 zal komen.
Sub getnamen()
Dim frm As Object, pagina As Object, ctrl As Object, crij As Long, fkol As Long, pkol As Long
Application.ScreenUpdating = False
  With Sheets("ctrl-namen")
    .Cells.UnMerge
    .Cells.ClearContents
    .Cells.Borders.LineStyle = xlNone
    .Cells(1, 1) = "Multipage1"
    pkol = 1
    fkol = 0
    For Each pagina In UserForm1.MultiPage1.Pages
      pkol = fkol + 1
      With .Columns(pkol).Borders(xlEdgeLeft)
        .Weight = xlMedium
        .Color = RGB(58, 56, 56)
      End With
      .Cells(2, pkol) = " " & pagina.Caption & " "
      For Each frm In pagina.Controls
        If TypeName(frm) = "Frame" Then
          fkol = fkol + 1
          With .Columns(fkol).Borders(xlEdgeLeft)
            If .Weight <> xlMedium Then
              .Weight = xlThin
              .Color = RGB(58, 56, 56)
            End If
          End With
          .Cells(3, fkol) = " " & frm.Name & " "
          .Cells(3, fkol).BorderAround , Weight:=xlMedium, Color:=RGB(58, 56, 56)
          crij = 3
          For Each ctrl In frm.Controls
            crij = crij + 1
            .Cells(crij, fkol) = " " & ctrl.Name & " "
          Next
          If crij > 4 Then
            .Range(.Cells(4, fkol), .Cells(crij, fkol)).Sort key1:=.Cells(4, fkol), Header:=xlNo
          End If
        End If
      Next
      .Range(.Cells(2, pkol), .Cells(2, fkol)).Merge
      'kolommen sorteren en opmaken
      kolommen = (fkol - pkol) + 1
      If kolommen > 1 Then
        rijen = .UsedRange.Rows.Count - 2
        ReDim sort_kol(1 To kolommen)
        For i = 1 To kolommen
          sort_kol(i) = Join(Application.Transpose(.Cells(3, pkol + i - 1).Resize(rijen)), "|")
        Next i
        For i = 1 To kolommen - 1
          For ii = i + 1 To kolommen
            If Val(Replace(sort_kol(ii), " Frame", "", , , vbTextCompare)) < Val(Replace(sort_kol(i), " Frame", "", , , vbTextCompare)) Then
              tmp = sort_kol(i)
              sort_kol(i) = sort_kol(ii)
              sort_kol(ii) = tmp
            End If
          Next ii
        Next i
        For i = 1 To kolommen
          arr = Split(sort_kol(i), "|")
          .Cells(3, pkol + i - 1).Resize(rijen) = Application.Transpose(arr)
          aantal = .Cells(Rows.Count, pkol + i - 1).End(xlUp).Row - 3
          If aantal > 0 Then
            With .Cells(4, pkol + i - 1).Resize(aantal).Borders(xlEdgeBottom)
              .Weight = xlHairline
              .Color = RGB(58, 56, 56)
            End With
            With .Cells(4, pkol + i - 1).Resize(aantal).Borders(xlInsideHorizontal)
              .Weight = xlHairline
              .Color = RGB(58, 56, 56)
            End With
          End If
        Next i
      End If
    Next
    With .Columns(fkol + 1).Borders(xlEdgeLeft)
      .Weight = xlMedium
      .Color = RGB(58, 56, 56)
    End With
    .Range(.Cells(1, 1), .Cells(1, fkol)).Merge
    .Range(.Cells(1, 1), .Cells(1, fkol)).BorderAround , Weight:=xlMedium, Color:=RGB(58, 56, 56)
    .UsedRange.EntireColumn.AutoFit
  End With
End Sub

Groetjes,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

 


www.combell.com