logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

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

loks 30 Lis 2011 13:57 6897 9
REKLAMA
  • #1 10201143
    loks
    Poziom 12  
    Posty: 84
    Ocena: 3
    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: text
    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.
  • REKLAMA
  • #2 10201324
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    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...
  • REKLAMA
  • #3 10201649
    loks
    Poziom 12  
    Posty: 84
    Ocena: 3
    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: text
    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.
    Załączniki:
    • test.zip (58.46 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • Pomocny post
    #4 10202312
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    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ę.
    Załączniki:
    • test(1).zip (29.91 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #5 10204454
    loks
    Poziom 12  
    Posty: 84
    Ocena: 3
    Wielkie dzięki. Właśnie o to chodziło:)
  • REKLAMA
  • #6 18063224
    wojtasma
    Poziom 11  
    Posty: 25
    Ocena: 10
    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?
  • #7 18063400
    kinggustav
    Poziom 27  
    Posty: 797
    Pomógł: 93
    Ocena: 93
    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.
  • #8 18063541
    wojtasma
    Poziom 11  
    Posty: 25
    Ocena: 10
    Nie rozumiem, gdzie ten "!" ?
  • REKLAMA
  • #9 18064676
    clubs
    Poziom 38  
    Posty: 2219
    Pomógł: 629
    Ocena: 406
    Kod: VBScript
    Zaloguj się, aby zobaczyć kod
  • #10 18064722
    wojtasma
    Poziom 11  
    Posty: 25
    Ocena: 10
    Doszedłem już do tego rozwiązania, dziekuje

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono temat dynamicznego tworzenia etykiet (Label), ListBox i ComboBox w formularzu UserForm w Excelu przy użyciu VBA. Użytkownik zapytał, czy możliwe jest dostosowanie liczby etykiet w zależności od zmiennej wartości z arkusza Excel. Odpowiedzi sugerowały, że można to osiągnąć poprzez dodawanie nowych obiektów przy otwieraniu formularza oraz ich usuwanie przy zamykaniu. Uczestnicy dyskusji dzielili się kodem, który zliczał niepuste wiersze w arkuszu oraz wskazali na potrzebę użycia kolekcji Controls do zarządzania dynamicznie tworzonymi elementami. Pojawiły się również pytania dotyczące pobierania wartości z utworzonych TextBoxów oraz ich usuwania, co doprowadziło do wymiany informacji na temat metod i właściwości obiektów w VBA.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA