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

[VBA][Excel] Dynamiczne tworzenie etykiet na formie UserForm

30 Lis 2011 13:57 5391 9
  • Poziom 12  
    Witam,
    Czy można na formie dynamicznie tworzyć etykiety (Label), ListBox, ComboBox w zależności od zadanej liczby? Ta liczba zawsze będzie zmienna.
    Poniżej kod programu, który dla 5-ciu etykiet nazwanych Label1....Label5, wstawionych do UserForm, w pole Caption wpisuje odpowiednie wartości z Excel'a.
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Chciałbym dynamicznie tworzyć liczbę etykiet (i innych rzeczy), tak abym nie musiał wcześniej umieszczac ich na formie. Wprowadził bym dodatkową zmienną i od niej uzależniał liczbę etykiet. Wtedy przy pomocy Control modyfikował bym odpowiednie parametry.
    Druga sprawa to chętnie bym poczytał w temacie Me.Controls i zmiennych deklarowanych jako Control. Nie mogę znaleźć w Helpie VBA, ani tu na forum informacji:
    - co to jest i do czego służy,
    - lista parametrów,
    - przykłady zastosowań.
    Być może za słabo szukam, ale spędziłem na poszukiwaniach już paręnaście godzin.
    Bede wdzięczny za pomoc.
  • Moderator Programowanie
    loks napisał:
    Chciałbym dynamicznie tworzyć liczbę etykiet (i innych rzeczy), tak abym nie musiał wcześniej umieszczac ich na formie.
    Rozumiem, że chodzi o tworzenie na formie. Można.
    1) Przy otwarciu wstawiasz nowe obiekty, przy zamknięciu te wstawione (proszę bez skojarzeń) usuwasz. Liczbę etykiet zdaje się można "wydłubać" z kolumny 11 arkusza "Arkusz2".
    Dla lepszego zrozumienia przydałby się przykład.
    2) Przez ukrywanie/odkrywanie elementów formy.

    Kolekcja Controls formy rządzi się tymi samymi prawami jak każda inna kolekcja. Może kilka wyjątków znalazło by się w metodach i właściwościach...
  • Poziom 12  
    Chętnie bym poczytał na temat kolekcji Control i innych. Możesz coś podrzucić? Na forum nie mogę znaleźć. Poniżej kod programu. Załączyłem również plik.
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Jak widzisz etykiety Label na formie mam z góry dodane i te które nie są mi potrzebne Visible ustawiam na False. Chciałbym je dodawać dynamicznie w zalezności od zmiennej liczby_wierszy.
  • Pomocny post
    Moderator Programowanie
    Tutaj Link, gdzie jest opisane co i jak.

    W załączniku: zastosowanie w Twoim przypadku. Dorobiłem i podstawiłem do wywołania nową procedurkę.
  • Poziom 12  
    Wielkie dzięki. Właśnie o to chodziło:)
  • Poziom 9  
    Witam,

    Odświeżam temat mam problem dopiero się uczę i nie wiem jak pobrać z tak wygenerowanego TextBox wczesniej przypisaną wartość
    t = 1
    ' TextBox
    Set NewTextBox = Me.Controls.Add("Forms.textbox.1")
    With NewTextBox
    .Name = "TextBoxNrZl" & t
    .Value = Sheets("Dane zasilające").Cells(i, 16)
    .Top = yStart
    .Left = xStart + 15
    .Width = 60
    .Height = 18
    .Font.Size = 10
    .Font.Name = "Tahoma"
    .BackColor = &H80000005
    End With

    MsgBox TextBoxNrZl1.Value daje komunikat jak nizej
    [VBA][Excel] Dynamiczne tworzenie etykiet na formie UserForm


    Dodano po 9 [minuty]:

    Druga sprawa to jak zniszczyć takie utworzone TextBox-y?
  • Poziom 22  
    Jak szukałem czegoś na ten temat to zauważyłem, że trzeba użyć ! zamiast kropki. U mnie się to nie przydało, więc się nie wgłębiałem, ale coś jest na rzeczy.
    Co do usuwania to być może służy do tego metoda (Me.Controls.)Remove. Proponuję doczytać, bo też jeszcze nie usuwałem kontrolek.
  • Poziom 9  
    Nie rozumiem, gdzie ten "!" ?
  • Poziom 33  
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
  • Poziom 9  
    Doszedłem już do tego rozwiązania, dziekuje