Just nu i M3-nätverket
Gå till innehåll

Smidigt enable/disable av formulär-element i XL (VBA)?


Leon_

Rekommendera Poster

Håller på och fibblar med ett formulär i Excel->VBA;

Om man klickar på knapp "A" så får alla textboxar värdet Enable="False".

Klickar man på knapp "B" så får alla textboxar värdet "Enable=True".

Visst borde det väl finnas ett annat sätt att lösa detta på än att skriva;

txtBox1.Enable=False

txtBox2.Enable=False

txtBox3.Enable=False

..etc..

respektive

txtBox1.Enable=True

txtBox2.Enable=True

txtBox3.Enable=True

..etc..

 

Testade lite med For..Each, men fick inte till det;

[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] Control [color="#0000ff"]In[/color] myForm
Activecontrol.Enable=[color="#0000ff"]False[/color]
[color="#0000ff"]Next[/color] Control

Dessutom finns det en del knappar som inte skall deaktvieras, så den lösningen kanske inte är den smidigaste även om den skulle fungera. Nåja, man kan alltid sätta de knappar som man behöver till aktiva efter loopen.

 

Nog med yrande från min sida. Någon som har en idé?

 

Länk till kommentar
Dela på andra webbplatser

Din for-each är lite fel till att börja med.

  [color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] Control [color="#0000ff"]In[/color] Me.Controls

        Control.Enabled = [color="#0000ff"]False[/color]
    [color="#0000ff"]Next[/color] Control

Edit: Fixade FOR-EACH loopen. Nu fungerar den.

 

Har inget formulär att leka med nu, inte tid heller att skapa ett, men ikväll (om ingen anan hinner före) kan jag ge dig lite exempelkod där jag köst samma problem fast med checkboxar.

 

I grund går min lösning ut på att plocka ut ösnkade kontroller medhjälp av namnet. Dina har ju ett klart mönster så det bör gå för dig också...

 

...äsch. Med XLDennis utmärkta sidors hjälp hittar jag grunden och anpassar åt dig:

[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] test()
    [color="#0000ff"]For[/color] i = 1 [color="#0000ff"]To[/color] 2
        [color="#0000ff"]With[/color] Me.Controls([GRÅ]"TextBox"[/GRÅ] & i)

            .Enabled = [color="#0000ff"]False[/color]
        [color="#0000ff"]End[/color] [color="#0000ff"]With[/color]
    [color="#0000ff"]Next[/color] i



[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

/T

 

 

[inlägget ändrat 2005-03-29 15:33:27 av Monshi]

Länk till kommentar
Dela på andra webbplatser

Man bugar och bockar, Monshi =)

Tack!:thumbsup:

 

edit: så här gjorde jag

[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] cmdEnableDisable_Click()
[color="#0000ff"]Dim[/color] myControl
[color="#0000ff"]Dim[/color] sControlStart As [color="#0000ff"]String[/color]
[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] myControl [color="#0000ff"]In[/color] myForm.Controls
    sControlStart = [color="#0000ff"]Left[/color](myControl.Name, 3)
    [color="#0000ff"]If[/color] sControlStart = [GRÅ]"txt"[/GRÅ] Or sControlStart = [GRÅ]"com"[/GRÅ] Or sControlStart = [GRÅ]"dtp"[/GRÅ] [color="#0000ff"]Then[/color]
        [color="#0000ff"]If[/color] myControl.Enabled = [color="#0000ff"]True[/color] [color="#0000ff"]Then[/color]
            myControl.Enabled = [color="#0000ff"]False[/color]
        [color="#0000ff"]Else[/color]
            myControl.Enabled = [color="#0000ff"]True[/color]
        [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
    [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
[color="#0000ff"]Next[/color] myControl

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

så "disablas" alla kontroller som börjar med txt (textbox), com (combobox) och dtp (datetimepicker). Är de redan disablade så enablas de.. .Fast det var mest för att jag skulle testa ;)

Än en gång, tack för hjälpen, Monshi :)

[inlägget ändrat 2005-03-29 15:53:44 av Joel Sundberg]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...