< 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

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse

odpocet a storno tl.

PavDD • 28.3. 8:53

odpocet a storno tl.

Začátečník • 26.3. 14:39

odpocet a storno tl.

PavDD • 26.3. 10:22

odpocet a storno tl.

elninoslov • 26.3. 7:50

odpocet a storno tl.

PavDD • 26.3. 7:26

odpocet a storno tl.

elninoslov • 25.3. 22:34

odpocet a storno tl.

Začátečník • 25.3. 15:09