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

  tytuł wątku:
Wątki dyskusji

Dynamiczne nadawanie zakresu dla wielu ComboBox'ów


otwartyotwarty rozpoczął: ar7i postów: 7



napisał: ar7i
postów: 5


umieszczony:
31 marca 2012
03:22

  
Huraaaaa :D udało mi się... proszę sprawdźcie czy to jest całkiem logiczne :)

Private Sub dodaj_przepis_Click()
If TextBox1.Value = "" Then
GoTo BLAD1
End If
Dim x As Integer
Dim z As Integer
x = 2
Do While Sheets("recipe").Cells(x, "A") <> ""
x = x + 1
Loop
Sheets("recipe").Cells(x, "B") = x - 1
Sheets("recipe").Cells(x, "A") = TextBox1.Value
'Sheets("recipe").Cells(x, "C") = kategoria ?
Dim i As Integer
Dim l As Integer
l = 3
For i = 1 To 20
If Me.Controls("ingr" & i).Value = "" Then
Sheets("recipe").Cells(x, i + l) = 0
Sheets("recipe").Cells(x, i + l + 1) = 0
Else
z = 2
Do While Me.Controls("ingr" & i).Value <> Sheets("ingr").Cells(z, "A")
z = z + 1
Loop
Sheets("recipe").Cells(x, i + l) = Sheets("ingr").Cells(z, "B")
Sheets("recipe").Cells(x, i + l + 1) = Me.Controls("q" & i).Value
End If
Me.Controls("ingr" & i).Value = ""
Me.Controls("q" & i).Value = ""
l = l + 1
Next i

napisał: ar7i
postów: 5


umieszczony:
30 marca 2012
21:50

  
P.S.
Cytat:

Do While Sheets("ingr").Cells(z, 1) <> ""
z = z + 1
Loop


Ta pętla sprawdza jakie jest kolejne miejsce wolne w zakłądce "ingr" :)
napisał: ar7i
postów: 5


umieszczony:
30 marca 2012
15:22

  
nazwa pliku rozmiar
KalkulatorCiast0.11.xls 141.50 kB

Tak właśnie potrzebuję, w każdym combo aby była ta sama lista :)

Przeanalizuję Twój kod i zobaczę gdzie robię te podstawowe błędy.

Dodatkowo mam mały problem z analizowaniem problemu ... chodzi tą część kodu (w załączeniu daje plik nad którym pracuje).
Jak dla Was, cały mój kod pewnie jest prymitywny, ale nie zastanawiam się nad tym teraz jak go udoskonalać tylko chcę aby to działało a później będę próbował poprawić poszczególne segmenty tej skromnej aplikacji.

W skrócie, co program robi na tą chwilę:
- dodaje składnik do listy składników ("ingr") ze skromnym sprawdzeniem błędów, nadaj kolejny nr porządkowy składnikowi oraz układa go alfabetycznie
- modyfikuje dodany składnik nie zmieniając numeru porządkowego, z małym zabezpieczeniem przed zostawieniem pustych pól.

Teraz próbuję stworzyć możliwość dodania przepisu, czyli jak widać mamy UserForm (DodajPrzepis), który ma to nam umożliwić.
Chciałem stworzyć formułę pobierającą dane z UserForm i wpisującą je w przygotowaną tabelę (recip).
Formuła wpisywania polega na:
- przeniesieniu nazwy ciasta (działa)
- nadaniu numeru porządkowego dla ciasta (działa)
- znalezieniu składnika w ComboBoxie "ingr1" i sprawdzeniu jedno nr porządkowego, w tym wpisaniu tego nr do tabelki "recipe"
- wpisaniu liczby z pola "q1" do tabelki "recipe"
i tak dalej do "ingr20" i "q20"
dla "ingr1" i "q1" w prostej wersji wygląda to tak:
>dim z as intiger
>z = 2
> Do While skladnik <> Sheets("ingr").Cells(z, "A")
> z = z + 1
> Loop
>v = Sheets("ingr").Cells(z, "B")
>Sheets("recipe").Cells(x, "D") = v
>Sheets("recipe").Cells(x, "E") = q1.Value

i po kolei bym musiał kopiować i zmieniać dane ręcznie - chciałbym aby mi to jakiś układ pętli zrobił ale gubię się na:
>Dim skladnik As String
>Dim i As Integer
>For i = 1 To 3 'później będze do 20
>skladnik = "ingr" & i & ".Value"
>... dalsza cześć jest w pliku

zmienna skladnik powoduje błąd w VBA :(

Będę wdzięczny za pomoc i podpowiedzi ...
Pozdrawiam i dzięki z góry jeszcze raz.
napisał: admin
postów: 613


umieszczony:
28 marca 2012
12:03

  
Nie ma za co:)

Ale niestety Twoj przyklad robi to samo co moj, ale bardziej skomplkowany.
Poza tym, nie jest poprawny, wszystkie Twoje Comboboksy zawsze beda mialy te same elementow, ktore znajduja sie w pierwszej kolumnie.
Czy na pewno tego chcesz?

Poza tym pierwsza petla

Do While Sheets("ingr").Cells(z, 1) <> ""
z = z + 1
Loop



jest zupelnie niepotrzebna.

Moj kod, ktory robi dokladnie to samo co twoj:

Private Sub UserForm_Initialize()

Dim i As Integer
Dim y As Integer

For i = 1 To 20
    x = "ingr" & i
    y = 1
    
    Do While Worksheets("ingr").Cells(y, 1) <> ""
        Me.Controls(x).AddItem Worksheets("ingr").Cells(y, 1).Value
        y = y + 1
    Loop

Next i

End Sub



Cytat:
Dzięki wielkie za pomoc... troszkę musiałem pokombinować ale dałeś mi dobrą podpowiedź :)
oto jak sobie poradziłem...

Private Sub UserForm_Initialize()
Worksheets("ingr").Activate
Dim e As Integer
Dim i As Integer
Dim z As Integer
Dim y As Integer
i = 2
z = 1
Do While Sheets("ingr").Cells(z, 1) <> ""
z = z + 1
Loop
Do While i <= 21
x = "ingr" & (i - 1)
For y = 2 To (z - 1)
Me.Controls(x).AddItem Worksheets("ingr").Cells(y, 1).Value
Next y
i = i + 1
Loop
'ingr20.RowSource = "A2:" & "A" & (e - 1)
End Sub
napisał: ar7i
postów: 5


umieszczony:
28 marca 2012
11:24

  
Dzięki wielkie za pomoc... troszkę musiałem pokombinować ale dałeś mi dobrą podpowiedź :)
oto jak sobie poradziłem...

Private Sub UserForm_Initialize()
Worksheets("ingr").Activate
Dim e As Integer
Dim i As Integer
Dim z As Integer
Dim y As Integer
i = 2
z = 1
Do While Sheets("ingr").Cells(z, 1) <> ""
z = z + 1
Loop
Do While i <= 21
x = "ingr" & (i - 1)
For y = 2 To (z - 1)
Me.Controls(x).AddItem Worksheets("ingr").Cells(y, 1).Value
Next y
i = i + 1
Loop
'ingr20.RowSource = "A2:" & "A" & (e - 1)
End Sub
napisał: admin
postów: 613


umieszczony:
28 marca 2012
09:29

edytowany:
28 marca 2012
10:05

  
nazwa pliku rozmiar
Combo.zip 8.73 kB

Witam,

Nie wiem, czy o to chodzi... Moja propozycja w zalaczniku.
Nie wykorzystuje ona wlasciwosci .RowSource, bo ja uwazam, ze w tym przypadku lepiej wykorzystac metode .AddItem

Private Sub UserForm_Initialize()

Dim e As Integer
Dim i As Integer

i = 1

Dim x As String

Do While i <= 4
    x = "ingr" & i
    e = 2
    Do While Sheets("ingr").Cells(e, i).Value <> ""
        Me.Controls(x).AddItem Worksheets("ingr").Cells(e, i).Value
        e = e + 1
    Loop
    i = i + 1
Loop

End Sub



pozdrawiam
admin


Cytat:
Witam.
Dawno temu używałem vba do ulepszania swoich formularzy itp. Dziś praktycznie zapomniałem jak się programuje. Prawdopodobnie dla was będzie to błahy problem ale mi ułatwi pracę na mały programikiem do gromadzenia przepisów kulinarnych - taka mała inicjatywa domowa.

Szukam rozwiązania na nadawanie przez zmienną x kolejnych nazw comboboxów czyli ingr1, ingr2 ... inrg20.
Więc tak jak poniżej w kodzie:
------------------------------------------
Private Sub UserForm_Initialize()
Dim e As Integer
Dim i As Integer
e = 2
i = 1
While Sheets("ingr").Cells(e, "A") <> ""
e = e + 1
Wend
Worksheets("ingr").Activate
Do While i <> 20
i = i + 1
x = "ingr" & i
x.RowSource = "A2:" & "A" & (e - 1) 'nadawanie zakresu comboboxów o nazwach "ingr1" (do "ingr20")
Loop
End Sub
------------------------------------------
Z góry dziękuję za podpowiedzi - myślę, że kolejne rzeczy z jakimi będę miał problem będą mniej laickie :)
Arti.
napisał: ar7i
postów: 5


umieszczony:
28 marca 2012
08:49

  
Witam.
Dawno temu używałem vba do ulepszania swoich formularzy itp. Dziś praktycznie zapomniałem jak się programuje. Prawdopodobnie dla was będzie to błahy problem ale mi ułatwi pracę na mały programikiem do gromadzenia przepisów kulinarnych - taka mała inicjatywa domowa.

Szukam rozwiązania na nadawanie przez zmienną x kolejnych nazw comboboxów czyli ingr1, ingr2 ... inrg20.
Więc tak jak poniżej w kodzie:
------------------------------------------
Private Sub UserForm_Initialize()
Dim e As Integer
Dim i As Integer
e = 2
i = 1
While Sheets("ingr").Cells(e, "A") <> ""
e = e + 1
Wend
Worksheets("ingr").Activate
Do While i <> 20
i = i + 1
x = "ingr" & i
x.RowSource = "A2:" & "A" & (e - 1) 'nadawanie zakresu comboboxów o nazwach "ingr1" (do "ingr20")
Loop
End Sub
------------------------------------------
Z góry dziękuję za podpowiedzi - myślę, że kolejne rzeczy z jakimi będę miał problem będą mniej laickie :)
Arti.


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z