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
|
|
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
|
|
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
|
|