Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Excel 2007] VBA - default waarden van objecten veranderen

Pagina: 1
Acties:

  • The_Butler
  • Registratie: April 2001
  • Laatst online: 18:52
Ik ben bezig een Exel macro te schrijven welke op een userform dynamisch objecten (labels, textboxes etc) aan kan maken. De code om bijvoorbeeld een Label aan te maken ziet er als volgt uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
Text_Size = 10
Font_Name = "Arial"
Dim C As Control
Do While Counter < Unique_Items
        Set C = Me.Controls.Item(MultiPage1).Pages(0).Controls.Add("Forms.label.1", ("lb" & Counter),  True)
                C.Font.Name = Font_Name
                C.Font.Size = Text_Size
                C.Left = 10
                C.Top = 100 + (Counter * 20)
                C.Width = 40
                C.Height = 17
                C.Caption = ActiveSharesArr(0, Counter)


Mijn probleem is dat het label object altijd een aantal waarden heeft die niet zullen veranderen:
het lettertype, letter grootte, hoogte en de breedte. Deze zaken wil ik dus 1 maal definieren, aan het begin van mijn programma. iets in de zin van Forms.label.1.Font.Name.DefaultValue = "Arial". als ik dat kan doen dan ziet de bovenstaande code er veel leesbaarder uit:

code:
1
2
3
4
5
6
Dim C As Control
Do While Counter < Unique_Items
        Set C = Me.Controls.Item(MultiPage1).Pages(0).Controls.Add("Forms.label.1", ("lb" & Counter),  True)
                C.Left = 10               
                C.Top = 100 + (Counter * 20)
                C.Caption = ActiveSharesArr(0, Counter)


Ik heb niet via Google kunnen vinden hoe dit te doen is (1 site gaf wel een hint dat dit mischien helemaal niet mogelijk is?), de huidige situatie werkt wel maar mijn code wordt onnodig lang en moeilijker om te lezen met deze groote blokken waar ik waarden definieer. Als ik ze weg laat dan gaat Excel direct terug naar zijn "eigen" defaults, dat werkt dus niet.

iemand een suggestie?

at your service


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Maak een label-aanmaakfunctie en roep die aan :Y)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • The_Butler
  • Registratie: April 2001
  • Laatst online: 18:52
F_J_K schreef op woensdag 12 januari 2011 @ 10:18:
Maak een label-aanmaakfunctie en roep die aan :Y)
Dat is een optie waar ik ook aan had gedacht, maar het probleem met dit soort functies is dat het de leesbaarheid van de code niet echt ten goede komt. Ik heb door mijn werk op de harde manier geleerd dat als je de keuze hebt tussen 3 regels makkelijk leesbare code of 1 regel moeilijk leesbare code je voor optie een moet kiezen.

Ik heb de functie wel geschreven:
Aanroep
code:
1
Call CreateLabel(Unique_Items, ("c" & NestCounter), 10, 100 + (NestCounter * 20), 3, Item)


Functie
code:
1
2
3
4
5
6
7
8
9
10
11
12
Function CreateLabel(PageNum As Integer, LabIdent As String, Left As Integer, Top As Integer, TxtAlign As Integer, Caption As String)
Dim C As Control
Set C = UserForm1.Controls.Item(MultiPage1).Pages(PageNum).Controls.Add("Forms.label.1", ("Lab" & LabIdent), True) 'shr name
        C.Font.Name = "Arial"
        C.Font.Size = 10
        C.TextAlign = 3 'TxtAlign ' 1 or 3
        C.Left = Left
        C.Top = Top
        C.Width = 40
        C.Height = 17
        C.Caption = Caption
End Function


kijk, het ruimt de code uiteraard op, maar als het mogelijk zou zijn dan wil ik dol graag de default waarden van de labels en textboxen in VBA veranderen...

at your service


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Als leesbaarheid een probleem is en je wilt zoveel mogelijk je oorspronkelijke code behouden kun je ook iets doen als:
code:
1
2
3
4
5
6
7
8
Do While Counter < Unique_Items
        Set C = Me.Controls.Item(MultiPage1).Pages(0).Controls.Add("Forms.label.1", ("lb" & Counter),  True)
        setControlDefaultProperties C
[...]

Sub setControlDefaultProperties(ctrl as Control)
            c. = etc
End sub


En alle varianten waarbij je toch meerdere attributen meegeeft aan de functie.


:

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • The_Butler
  • Registratie: April 2001
  • Laatst online: 18:52
Lustucru, geweldig :) ik wist nieteens dat dat kon zeg.

Voor mij is dit de ideale oplossing; ik kan altijd de defaults aanroepen, code is netjes leesbaar en schoon.

at your service