Strona: [  << <   1 2   > >>  ]  z  2     
Autor Temat: nextrow
nie mam pojecia




Typ: neutral
Postów: 15
Zarejestrowany: May 2005
nextrow

mam taki mały problem. robie arkusz króty prowadzi rejest wydatkow z podziałem na firmy i(oddzielne arkusze) oraz robi zbiorówke. Wszystko dział z wyjatkiem jednego
Jest kilka firm uzytkownik wybiera je sobie z listy otwiera mu sie arkusz danej firmy ale arkusz zbiorczy pozostaje ukryty. Użytkownik wprowadza sobie dane w arkuszach firm sa one zapiywane i do tego momentu jest ok. problem wystepuje w arkuszu zbirczym a wyglada on tak:
- w poszczególnych firmach dane zapisuja sie wiersz po wierszu i jest to ok ale w arkuszu zbiorczym dane nie zapisuja sie wiersz po wierszu tylko to co zostało wprowadzone poprzez inna frmą jest napisywane.

Pomocy
P.S nie wiem czy napisałem to zrozumiale


_____________________________________________
Mariusz

09-05-2005 13:19
Pokaż profil nie mam pojecia  Wyślij email do nie mam pojecia   
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Maciek by umiał zadać właściwe pytania , ja pewnie nie, ale spróbuję:

- czy to oznacza, że w arkuszu zbiorczym po "zmianie firmy" dane zaczynają się zapisywać znowu od tego samego miejsca (wiersza ) zamiast w 1-szym wolnym wierszu ?

- w jaki sposób na arkuszu zbiorczym identyfikowna jest firma, bo przecież ma ona chyba jakiś symbol i przed zapisem chyba sprawdzasz czy w danym wierszu coś jest zapisane i dla jakiej firmy?

- kiedy dla "danej firmy" dane mają być dopisywane, a kiedy np nadpisywane (tzn. czy możliwe są poprawki zapisu) ?

coś wiecej napisz, bo sprawa chyba nie jest trudna...

P.S. Do identyfikacji ostatniego wypełnionego wiersza możesz użyć metody

SpecialCells

z odpowiednimi parametrami Type i Value:

expression.SpecialCells(Type, Value)

chociażby tak na przykład:

Sub ostani()
Dim ostW As Long
With ThisWorkbook.Worksheets("sinus" )
    ostW = .Cells.SpecialCells(xlCellTypeLastCell, xlTextValues).Row
End With
MsgBox ostW
End Sub

[Post edytowany dnia 10-05-2005 09:41 przez karolinavb]


_____________________________________________
Karolina

10-05-2005 09:11
Pokaż profil karolinavb  Wyślij email do karolinavb   
nie mam pojecia




Typ: neutral
Postów: 15
Zarejestrowany: May 2005

Karolino

1. Zgadza się po zmianie firmy dane zapisują sie od poczatku a nie w pierszym wolnym wierszu

2. W zbirczym fima nie jest identyfikowane, ponieważ do niego wpisywane są tylko nazwa towaru, nr faktury, data i kwota

3. Dane dla firmy mają być zawsze dopisywane  chyba że jest jakas procedura która umozliwiały by powiedzmy np; edycje 5 wiersza.

Arkusz wyglada nastepująco:
Moja kierowniczka prowadzi mini rejest zakupów i dotej pory robiła wszystkow w oddzielnych arkuszach tj. zestawienie zbiorcze i rejest zakupów od danej firmy. A teraz chce robić wszystko za jednym zamachem. Reszta przy twojej pomocy działa ok problem jest tylko z tym.

Tak prawde mowiac z vba zabawę zaczalem całkiem niedawno i to co moze byc proste dla mnie moze byc trudne a wksiazkach wszystkiego nie ma.


_____________________________________________
Mariusz

10-05-2005 10:18
Pokaż profil nie mam pojecia  Wyślij email do nie mam pojecia   
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Mariuszu

Miej na uwadze, że jestem blondynką

- zatem kierowniczka aktywuje arkusz danej firmy

- jak rozumiem nie ma formularza, ani Userform (jeśli nie to może o tym trzeba byłoby pomyśleć ??? elegancko i uprościłoby sprawę)

- w pewnym momencie kończy zapis

- i czy dopiero teraz zawartość tego arkusza przepisuje się do zbiorówki, czy kiedy ?

-innymi słowy proszę tu wklepać ten fragment kodu, który jest odpwiedzialny za to kopiowanie danych i opisać moment czy miejsce gdzie jest wywoływany, bo w tym tkwi błąd... mogę się tylko domyślać , że jest to jedynie formuła w zbiorówce i pewnie dlatego tak się dzieje ????

- bo jeśli ma UserForm to ????

[Post edytowany dnia 10-05-2005 11:29 przez karolinavb]


_____________________________________________
Karolina

10-05-2005 11:28
Pokaż profil karolinavb  Wyślij email do karolinavb   
nie mam pojecia




Typ: neutral
Postów: 15
Zarejestrowany: May 2005

Jest user form

a oto kod:

Private Sub CmbArkusze_Click() 'combobox firmy
' wybor
With Me.CmbArkusze
    If .ListIndex >= 0 Then
        ThisWorkbook.Sheets(.Column(0, .ListIndex)).Activate
    End If
End With
End Sub
Private Sub UserForm_Initialize()
Dim oArk As Worksheet
With Me.CmbArkusze
    ' nie ma być edytowany tylko wybierać arkusze
    .Style = fmStyleDropDownList
    For Each oArk In ThisWorkbook.Sheets
        .AddItem oArk.name
    Next
    ' zawsze jest co najmniej 1-den arkusz nie trzeba ListCount sprawdzać
    ' a jeśli ma być od razu 1-szy aktywowany
    '.ListIndex = 0
    UpdateList
    If Not (oArk.Visible = xlSheetHidden Or oArk.Visible = xlSheetVeryHidden) Then
            .AddItem oArk.name
End If
End With
End Sub



Private Sub CommandButton2_Click() 'czyszczenie formularza
Call kasuj
TextBox1.SetFocus
End Sub

Private Sub kasuj()
TextBox1.Value = "" 'towar
TextBox2.Value = "" 'fr
TextBox3.Value = "" 'data
TextBox4.Value = "" 'kwota

End Sub
Private Sub CommandButton3_Click() 'zamknij
Call kasuj
UserForm1.Hide
End Sub

Private Sub UserForm_Click() 'dodaj

Private Sub czyAkceptuj()
With UserForm1
If .TextBox1.Value <> "" Then
                            CommandButton1.Enabled = True
                           
Else
  CommandButton1.Enabled = False
   
End If
End With
End Sub

End Sub

Private Sub CommandButton1_Click() 'Dodawanie wpisu

'lp = Sheets("Dane".Range("a3".Value

Dim NextRow As Long
    NextRow = Range("A65536".End(xlUp).Row + 1
  '  Cells(NextRow, 1) = lp + 1
    Cells(NextRow, 1) = TextBox1.Value
    Cells(NextRow, 2) = TextBox2.Value
    Cells(NextRow, 3) = TextBox3.Value
    Cells(NextRow, 4) = TextBox4.Value
   
      NextRow = Range("A65536".End(xlUp).Row + 1
  '  Cells(NextRow, 10) = lp + 1
   
    ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 2).Value = Me.TextBox1.Value 'zaliczka
    ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 3).Value = Me.TextBox2.Value
    If OptionButton2.Value = True Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 4).Value = Me.TextBox4.Value
    If OptionButton2.Value = False Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 4).Value = " " 'puste
    If OptionButton3.Value = True Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 5).Value = Me.TextBox4.Value
    If OptionButton3.Value = False Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 5).Value = " " 'puste
    If OptionButton4.Value = True Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 6).Value = Me.TextBox4.Value
    If OptionButton4.Value = False Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 6).Value = " " 'puste
    If OptionButton5.Value = True Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 7).Value = Me.TextBox4.Value
    If OptionButton5.Value = False Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 7).Value = " " 'puste
    If OptionButton6.Value = True Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 8).Value = Me.TextBox4.Value
    If OptionButton6.Value = False Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 8).Value = " "
    If OptionButton7.Value = True Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 9).Value = Me.TextBox4.Value
    If OptionButton7.Value = False Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 9).Value = " " 'puste
    If OptionButton8.Value = True Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 10).Value = Me.TextBox4.Value
    If OptionButton8.Value = False Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 10).Value = " " 'puste
    If OptionButton9.Value = True Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 11).Value = Me.TextBox4.Value
    If OptionButton9.Value = False Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 11).Value = " " 'puste
    If OptionButton10.Value = True Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 12).Value = Me.TextBox4.Value
    If OptionButton10.Value = False Then ThisWorkbook.Sheets("Zaliczka".Cells(NextRow, 12).Value = " " 'puste

End Sub


Userform jest wywoływane w arkuszu Menu ale po wybraniu firmy w comboboxie aktywowany jest arkusz danej firmy.

[Post edytowany dnia 10-05-2005 11:54 przez nie mam pojecia]


_____________________________________________
Mariusz

10-05-2005 11:50
Pokaż profil nie mam pojecia  Wyślij email do nie mam pojecia   
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Mariuszu

1. Tymczasem kod

Private Sub UserForm_Initialize()

With Me.CmbArkusze
    ' nie ma być edytowany tylko wybierać arkusze
    .Style = fmStyleDropDownList
    For Each oArk In ThisWorkbook.Sheets
    ' JUZ TUTAJ DODAJEMY TYLKO ARKUSZE WIDOCZNE
        If Not (oArk.Visible = xlSheetHidden Or oArk.Visible = xlSheetVeryHidden) Then
            .AddItem oArk.Name
        End If
    Next
    ' zawsze jest co najmniej 1-den arkusz nie trzeba ListCount sprawdzać
    ' a jeśli ma być od razu 1-szy aktywowany
    '.ListIndex = 0
End With

'  i dopiero tutaj UpdaetList - cokolwiek by to znaczyło... u Ciebie
End Sub


2. Poniżej być może owszem ostatnia zapisana komórka - lecz AKTYWNEGO ARKUSZA , a który jest aktywny ( arkusz firmy czy zbiorówka)??? Ja z tego kodu nie wiem, sądze, ze nie zbiorówka, a chyba szukamy tej komórki w zbiorówce ???

    NextRow = Range("A65536" ).End(xlUp).Row + 1

ponizsze też dotyczy aktywnego arkusza, bo i tu nie jest nazwa arkusza wyszczególniona:

    Cells(NextRow, 1) = TextBox1.Value
    Cells(NextRow, 2) = TextBox2.Value
    Cells(NextRow, 3) = TextBox3.Value
    Cells(NextRow, 4) = TextBox4.Value

a zatem tutaj:

ThisWorkbook.Sheets("Zaliczka" ).Cells(NextRow, 2).Value = Me.TextBox1.Value

parametr NextRow - też jest tym zidentyfikowanym wyżej i dotyczy  AKTYWNEGO ARKUSZA, a czy nim jest "Zaliczka" ???

3. Poza konkursem , kontrolki OptionButton2....10  sa w grupie (zależne ???) bo nie wiem.


_____________________________________________
Karolina

10-05-2005 12:47
Pokaż profil karolinavb  Wyślij email do karolinavb   
nie mam pojecia




Typ: neutral
Postów: 15
Zarejestrowany: May 2005

- aktywny jest arkusz firmy i te pierwsze nextrow dotycza aktywnego arkusza firmy.

- pozostałe dotyczą nieaktywnego w momęcie wpisywania danych arkusza zbiorczego

kontrolki nie są od siebie zależne

Czyli wystarczyło by inaczej zdefiniować paramet Nextrow tak aby dotyczył tego nie aktywnego arkusza ??


_____________________________________________
Mariusz

10-05-2005 12:56
Pokaż profil nie mam pojecia  Wyślij email do nie mam pojecia   
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Mariuszu

Parametr nextrow musi być identyfikowany w tym arkuszu, w którym chcesz znać numer 1-szej wolnej komórki (nie intersuje Cię wolna komórka gdziekolwiek tylko tam, gdzie chcesz dane zapisać, przynajmniej w tym przypadku), bo pomyśl, w arkuszu firmy "Murarze" jest wolny 5-ty wiersz, a  na zbiorczym jest to już 2-ga firma, a 1-sza "Malarze" zajęła już 20 wierszy więc jak ???
Zbiorczy jak sama nazwa wskazuje może mieć więcej zajętych wierszy...

Dobrym zwyczajem jest jak już tu wspominałam chyba na forum wskazywanie arkuszy w kodzie, na których chcemy wykonywać operacje wszędzie tam gdzie jest to możliwe (niektóre metody wymagają jednak aktywacji arkusza przed użyciem).... używanie takich wskazań jak Range, Cells bez wskazania arkusza często kończy sie pomyłką..

Zatem tutaj:

    Cells(NextRow, 1) = TextBox1.Value 
    Cells(NextRow, 2) = TextBox2.Value 
    Cells(NextRow, 3) = TextBox3.Value 
    Cells(NextRow, 4) = TextBox4.Value

jeśli ma być arkusz firmy ??? to trzeba identyfikować tę komórkę w arkuszu firmyi wskazać arkusz gdzie zapisujemy, a tam gdzie jak się domyślam zbiorczy, należy ponownie zidentyfikować tę komórkę tym razem dla zbiorczego:

MaxRowZbiorczy  -na przykład, one nie muszę być zapamiętane w tej samej zmiennej.

[Post edytowany dnia 10-05-2005 13:46 przez karolinavb]


_____________________________________________
Karolina

10-05-2005 13:35
Pokaż profil karolinavb  Wyślij email do karolinavb   
nie mam pojecia




Typ: neutral
Postów: 15
Zarejestrowany: May 2005

Karolino

No dobra ale jak to zrobić by uzytkownik wprowdzał wszystko z jednego userforma gdzie podstawą wyboru jest wybor firmy i jest aktywny arkusz firmy -  natomiast arkusz zbiorczy pozostaje nie aktywny a musza byc w nim wpisane tez te dane i to w nastepnym wplnym wierszu..

Napisz jak dla laika


_____________________________________________
Mariusz

11-05-2005 08:41
Pokaż profil nie mam pojecia  Wyślij email do nie mam pojecia   
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Mariuszku
Jakiego znowu laika, widzę przecież w Twoim kodzie, że już to robiłeś, odniosłeś się do arkusza o nazwie Zaliczka:

ThisWorkbook.Sheets("Zaliczka" ).Cells(NextRow, 5).Value = Me.TextBox4.Value


więc co ???

Public Function OstatniWiersz(ByVal NazwaArkusza As String) As Long
' ustalenie ostatniego wiersza
' ta procedura nie musi być w kodzie UserForm
' może być w module i można wtedy ją
' wykorzystywać w innych miejscach również.


Dim ostW As Long
With ThisWorkbook.Worksheets(NazwaArkusza)
    ostW = .Cells.SpecialCells(xlCellTypeLastCell, xlTextValues).Row
End With
OstatniWiersz = ostW
End Function

przy czym ten parametr

xlTextValues

musisz ustalić na taki jaki Tobie potrzebny, ja nie wiem co masz w tym arkuszy zbiorczym w komórkach wpisane

Public Sub WpiszDoArkusza()
' przykładowy wpis do arkusza o nazwie przykładowej Zbiorczy
' po to dokonujemy właśnie wskazania w ramach :
' With ThisWorkbook.Sheets(strArkusz)
' .....
' End With
' nie musi ten arkusz być wcale arkuszem aktywnym
' bo ja w końcu nie wiem jak się nazywa Twój zbiorczy arkusz ?


Dim lngWierszWpisu  As Long
Dim strArkusz      As String
Dim lngWiersz      As Long

strArkusz = "Zbiorczy"
With ThisWorkbook.Sheets(strArkusz)
    lngWierszWpisu = OstatniWiersz(strArkusz) + 1
        For lngWiersz = lngWierszWpisu To lngWierszWpisu + 5
            ' poniżej przed Cells jest KROPKA
            .Cells(lngWiersz, 1).Value = "Karo " & CStr(lngWiersz)
        Next
End With
End Sub

Użycie WITH (With Statement)
With ThisWorkbook.Sheets(strArkusz)
  .Cells...
End With

znaczy to samo co
ThisWorkbook.Sheets(strArkusz).Cells....

tyle tylko, że gdyby było wiecej odwołań do tegoż arkusza wystarczy pisać kropki przed metodami i właściwościami, i szybciej program działa, piszę bo mi już wodę z mózgu zrobiłeś i nie wiem co wiesz a czego nie wiesz...

P.S.
Jestem w delegacji, więc ewentualne dalsze wyjaśnienia, poźnym wieczorem...


_____________________________________________
Karolina

11-05-2005 09:43
Pokaż profil karolinavb  Wyślij email do karolinavb   
nie mam pojecia




Typ: neutral
Postów: 15
Zarejestrowany: May 2005

Karolino

Szczerze mówiąc to sam też się trochę zamotałem. Wiec jeszcze raz:

Użytkownik ma sobie plik xls otwiera go sobie i na początek ma zeszyt  Menu
Naciska sobie Commandbutton1 i otwiera mu się UserForm który wygląda tak:

- Combobox - pobiera nazwy arkuszy czyli firm - po wybraniu firmy aktywuje arkusz tej firmy
- Checkbox1 - użytkownik zaznacza go jeżeli chce wypełnić arkusz zbiorczy - Zaliczka - widoczne stają się Optionbutton (2-10)
- textbox1
- textbox2
- textbox3
- testbox4

- optionbutton1
- optionbutton2
- &#8230;

-Commandbutton1 - dodaj
-Commnadbutton2 - czyść
-Commandbutton3 - zamknij userform

I dalej:
Do arkusza firmy idzie: Textbox od 1 do 4 i ten arkusz jest wtedy aktywny
Do zbiorczego (Zaliczki) idzie : Textbox1 i Textbox2 oraz gdy użytkownik zaznaczy odpowiedniego Optionbutton (Określa kolumnę w arkuszu zbiorczym gdzie ma się to znaleźć) Texbox4

Użytkownik klika przycisk dodaj i dane jednocześnie powinny znaleźć w arkuszy firmy i arkusz zbiorczego (zaliczki )

Kod dla dodanie do aktywnego arkusza firmy:

'lp = Sheets("Dane".Range("a3".Value 'dodaje wpis do aktywnego arkusza firmy

Dim NextRow As Long

    NextRow = Range("A65536".End(xlUp).Row + 1
  '  Cells(NextRow, 1) = lp + 1
    Cells(NextRow, 1) = TextBox1.Value
    Cells(NextRow, 2) = TextBox2.Value
    Cells(NextRow, 3) = TextBox3.Value
    Cells(NextRow, 4) = TextBox4.Value

Kod do dodania wpisu w nieaktywnego w tym czasie  arkusz zbiorczego (zaliczki)

Dim lngWierszWpisu  As Long
Dim strArkusz      As String
Dim lngWiersz      As Long

strArkusz = "Zaliczka"
With ThisWorkbook.Sheets(strArkusz)
    lngWierszWpisu = OstatniWiersz(strArkusz) + 1
        For lngWiersz = lngWierszWpisu To lngWierszWpisu + 5
            ' poniżej przed Cells jest KROPKA
            .Cells(lngWiersz, 2).Value = Me.TextBox1.Value & CStr(lngWiersz) 'zaliczka
            .Cells(lngWiersz, 3).Value = Me.TextBox2.Value
            If OptionButton2.Value = True Then .Cells(lngWiersz, 4).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton2.Value = False Then .Cells(lngWiersz, 4).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton3.Value = True Then .Cells(lngWiersz, 5).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton3.Value = False Then .Cells(lngWiersz, 5).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton4.Value = True Then .Cells(lngWiersz, 6).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton4.Value = False Then .Cells(lngWiersz, 6).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton5.Value = True Then .Cells(lngWiersz, 7).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton5.Value = False Then .Cells(lngWiersz, 7).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton6.Value = True Then .Cells(lngWiersz, 8).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton6.Value = False Then .Cells(lngWiersz, 8).Value = " " & CStr(lngWiersz)
            If OptionButton7.Value = True Then .Cells(lngWiersz, 9).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton7.Value = False Then .Cells(lngWiersz, 9).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton8.Value = True Then .Cells(lngWiersz, 10).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton8.Value = False Then .Cells(lngWiersz, 10).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton9.Value = True Then .Cells(lngWiersz, 11).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton9.Value = False Then .Cells(lngWiersz, 11).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton10.Value = True Then .Cells(lngWiersz, 12).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton10.Value = False Then .Cells(lngWiersz, 12).Value = " " & CStr(lngWiersz) 'puste
        Next
End With

Całość wygląda tak i chyba coś pomotałem:

Private Sub CommandButton1_Click() 'dodanie wpisu

'lp = Sheets("Dane".Range("a3".Value

Dim NextRow As Long

    NextRow = Range("A65536".End(xlUp).Row + 1
  '  Cells(NextRow, 1) = lp + 1
    Cells(NextRow, 1) = TextBox1.Value
    Cells(NextRow, 2) = TextBox2.Value
    Cells(NextRow, 3) = TextBox3.Value
    Cells(NextRow, 4) = TextBox4.Value

Dim lngWierszWpisu  As Long
Dim strArkusz      As String
Dim lngWiersz      As Long

strArkusz = "Zaliczka"
With ThisWorkbook.Sheets(strArkusz)
    lngWierszWpisu = OstatniWiersz(strArkusz) + 1
        For lngWiersz = lngWierszWpisu To lngWierszWpisu + 5
            ' poniżej przed Cells jest KROPKA
            .Cells(lngWiersz, 2).Value = Me.TextBox1.Value & CStr(lngWiersz) 'zaliczka
            .Cells(lngWiersz, 3).Value = Me.TextBox2.Value
            If OptionButton2.Value = True Then .Cells(lngWiersz, 4).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton2.Value = False Then .Cells(lngWiersz, 4).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton3.Value = True Then .Cells(lngWiersz, 5).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton3.Value = False Then .Cells(lngWiersz, 5).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton4.Value = True Then .Cells(lngWiersz, 6).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton4.Value = False Then .Cells(lngWiersz, 6).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton5.Value = True Then .Cells(lngWiersz, 7).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton5.Value = False Then .Cells(lngWiersz, 7).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton6.Value = True Then .Cells(lngWiersz, 8).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton6.Value = False Then .Cells(lngWiersz, 8).Value = " " & CStr(lngWiersz)
            If OptionButton7.Value = True Then .Cells(lngWiersz, 9).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton7.Value = False Then .Cells(lngWiersz, 9).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton8.Value = True Then .Cells(lngWiersz, 10).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton8.Value = False Then .Cells(lngWiersz, 10).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton9.Value = True Then .Cells(lngWiersz, 11).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton9.Value = False Then .Cells(lngWiersz, 11).Value = " " & CStr(lngWiersz) 'puste
            If OptionButton10.Value = True Then .Cells(lngWiersz, 12).Value = Me.TextBox4.Value & CStr(lngWiersz)
            If OptionButton10.Value = False Then .Cells(lngWiersz, 12).Value = " " & CStr(lngWiersz) 'puste
        Next
End With


End Sub

[Post edytowany dnia 11-05-2005 13:46 przez nie mam pojecia]


_____________________________________________
Mariusz

11-05-2005 13:38
Pokaż profil nie mam pojecia  Wyślij email do nie mam pojecia   
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Mariuszu
Twoj tekst nadal do końca nie zawiera wszystkich informacji. To co podałam w poprzednim poście to były tylko przykłady, a nie kody do wykorzystania 1:1.
Wobec tego napisałam tak jak to zrozumiałam. Niestety nie znam do końca Twojego XLS. Przeczytaj komentarze.

Kod UserForm ( dobrze jest nadawać znaczące nazwy kontrolkom, bo ciężko je szukać w kodzie, a nie CommandButton1 czy TextBox itp....)

Option Explicit

Private Sub CheckBox1_Change()
Call UpdateControls
End Sub

Private Sub ComboBox1_Click()
' lecz ja bym wolała osobny przycisk zatwierdzający żądanie aktywacji
' wybranego arkusza bo tak to niewprawny użytkownik będzie
' "migał tymi arkuszami"
' ponizsze linijki przeniosłabym do zdarzenia Click tego przycisku
' użyłeś słowa otwierał ..... skoro masz na myśli Arkusz a nie Skoroszyt (XLS) to Activate ???
With ComboBox1
    If .ListIndex >= 0 Then
        ThisWorkbook.Sheets(.Column(0, .ListIndex)).Activate
    End If
End With
End Sub

Private Sub CommandButton1_Click()
' teraz obsługujemy arkusz Firmy
Dim i As Long
Dim NextRow As Long
Dim NextRowZal As Long

Dim bFirma As Boolean
Dim strArkusz      As String
Dim lngWiersz      As Long

' po 1-sze trzeba sprawdzić czy arkusz firmy jest aktywny
' jeśli nie jest aktywny arkusz jakiejś firmy należy zwrócić uwagę
' użytkwonikowi ja nie wiem jakie jest Twoje założenie ????

' nazwa aktywnego arkusza do zmiennej

strArkusz = ActiveSheet.Name
With ComboBox1
    If .ListIndex >= 0 Then
        For i = 0 To .ListCount - 1
            If strArkusz = .Column(0, .ListIndex) Then
                bFirma = True
            End If
        Next
    End If
    If Not bFirma Then
        MsgBox "Nie aktywowano arkusza zadnej Firmy, wybierz arkusz w Listy Combo"
        .SetFocus
        ' może należałoby też sprawdzić czy jest wybrany arkusz, który znajduje sie na liście
        ' na 1-szej pozycji ???
        Exit Sub
    End If
End With
' ok arkusz aktywowany - jaki jest jego wolny wiersz
NextRow = OstatniWiersz(strArkusz) + 1
' być moze ponizsza jest lepsza ?
' NextRow = ActiveSheet.Range("A65536" ).End(xlUp).Row + 1
' wpisujemy do aktywnego arkusza
With ActiveSheet
    .Cells(NextRow, 1) = TextBox1.Value
    .Cells(NextRow, 2) = TextBox2.Value
    .Cells(NextRow, 3) = TextBox3.Value
    .Cells(NextRow, 4) = TextBox4.Value
End With

' dodaj do zbiorczego (Zaliczki) idzie : Textbox1 i Textbox2 oraz
' gdy użytkownik zaznaczy odpowiedniego Optionbutton
'(Określa kolumnę w arkuszu zbiorczym gdzie ma się to znaleźć) Texbox4

' a zatem mój wniosek jest taki, że tylko do jednej z komórek
' 4 do 12 jest wpisywana TexBox4, pozostałe są puste
' zatem wyczyszczę wszystkie a wpisze tylko 1-den
' bo trudno sobie wyobrazić, ż pojedynczy niezgrupowany OptionButton
' ma mieć 2 stany ??? wtedy byłby CheckBox a nie OptionButton ????
' teraz arkusz zbiorczy zaliczek !!!!!
' jeśli CheckBox nie jest zaznaczony nie wpisujemy do zbiorczego

If Me.CheckBox1.Value = False Then Exit Sub
strArkusz = "Zaliczka"
' szukamy wolnego wiersza nie ma potrzeby wprowadzac nowe zmiennej
' można wykorzystać tą samą tylko zmienić jej wartośc
NextRowZal = OstatniWiersz(strArkusz) + 1
' badamy który OptionButton jest wybrany
With ThisWorkbook.Sheets(strArkusz)
    .Cells(NextRowZal, 2).Value = TextBox1.Value
    .Cells(NextRowZal, 3).Value = TextBox2.Value
    i = KtoryOptionWybrany()
    ' czy wybrany Option od 2 do 10
    If i >= 2 And i <= 10 Then
        i = i - 2
        .Range(.Cells(NextRowZal, 4), .Cells(NextRowZal, 14)).Value = ""
        .Cells(NextRowZal, 4 + i).Value = TextBox4.Value
    End If
End With
End Sub

Private Sub CommandButton3_Click()
Unload Me
End Sub

Private Sub TextBox1_Change()
If TextBox1.Text = "" Then
    CommandButton1.Enabled = False
Else
    CommandButton1.Enabled = True
End If
End Sub

Private Sub UserForm_Initialize()
Dim oArk As Worksheet
With ComboBox1
    ' lecz tutaj powinny być chyba tylko arkusze firm !!!!!!!!!!!!
    ' a nie wszystkie
    ' wobec tego trzeba byłoby umieścić je w tablicy ?????
    ' nie ma być edytowany tylko wybierać arkusze
    .Style = fmStyleDropDownList
    For Each oArk In ThisWorkbook.Sheets
        If Not (oArk.Visible = xlSheetHidden Or _
            oArk.Visible = xlSheetVeryHidden) And _
            oArk.Name <> "Menu" Then
            ' powyżej wyeliminowany arkusz menu bo
            ' do niego chyba nic nie wpisujemy
            ' innych arkuszy nie znam
                .AddItem oArk.Name
        End If
    Next
    ' zawsze jest co najmniej 1-den arkusz nie trzeba ListCount sprawdzać
    ' a jeśli ma być od razu 1-szy aktywowany
    '.ListIndex = 0
    CommandButton1.Enabled = False
    Call UpdateControls
End With
End Sub

Function KtoryOptionWybrany() As Integer
' Optiony zależne sa wtedy gdy tylko 1-den z nich można wybrać
' można wszystkie na UserForm lub grupowac za pomocą
' właściwości GroupName
Dim i As Integer
KtoryOptionWybrany = -1
For i = 1 To 10
    If Me.Controls("OptionButton" & CStr(i)).Value Then
        KtoryOptionWybrany = i
        Exit For
    End If
Next
End Function

Public Function OstatniWiersz(ByVal NazwaArkusza As String) As Long
' ustalenie ostatniego wiersza
' ta procedura nie musi być w kodzie UserForm
' może być w module i można wtedy ją
' wykorzystywać w innych miejscach również.

Dim ostW As Long
With ThisWorkbook.Worksheets(NazwaArkusza)
    ostW = .Cells.SpecialCells(xlCellTypeLastCell, xlTextValues).Row
End With
OstatniWiersz = ostW
End Function

Private Function UpdateControls()
' ponieważ z TextBox1 do TextBox4 sa wpisywane wartości do arkusza
' firmy to chyba one sa zawsze widoczne Twój tekst jest niejasny
' dla mnie
Dim i As Integer
For i = 1 To 10
  Me.Controls("OptionButton" & CStr(i)).Visible = Me.CheckBox1.Value
Next
End Function


...lecz dalej musisz sobie radzić już sam

[Post edytowany dnia 11-05-2005 19:39 przez karolinavb]


_____________________________________________
Karolina

11-05-2005 19:36
Pokaż profil karolinavb  Wyślij email do karolinavb   
nie mam pojecia




Typ: neutral
Postów: 15
Zarejestrowany: May 2005

Wielkie dzięki Karolinko jestes WIELKA

Pozdrawiam


_____________________________________________
Mariusz

11-05-2005 21:55
Pokaż profil nie mam pojecia  Wyślij email do nie mam pojecia   
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

I ja się z tym całkowicie zgadzam i podpisuję dwiema rękami!!!

A pisze, że blondynka... ciekawe, co?


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

11-05-2005 22:04
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Dzięki za komplementy...

Mam tylko 158 cm.

Maciek, Ty mnie przy życiu trzymasz, nawet powiedziałabym rozpieszczasz...

Chyba będę musiała sobie te wszystkie Twoje miłe słowa jako tapetę w Windowsie zainstalować, żeby mi codziennie humor poprawiały i rano w dobry nastrój wprawiały.

Miłego dnia Wam wszystkim również życzę .


_____________________________________________
Karolina

12-05-2005 05:33
Pokaż profil karolinavb  Wyślij email do karolinavb   
nie mam pojecia




Typ: neutral
Postów: 15
Zarejestrowany: May 2005

Karolinka chyba mie udusisz.
Naprawdę ostatnie pytania.

Wszysko ok. Z małym ale:

nie mogę wywołac z poziomu arkusza "menu" - userforma do wpisywania danych

polecenie Userform.show wyrzuca mi błąd: "Could not find the specified object"


_____________________________________________
Mariusz

12-05-2005 09:26
Pokaż profil nie mam pojecia  Wyślij email do nie mam pojecia   
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Gorzej.... będę teraz wrzeszczała...

W oknie projektu VBA sa przecież kolekcje:
- arkuszy
- modułow
- klas
i przecież Mariusz one nie nazywają się wszyskie tak samo !!!

Każdy obiekt z tych kolecji ma jakąś nazwę, każdy inną...

Sorry,a ten Twój UserForm to też ma jakąś nazwę !!!!!!!!!!!
Nawet jeśli nie Ty ją nadałeś ( A POWINIENIEŚ I DLA KONTROLEK TEŻ !!!!!!!!), to nadał ją VBA podczas dodawania UserForm do kolekcji, chociażby UserForm1, UserForm2 i tym podobne...

Okno kodu projektu VBA , otwórz obiekt tenże UserForm (prawa myszka- View Object)właściowości , tam JEST WŁAŚCIWOŚĆ NAME.

Nazwa TEGOŻ UserForm JEST TAKŻE WIDOCZNA W OKIENKU PROJEKTU W KOLEKCJI FORMS .

Ma być NazwaUserForm.Show czyli na przykład FrmMariuszek, czyli jeśli tak się nazywa a jeśli nazywa ssię UserForm1 to
Userform1.Show...  i nie zapomnij ująć tego w procedurę np:

Sub Wywolaj Okno Zaliczek()
Userform1.Show
End Sub
w module i dopiero to makro przypisz do CommanButtona na arkuszu Menu.

Nie przepisz znowu dosłownie dostosuj do swoich  potrzeb !!! "Pozwiedzaj" trochę ten VBA.

[Post edytowany dnia 12-05-2005 10:06 przez karolinavb]


_____________________________________________
Karolina

12-05-2005 10:03
Pokaż profil karolinavb  Wyślij email do karolinavb   
nie mam pojecia




Typ: neutral
Postów: 15
Zarejestrowany: May 2005

Karolinka nie denerwuj sie 
Wyjasnienie do poprzedniego postu
Odwołanie jest prawidłowe tylko w poscie jej nie dopisałem - przepraszam
- userform jest prawidłowy
- nazwa i odwołanie do userforma są prawidlowa
a dzieje sie to co napisalem
Wszystko posprawdzałem po kolei

[Post edytowany dnia 12-05-2005 10:51 przez nie mam pojecia]


_____________________________________________
Mariusz

12-05-2005 10:25
Pokaż profil nie mam pojecia  Wyślij email do nie mam pojecia   
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

To znaczy
- on ten formularz nazywa się UserForm w kodzie formy, czy w okienku właściwości ? Bo nie jestem pewna skąd bierzesz tę nazwę

- czy to jest CommandButton z ToolBoxa Formularze, czy Activex

- jeśli to jest z ToolBoxa formularze to jakie makro do niego przypisałeś, podaj nazwę i treść tutaj

- jeśli jest to AciveX to jaki ma kod zdarzenia Click ???


_____________________________________________
Karolina

12-05-2005 11:15
Pokaż profil karolinavb  Wyślij email do karolinavb   
nie mam pojecia




Typ: neutral
Postów: 15
Zarejestrowany: May 2005

- Nazwa jest z Okienka Właściwosci (name) frmDodaj
- CommandButton jest ActiveX nazywa sie cmdDodaj
- Kod

Private Sub cmdDodaj_Click()
frmDodaj.Show
End Sub


_____________________________________________
Mariusz

12-05-2005 11:46
Pokaż profil nie mam pojecia  Wyślij email do nie mam pojecia   
Wszystkich odpowiedzi: 21 :: Maxymalnie na stronę: 20
Strona: [  << <   1 2   > >>  ]  z  2