Discussion:
[VBA + Word] Wybieranie wielu pozycji z listy
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
krzyga
2005-08-11 19:23:50 UTC
Permalink
Cześć wszystkim,


Chciałbym stworzyć makro w Wordzie, które po uruchomieniu (np. po
wejściu w pole tekstowe formularza) wyświetlałoby listę z
kilkunastoma/dziesięcioma pozycjami do wyboru. Użytkownik wybierałby
żądane pozycje, które następnie pojawiałyby się w polu formularza
w Wordzie. Chodzi o to żeby można było umieścić w formularzu tylko
kilka/kilkanaście pozycji z wielu możliwych, nie ujawniając reszty.
Da sie coś takiego zrobić, a jeśli tak to jak? :-)


Z góry dzięki za info.
pxd74
2005-08-17 10:10:34 UTC
Permalink
Post by krzyga
Cześć wszystkim,
Chciałbym stworzyć makro w Wordzie, które po uruchomieniu (np. po
wejściu w pole tekstowe formularza) wyświetlałoby listę z
kilkunastoma/dziesięcioma pozycjami do wyboru. Użytkownik wybierałby
żądane pozycje, które następnie pojawiałyby się w polu formularza
w Wordzie. Chodzi o to żeby można było umieścić w formularzu tylko
kilka/kilkanaście pozycji z wielu możliwych, nie ujawniając reszty.
Da sie coś takiego zrobić, a jeśli tak to jak? :-)
Musisz użyć formularza typu UserForm.
Wejdź do Edytora VBA i wybierz menu Insert -> UserForm, nastepnie na nim
połóż kontrolki typu CheckBox i z jeden przycisk (CommandButton). Dwukrotnie
kliknij na ten przycisk i otworzy Ci sie kod procedury kliknięcia na ten
przycisk. W środku wpisz kod, który będzie wpisywał określone pozycje do
listy rozwijalnej formularza, np. coś takiego:

Private Sub CommandButton1_Click()
Dim i As Long

For i = 0 To Me.Controls.Count - 1
If TypeName(Me.Controls(i)) = "CheckBox" Then
If Me.Controls(i).Value = True Then
ActiveDocument.FormFields("Lista1").DropDown.ListEntries.Add
Me.Controls(i).Caption
End If
End If
Next
Me.Hide
End Sub

gdzie Lista1, to nazwa zakładki.

kod makra uruchamianego po wejściu do kontrolki listy rozwijanej formularza
byłby nastepujący:

Sub Jeden()
UserForm1.Show
End Sub

Uwaga: Po powtórnym wejściu do listy rozwijalnej najpierw pokazuje się lista
z wartościami, a dopiero później uruchamia się makro. Nie dzieje się tak,
gdy lista jest pusta (np. przy pierwszym wejściu do niej.


--
Pozdrowienia
pxd74
krzyga
2005-08-18 19:46:54 UTC
Permalink
Post by pxd74
Musisz użyć formularza typu UserForm.
Wejdź do Edytora VBA i wybierz menu Insert -> UserForm, nastepnie na nim
połóż kontrolki typu CheckBox i z jeden przycisk (CommandButton). Dwukrotnie
kliknij na ten przycisk i otworzy Ci sie kod procedury kliknięcia na ten
przycisk. W środku wpisz kod, który będzie wpisywał określone pozycje do
Dzięki za odpowiedź, ale troche nie o to mi chodziło. Ja wogóle nie chce
listy rozwijanej. Lista rozwijana ma to do siebie, że można wybrać z niej
tylko jedną pozycję, która potem się pojawi w formularzu, a ja chce żeby
pojawiło się ich kilka/naście na raz.
Bardziej więc pasowałoby mi wstawienie do formularza zwyczajnego pola
tekstowego, po wejściu na które uruchamiałby się UserForm, zaznaczałbym co
trzeba i potem to pojawiałoby się zwyczajnie w polu tekstowym formularza.
Rozumiem więc, że wystarczy zapewne zmienić tą linijke:

ActiveDocument.FormFields("Lista1").DropDown.ListEntries.Add
(Me.Controls(i).Caption)

(notabene powinny być chyba nawiasy, inaczej nie działało :-)

Pozdrawiam
pxd74
2005-08-18 22:07:06 UTC
Permalink
U?ytkownik "krzyga" <***@gmail.com> napisa? w wiadomo?ci news:de2oi2$vmp$***@news2.ipartners.pl...
(...)
Post by pxd74
ActiveDocument.FormFields("Lista1").DropDown.ListEntries.Add
(Me.Controls(i).Caption)
Niezupełnie najlepiej tą cała procedurę zapisać tak:

Private Sub CommandButton1_Click()
Dim i As Long
Dim str As String

For i = 0 To Me.Controls.Count - 1
If TypeName(Me.Controls(i)) = "CheckBox" Then
If Me.Controls(i).Value = True Then
str = str & Me.Controls(i).Caption & vbCr
End If
End If
Next
ActiveDocument.FormFields("Text1").Result = str
Me.Hide
End Sub
Post by pxd74
ActiveDocument.FormFields("Lista1").DropDown.ListEntries.Add
(Me.Controls(i).Caption)
(notabene powinny być chyba nawiasy, inaczej nie działało :-)
Nie. Po prostu program do obsługi grup dyskusyjnych przeniósł drugą cześć
linikji do nastepnej :-). Oryginalnie powinny byc one w jednej linii
oddzielonej spacją. Jesli chcesz je umieścić w dwóch linikjach, to na końcu
pierwszej powinienes umieścić spację i znak podkreślenia:

ActiveDocument.FormFields("Lista1").DropDown.ListEntries.Add _
Me.Controls(i).Caption


Zapis z nawiasami okragłymi jest akceptowany przez kompilator języka VB,
jednak "nie jest on w stylu języka VB", gdyż prawie zawsze argumenty
instrukcji (lub funkcji, ale bez zwracania wartości) w dokumentacji i
przykładach są pisane bez nawiasów z argumentami oddzielanymi przecinkami.
Niektórzy programiści, którzy przesiedli się na VB z innych języków używają
nawiasów okrągłych, gdy funkcja nie zwraca wartości, jednak większość nie
używa tych (w sumie niepotrzebnych) nawiasów.
--
Pozdrowienia
pxd74
eewwaa
2005-09-06 07:59:34 UTC
Permalink
Witam,
mam podobny problem i szczerze i uczciwe mówiąc jestem kompletnym
laikiem jeżeli chodzi o makra i bardzo bym prosiła o instrukcję krok
po kroku
z góry dzięki
Ewa

Loading...