< návrat zpět

MS Excel


Téma: Práce s dynamicky přidaným labelem rss

Zaslal/a 23.3.2017 15:25

For labelCounter = 1 To n
Set theLabel = UserForm1.Frame1.Controls.Add("Forms.Label.1", "Test" & labelCounter, True)
With theLabel
D1 = DateAdd("d", Sheets("graf").Range("g30"), labelCounter - 1)
'.Caption = DateAdd("d", Sheets("graf").Range("g30"), labelCounter - 1)
.Name = "L" & labelCounter
.Caption = .Name
.Left = 40 * labelCounter
.Width = 40
.Height = WorksheetFunction.SumIfs(škoda, jméno, Sheets("graf").Range("a5"), datum, D1) / 10
.Top = 10
.BackColor = &H800080
End With
Next

L1.Background = &HFFFFFF

Run-time error '424':
Object required

u řádku msgbox......

Poradí někdo, jak s přidaným labelem dále pracovat?

Zaslat odpověď >

#035703
avatar
Asi neporadí ;-).

Žádný řádek s MsgBox jsi neuvedl... Nepíšeš ani, co s Labelem chceš dál dělat...

Křišťálové koule jsou drahé, ne každý má nějakou doma!
P.citovat
#035704
elninoslov
Posledný riadok
L1.Background = &HFFFFFF
alias
Controls("L1").Background = &HFFFFFF
Skúste hádať. Áno, správne, Label nemá vlastnosť Background.citovat
icon #035705
eLCHa
já už myslel, že jsem slepý...

@elninoslov
mno to sice nemá, ale to je jiná chybacitovat
#035710
elninoslov
Ale ja som napísal aj riešenie druhého problému. Nevolajte vytvorený objekt L1, ale Controls("L1"). Skúste si to napr. na vlastnosti .Caption. Ak dáte L1.Caption="abc" máte chybu, ale ak dáte Controls("L1").Caption="abc" prejde bez chyby.

Samozrejme skúšku robím na kóde s odstránenýi riadkami
D1 = DateAdd("d", Sheets("graf").Range("g30"), labelCounter - 1)

a

.Height = WorksheetFunction.SumIfs(škoda, jméno, Sheets("graf").Range("a5"), datum, D1) / 10

K nim nemáme podklady (prílohu)...citovat
#036007
avatar
Všechno je to strašně zmatené.

1. V řádku set theLabel = ...
a) Odkaz na UserForm1 je přece zbytečný, vždyť v něm jsi, stačí Frame1.Controls...
b) Proč dáváš labelu jméno "Test" & labelCounter, když ho hned poté měníš na "L" & labelCounter?
c) Parametr Visible metody Add má předdefinovanou hodnotu True, netřeba to uvádět.
d) Proměnnou theLabel vůbec nepotřebuješ, když ji používáš jen jednou.
e) V cyklu je nesmysl volat opakovaně Frame1.Controls.

2. Proč také počítáš odkazy na buňky G30 a A5 opakovaně, znovu a znovu?

3. Ani proměnnou D1 nepotřebuješ, používáš ho jen jednou.

4. Proč nastavuješ pozici a rozměry labelu načtyřikrát?

5. Jsi si jist, že jako třetí parameter funkce DateAdd (parametr typu Date) chceš číslo labelCounter - 1?

Dim g&, a&
With Sheets("graf")
g = .[G30]: a = .[A5]
End With
With Frame1.Controls
For labelCounter = 1 To n
With .Add("Forms.Label.1", "L" & labelCounter)
.Caption = .Name
.Move 40 * labelCounter, 10, 40, WorksheetFunction.SumIfs( _
škoda, jméno, a, datum, DateAdd("d", g, labelCounter - 1)) / 10
.BackColor = &H800080
End With
Next
End With


V tvém L1.Background jde jasně jen o překlep. Ale nemůžeš přímo oslovovat prvky userformu stvořené programem, 'L1' Basicu nic neříká, proto chybové hlášení Object required. Musíš buď
Controls("L1").BackColor = &HFFFFFF
jak už kdosi napověděl, nebo lépe pohodlnější
Me!L1.BackColor = &HFFFFFF
s vykřičníkem místo tečky, aby Basic pochopil, že jde o prvek, který jsi userformu přidal za chodu programu. Zde je 'Me' výjimečně nutné, nelze ho vynechat.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje