Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[exel] VBA czy nr etykiety LABEL można zastąpić zmienną

muchajarek 08 Mar 2010 12:12 2560 8
  • #1 08 Mar 2010 12:12
    muchajarek
    Poziom 10  

    Witam. Mam tytanie jak w tytule. Czy numer etykiety Labal można zastąpić zmienną. To znaczy np.Label3 , cyfrę „3” chce zastąpić zmienną np. „a”. Lub coś w tym rodzaju. Chodzi o to, że mam kilkanaście etykiet label i każdej musze dopisać inną wartość. W tej chwili robię to na piechotę, ale procedura się wydłużą. Dzięki za pomoc.

    0 8
  • #2 08 Mar 2010 13:02
    zamulek
    Poziom 13  

    w C# możesz tak zrobić, także przypuszczam że tutaj też się da

    Moderowany przez arnoldziq:

    Drogi kolego!
    Może mnie kolega uświadomić, co kolegi wypowiedź wnosi do tego tematu?

    0
  • #3 08 Mar 2010 13:05
    muchajarek
    Poziom 10  

    Ajak to się robi w c ?

    0
  • Pomocny post
    #4 08 Mar 2010 13:08
    arnoldziq
    Moderator Programowanie

    Oczywiście, że można.
    Jeżeli masz kilkanaście elementów tego samego rodzaju, to można uzyskać do nich dostęp poprzez Me.Controls.

    Code:
     Dim loControl As Control
    
     Dim lsTmp As String
     
     For Each loControl In Me.Controls
        lsTmp &= loControl.Name & vbNewLine
        If loControl.Name = "Label3" Then
          ...
        EndIF
     Next loControl

     MsgBox(lsTmp, MsgBoxStyle.Information, "List of Controls in " & Me.Name)
     


    Możesz oczywiście nadać swoim Label-om dowolne nazwy. Jedyne ograniczenie, to takie, że nazwy etykiet nie mogą zaczynać się liczbą.
    Zmiana nazwy jest jak najbardziej wskazana, w przypadku gdy masz 20-30 'Label-i', które odświeżasz w programie, zachowanie nazw; Label1, Label2 itd. to pierwszy krok do wprowadzenia niepotrzebnego zamieszania. Nikt nie jest w stanie pamiętać, co miał na myśli i co powinno pojawić w np Label35.
    Ja np wszystkie tego typu nazwy, jeżeli nie są to statyczne (nie zmieniane) label-e, zmieniam np na lblNazwisko, lblPESEL itd.

    Dokładnie to samo tyczy się pól edycyjnych i innych elementów.

    0
  • #5 08 Mar 2010 14:09
    muchajarek
    Poziom 10  

    Dzieki kolego za procedurę, ale albo to nie to o co mi chodziło, albo nie mogę się połapać. I prędzej to drugie , bo poziom mojego zaawansowania określam jako niziutki. Teraz może sprecyzuję. U mnie wygląda to mnie więcej tak:

    Sub PrzykładPętli()
    Dim a As Integer
    For a = 1 To 10
    If a = 1 Then
    Label1 = a
    Else
    If a = 2 Then
    Label2 = a
    Else
    If a = 3 Then
    Label3 = a

    .....itd


    A ja bym chciał jeśli to możliwe w miejsce cyferki przy etykiecie przypisać wartość zmiennej

    0
  • Pomocny post
    #6 08 Mar 2010 14:26
    arnoldziq
    Moderator Programowanie

    Dokładnie o to chodzi :

    Code:
    Dim loControl As Control
    
    Dim zmienna as integer
    Dim warosc as string
    Dim nazwa as string

    zmienna = 3 // numer label-a
    wartosc = "jakas wartosc" //jaka wartość ma być do LabelX przypisana
    nazwa = "Label" + CStr(zmienna) //nazwa Label-a, Edit-a czy co tam szukasz

    For Each loControl In Me.Controls
         If loControl.Name = nazwa Then
            loControl.Value =  wartosc   
        EndIF
     Next loControl


    Teraz podajesz tylko wartosc - co chcesz w LabelX zapisać, oraz zmienna - numer label-a. To rozwiązuje twój problem ?
    P.S.: Nie mam tego kodu jak sprawdzić, ale poza loControl.Value na 99% działa. Tylko co do tej składni nie jestem pewien. Masz Help w VB, więc możesz to dokładnie ustalić.

    0
  • #7 08 Mar 2010 14:37
    muchajarek
    Poziom 10  

    Serdeczne, serdeczne dzięki Kolego. Już załapałem o co biega. No ale musiałeś wyjaśnić jak "chłop krowie na rowie" :D. Niestety ja po prostu dopiero zaczynam się w to bawić, ale powiem szczerze, cholernie mnie to wciągnęło.Jeszcze raz dzięki. pozdrawiam

    0
  • #8 08 Mar 2010 15:15
    zamulek
    Poziom 13  

    jeden i drugi język jest obiektowy wobec czego przypuszczalnie uda się wykonać te same działania na tych samych zmiennych zakładając tradycyjny model obiektowy.

    Nie widziałem w poście kodu, który świadczyłby że kolega prosi o dokończenie, pytanie brzmiało Czy numer etykiety Labal można zastąpić zmienną. i jest odpowiedź, uprzedziliście mnie trochę bo właśnie miałem mu napisać jak to się robi w C#, ale skoro ma VBA to mu to nie potrzebne

    0
  • #9 08 Mar 2010 21:55
    muchajarek
    Poziom 10  

    Jeszcze raz dzięki za procedurę. Ta druga okazała się w 100% przydatna. Jedynie, tak jam myślałeś - loControl.Value nie odpaliło.Poprawnie jest - loControl.Caption Pozdrawiam

    0