vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest sobota, 18 maja 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Dynamiczne kontrolki - jak się do nich odwołać


otwartyotwarty rozpoczął: baku postów: 13



napisał: weezer85
postów: 2


umieszczony:
10 lipca 2009
13:31

  
No właśnie próbowałem przez fora w ten sposób ale nie idzie.

For i = 1 To 10
        Worksheet("Arkusz1").Cells(1, i).Value = UserForm1.TextBox & i
    Next i

napisał: gpopiel
postów: 20


umieszczony:
8 lipca 2009
15:51

edytowany:
8 lipca 2009
15:52

  
Cytat:
Witam!
Mam pytanko. Mam formatkę z dużą ilością TextBoksów i muszę pobrać z nich dane i zapisać w arkuszu. Czy można to zrobić w jakiś krótszy sposób (np. instrukcją For itp.) niż wczytywanie po kolei każdego TextBoxa?
Za odpowiedź z góry dziękuje.


Mozna zrobic to w petli For.. Nowe Texboxy przewaznie maja dodawane na koncu kolejne liczby TextBox1, TextBox2...
Samo zczytanie z TextBoxa mozna zrobic w oddzielnej funckie z obsluga bledu On Error .....
Wtedy gdy trafisz na TextBoxa, ktory istnieje to zczyta z niego wartosc a lesli TextBox nie istnieje wyjdzie za pomoca obslugi bledu.
napisał: weezer85
postów: 2


umieszczony:
7 lipca 2009
23:03

  
Witam!
Mam pytanko. Mam formatkę z dużą ilością TextBoksów i muszę pobrać z nich dane i zapisać w arkuszu. Czy można to zrobić w jakiś krótszy sposób (np. instrukcją For itp.) niż wczytywanie po kolei każdego TextBoxa?
Za odpowiedź z góry dziękuje.
napisał: jalamas
postów: 316


umieszczony:
2 lipca 2009
16:39

edytowany:
2 lipca 2009
16:41

  
Nie wiem co masz na myśli pisząc jak się domyślam z przekąsem "wszystko fajnie"...
Rycho wsio pokazał.
Page to Container.
-------------------------------------------
Metoda Add jest metodą między innymi kolekcji Controls...
Cytat:
For other controls
Set Control = object.Add( ProgID [, Name [, Visible]])

i
Cytat:
Each Page object contains its own set of controls

więc aby 3mać się tego co Rycho powiedział, mniej więcej tak:
Dim txtZ As Object    ' TextBox
    Set txtZ = Me.MultiPage1.Pages(2).Controls.Add("Forms.TextBox.1")

    With txtZ
        .Name = "Z_moja nazwa"
        .Text = "Podaj skąd"
        .Left = 10
        .Width = 100
        .Top = 0
    End With


Lecz zawsze zastanawiam się, dlaczego w mojej aplikacji musze dynamicznie dodawać kontrolki…
Być może jej założenia nie są ok...
Bo takie dodawanie wymusza w pewnym momencie zapytanie save czy nie, user może czuć się zagubiony…
napisał: whyduck
postów: 13


umieszczony:
29 czerwca 2009
16:05

  
Wszystko fajnie :)
tylko jak dodać kontrolkę do userform1.multipage1.pages(3)
napisał: jalamas
postów: 316


umieszczony:
1 lutego 2007
18:08

  
Bo też zdarzenia
- BeforeUpdate
- AfterUpdate
- Enter
- Exit
nie sa eksponowane w klasie.
Musisz się posłużyć zbiorkiem MouseUp/Down, KeyUp/Down... ewentualnie plus Keypress....
napisał: baku
postów: 26


umieszczony:
1 lutego 2007
09:12

edytowany:
1 lutego 2007
10:12

  
Dzięki Trebor to działa.
Tylko chciałbym, żeby zdarzeniem nie było Change() a AfterUpdate(). Teraz kiedy próbuję zmienić w klasie
Private Sub Text_AfterUpdate()
...
End Sub


to niestety nie uzyskuję żądanego efektu.
Jeżeli mógłbyś jeszcze pomóc mi w tej kwestii to będę wdzięczny.


Artik:
1) z UserForm1
2) tworzone są na czas działania UserForm1
(oczywiście twoje sugestie co do rozwiązania problemu, również mile widziane)

Pozdrawiam
bakuba
napisał: Trebor
postów: 1209


umieszczony:
31 stycznia 2007
15:52

  
Proponuję inne podejście do tematu.
Wstaw Class Module i nazwij go tekstowe.
Wklej do niego taki kod

Public WithEvents Tekst As MSForms.TextBox
Private Sub Tekst_Change()
MsgBox UserForm1.ActiveControl.Name
End Sub



Twoją procedurę zmień na taką
' zakładam z góry że nie bedzie więcej Zetów niż 20 i Do niż 20
Dim PoleTekstowe(1 To 20, 1 To 2) As New tekstowe
Dim pozycja As Integer ' globalne
Dim ktory As Integer ' globalne

Private Sub CommandButton1_Click()

ktory = ktory + 1
pozycja = pozycja + 5


      Dim txtZ As Object ' TextBox
      Dim txtDo As Object 'TextBox

      Set txtZ = UserForm1.Controls.Add("Forms.TextBox.1")
      Set txtDo = UserForm1.Controls.Add("Forms.TextBox.1")
     
     With txtZ
          .Name = "Z" & ktory
          .Text = "Podaj skąd"
          .Left = 10
          .Width = 100
          .Top = 10 + (pozycja * 5)
      End With
      With txtDo
          .Name = "Do" & ktory
          .Text = "Podaj dokąd"
          .Left = 150
          .Width = 100
          .Top = 10 + (pozycja * 5)
      End With
      
      
        Set PoleTekstowe(ktory, 1).Tekst = Controls("Z" & ktory)
        Set PoleTekstowe(ktory, 2).Tekst = Controls("Do" & ktory)

End Sub


Pozdrawiam
napisał: baku
postów: 26


umieszczony:
31 stycznia 2007
08:58

  
to teraz kolejne pytanie związane z dynamicznymi kontrolkami.
Chciałbym aby dla każdej nowoutworzonej kontrolki dopisywał siękod procedury obsługu zdarzeń. Mam coś takiego
Dim pozycja As Integer ' globalne
Dim ktory As Integer ' globalne
Dim nextline As Integer
Private Sub CommandButton1_Click()
Dim code As String

ktory = ktory + 1
pozycja = pozycja + 5

     On Error Resume Next
     Set x = ActiveWorkbook.VBProject
     If Err <> 0 Then
         MsgBox "Błąd.", vbCritical
         On Error GoTo 0
         Exit Sub
     End If

     Dim txtZ As Object ' TextBox
     Dim txtDo As Object 'TextBox

     Set txtZ = UserForm1.Controls.Add("Forms.TextBox.1")
     Set txtDo = UserForm1.Controls.Add("Forms.TextBox.1")
    
    With txtZ
         .Name = "Z" & ktory
         .Text = "Podaj skąd"
         .Left = 10
         .Width = 100
         .Top = 10 + (pozycja * 5)
     End With
     With txtDo
         .Name = "Do" & ktory
         .Text = "Podaj dokąd"
         .Left = 150
         .Width = 100
         .Top = 10 + (pozycja * 5)
     End With

    code = "Private Sub Z" & ktory & "_Change()" & vbCrLf
    code = code & " MsgBox ""Nie można uaktywnić arkusza Arkusz1.""" & vbCrLf
    code = code & "End Sub"
    
    With x. _
      VBComponents("UserForm1").CodeModule
        nextline = .CountOfLines + 1
        .InsertLines nextline, code
    End With

     UserForm1.Show
End Sub



kod pojawia się w UserForm1, ale niestety kontrolka "Z1" nie reaguje przy zmianie.
Czy zna ktoś rozwiązanie tego problemu. Za pomoc z góry dziękuję.
Pozdrawiam
kuBaku
napisał: baku
postów: 26


umieszczony:
24 stycznia 2007
15:07

  
Krótko, zwięźle i na temat ... :)
Dzięki!
Pozdrawiam
napisał: Trebor
postów: 1209


umieszczony:
23 stycznia 2007
15:47

  
Hej
MsgBox Controls("Z1").Text



Pozdrawiam
napisał: baku
postów: 26


umieszczony:
23 stycznia 2007
14:03

  
Witam Szanowne Towarzystwo!

Mam formularz, gdzie umieszczony jest Button, który dodaje TextBoxy, do których
wpisywane są informacje.
Dim pozycja As Integer ' globalne
Dim ktory As Integer ' globalne
Sub AddTxtBox()

ktory = ktory + 1
pozycja = pozycja + 5

    On Error Resume Next
    Set x = ActiveWorkbook.VBProject
    If Err <> 0 Then
        MsgBox "Błąd.", vbCritical
        On Error GoTo 0
        Exit Sub
    End If

    Dim txtZ As Object ' TextBox
    Dim txtDo As Object 'TextBox

    Set txtZ = UserForm1.Controls.Add("Forms.TextBox.1")
    Set txtDo = UserForm1.Controls.Add("Forms.TextBox.1")
   
   With txtZ
        .Name = "Z" & ktory
        .Text = "Podaj skąd"
        .Left = 10
        .Width = 100
        .Top = 10 + (pozycja * 5)
    End With
    With txtDo
        .Name = "Do" & ktory
        .Text = "Podaj dokąd"
        .Left = 150
        .Width = 100
        .Top = 10 + (pozycja * 5)
    End With

    UserForm1.Show
     
End Sub



Moje pytanie jest takie jak odwołać się do wartości poszczególnych TxtBox'ów.
Za pomoc dziękuję i pozdrawiam
baKuba


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z