ID tematu: 27731
 |
ankieta i wyniki |
| Autor |
Wiadomość |
kati
Starszy Forumowicz


Posty: 54
|
Wysłany: 2012-02-01, 13:40 ankieta i wyniki
|
|
|
Witam
Potrzebuje taki manewr wpisac w makro: wyniki ankiet - one teraz sa widoczne w ark3/kol. M, ale kolumna bedzie ukryta dla uzytkownikow - zeby automatycznie kopiowaly sie do arkusza1 "wyniki_ankiet". Ktory btw tez ma byc docelowo ukryty. Automatycznie w tym sensie, ze nie w czasie rzeczywistym, tylko pod batonik przy zatwierdzaniu ankiety chce podpiac operacje przerzucenia kopii tych wynikow.
Z tym, ze z transpozycja: wiersze 2-12 to jest metryczka kazdej indywidualnej ankiety, ktora ma sie wpisywac do kol. C - I w arkuszu wynikowym. No i dla kazdej ankiety - w jednym, wlasciwym wierszu - wyniki, jak ten przyklad w ark1/wiersz5.
Byloby zbyt proste, gdybym dala zlinkowane komorki pomiedzy jednym = drugim arkuszem. Ale kolejne arkusze z kazda kolejna ankieta tworzone sa z wyjsciowej wersji ankiety przez makro [zobaczcie Alt+F11]. A nigdy z gory nie jest wiadome, ile za dany okres sprawozdawczy bedzie umow, podlegajacych ankietom w badanych obszarach. I ile bedzie arkuszow. Jak to rozpracowac?
Please help. Nie mam pojecia, jak z tego wybrnac..
[ Dodano: 2012-02-02, 07:14 ]
Uuh
Jesli byl juz taki watek na forum wrzuccie chociaz linka, moze przeoczylam?
Poradzcie cos prosze, bez tego lezy mi kwartalne sprawozdanie
ankieta.zip
|
Pobierz Plik ściągnięto 13 raz(y) 16.78 KB |
|
|
 | ID posta:
147001
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
Kaper
Excel Expert


Pomógł: 1152 razy Posty: 1626
|
Wysłany: 2012-02-02, 16:54
|
|
|
generalnie:
potrzebujesz informacji o pierwszym wolnym wierszu w arkuszu podsumowującym
wpisz na forum w szukajce np. funkcja last() albo wykorzystaj konstrukcję zbliżoną do tej
| Kod: | | wolny_wiersz=range("komórka nagłówkowa").end(xldown).row+1 |
i po zakończeniu ankiety np. po kliknięciu zrób przeniesienie danych z odpowiednich komórek do tak wyznaczonego wiersza.
np. | Kod: | | worksheets("wyniki_ankiet").Range("J"&wolny_wiersz)=Activesheet.Range("M14").value |
i podobnie z innymi polami. Takie podejście uniezależni Cię od liczby kolejnych ankiet generowanych po każdorazowym naciśnięciu PrzejdźDalej
Pozdrawiam, |
_________________ Kaper
Każda trójwymiarowa zwarta i jednospójna rozmaitość topologiczna bez brzegu jest homeomorficzna ze sferą trójwymiarową. Czasem trzeba poczekać sto lat żeby się upewnić. |
|
 | ID posta:
147170
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
kati
Starszy Forumowicz


Posty: 54
|
Wysłany: 2012-02-03, 13:14
|
|
|
| Kaper napisał/a: | | i po zakończeniu ankiety np. po kliknięciu zrób przeniesienie danych z odpowiednich komórek do tak wyznaczonego wiersza |
sprobuje. ale co z danymi w wierszach 2-12 ankiety, ktore maja charakter nieciagly i nieregularny [tzn. nie sa np. kolejno nastepujacymi niepustymi], a sluza jako niezbedna metryczka identyfikacyjna? I maja isc jako pierwsze w kol. C - I arkusza wynikowego?
k |
|
 | ID posta:
147290
|
|
|
 |
Kaper
Excel Expert


Pomógł: 1152 razy Posty: 1626
|
Wysłany: 2012-02-03, 14:00
|
|
|
Może takich kilka podpowiedzi do jednej z procedur obsługi przycisku 3 będzie pomocne.
| Kod: | Sub Przycisk3_Kliknięcie()
Dim wolny As Long
' proponuję najpierw skopiować
Sheets("ankieta").Select
Sheets("ankieta").Copy After:=Worksheets(Worksheets.Count)
'i zmienić nazwę (może na inną - zawierającą np. numer umowy albo po prostu kolejny nr ankiety
ActiveSheet.Name = "ankieta" & Worksheets.Count - 3
' aż do "End With" samo .cośtam będzie traktowane jak Worksheets("wyniki_ankiet").cośtam
With Worksheets("wyniki_ankiet")
'obliczamy gdzie w zbiorczy można wpisywać
wolny = .Range("F2").End(xlDown).Row + 1
' i przepisujemy nagłówek
.Range("C" & wolny) = Range("D2")
.Range("D" & wolny) = Range("D4") & "-" & Range("E4") & "-" & Range("F4") & "-" & Range("G4")
.Range("E" & wolny) = Range("D6")
.Range("F" & wolny) = Range("H8")
' itd.
' oraz zapisujemy nr kolejny
.Range("B" & wolny) = .Range("B" & wolny - 1) + 1
'teraz wyniki korzystając z Twojej konstrukcji pozostałej po rejetratorze makr
Range("M14").Select
.Range("J" & wolny) = Selection.Value
Selection.End(xlDown).Select
.Range("K" & wolny) = Selection.Value
Selection.End(xlDown).Select
.Range("L" & wolny) = Selection.Value
Selection.End(xlDown).Select
.Range("M" & wolny) = Selection.Value
Range("d2").Select
End With
' a tu Twoje zerowanie arkusza ankieta (też po rejestratorze)
Sheets("ankieta").Select
Range("M14").Select
Selection.FormulaR1C1 = "0"
Selection.End(xlDown).Select
Selection.FormulaR1C1 = "0"
Selection.End(xlDown).Select
Selection.FormulaR1C1 = "0"
Selection.End(xlDown).Select
Selection.FormulaR1C1 = "0"
' no i jeszcze przydałoby się zerowanie "metryczki" czyli D2, D4:H4 itd.
Range("d2").Select
End Sub |
Zostawiłem te wszystkie Selection.End(xlDown).Select ale zamiast nich mogłoby się obejść bez selekcji czyli przy przepisywaniu:
| Kod: | .Range("J" & wolny)=Range("M14").value
.Range("K" & wolny)=Range("M24").value
' itd
|
a przy zerowaniu
| Kod: | Range("M14").value=0
Range("M24").value=0
' itd
|
Pozdrawiam, |
_________________ Kaper
Każda trójwymiarowa zwarta i jednospójna rozmaitość topologiczna bez brzegu jest homeomorficzna ze sferą trójwymiarową. Czasem trzeba poczekać sto lat żeby się upewnić. |
|
 | ID posta:
147298
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
kati
Starszy Forumowicz


Posty: 54
|
Wysłany: 2012-02-06, 08:27
|
|
|
| Kaper napisał/a: | | Może takich kilka podpowiedzi do jednej z procedur obsługi przycisku 3 będzie pomocne |
Kaper, dzieki ogromne. Bardziej niz pomocne chociaz troche zmodyfikowalam koncepcje:
| Kod: | ' najpierw idzie start_click:: Copy_Ankieta_Szablon
' i zaczynamy prace:: Range("d2").Select
'
' a w ramach procedury zatwierdzania zatwierdzaniu wypelnionej ankiety::
Sub Copy_Szablon()
With Worksheets("ankieta")
Sheets("ankieta").Select
Sheets("ankieta").Copy After:=Worksheets(Worksheets.Count)
Range("d2").Select
End With
End Sub |
Inaczej mowiac, ankiete jako szablon pozostawiam w stanie wyzerowanym, bez koniecznoscie resetowania wynikow i zawartosci metryczki w ankiecie wypelnionej.
| Kaper napisał/a: | | Kod: | ' proponuję najpierw skopiować i zmienić nazwę (może na inną - zawierającą np. numer umowy albo po prostu kolejny nr ankiety
ActiveSheet.Name = "ankieta" & Worksheets.Count - 3 |
|
Jako nazwe arkusza wprowadzam faktycznie numer umowy, korzystajac ze zlaczonej wartosci komorek d4:h4. Sam numer kolejny arkusza skutkowalby zawirowaniami, bo skoroszyty z ankietami bedzie wypelniac x-osob, wiec LP by mi sie powtarzaly. A tak zachowam unikalne oznaczenia identyfikujace kazda ankiete.
| Kaper napisał/a: | Zostawiłem te wszystkie Selection.End(xlDown).Select ale zamiast nich mogłoby się obejść bez selekcji czyli przy przepisywaniu:
| Kod: | .Range("J" & wolny)=Range("M14").value
' itd |
|
Jak dotychczas zostawilam to w postaci odwolan wzglednych przez Selection.End(xlDown).Select. To wczesniej w zalaczniku to tylko szkielet ankiety dla pokazania istoty problemu. Calosc bedzie troche bardziej pokazna, i po wpisaniu tresci pytan i odpowiedzi zakladam, ze pozmieniaja mi sie rozmiary pola grup dla kazdego pytania. Sprawniej mi bedzie poszukiwac kolejnej niepustej w kol. M, niz ciagle sprawdzac odwolania bezwzgledne. Przynajmniej na tym etapie.
| Kaper napisał/a: | oraz zapisujemy nr kolejny | Kod: | | .Range("B" & wolny) = .Range("B" & wolny - 1) + 1 |
|
Kurcze, to jest akurat swietne, a takie oczywiste o ile sie wie, jak
Tylko tu idzie moje Pyt. 1: jezeli na koncowym etapie, po wprowadzeniu wszystkich ankiet, chce makrem wywolac drukowanie arkusza wynikowego, to jak dostosowac teraz ustawiony obszar drukowania zeby rozszerzyl sie do zakresu z ostatnim wierszem wlacznie?
| Kaper napisał/a: | | Kod: | | ' no i jeszcze przydałoby się zerowanie "metryczki" czyli D2, D4:H4 itd |
|
Poniewaz zastosuje kopiowanie wyjsciowej ankiety, wiec operacja zerowania nie bedzie chyba potrzebna. Ale tu idzie moje Pyt. 2 bo tego nie wiem: jak makrem zmienic wybor z rozwijanej listy wyboru? Tzn, gdybym potrzebowala z juz wypelnionej ankiety "wyzerowac" komorke z lista do pozycji wyjsciowej "wybierz" ?
Pozdr
Kaska |
|
 | ID posta:
147590
|
|
|
 |
Kaper
Excel Expert


Pomógł: 1152 razy Posty: 1626
|
Wysłany: 2012-02-06, 10:19
|
|
|
Ustawianie obszaru wydruku i uruchomienie drukowania możesz zrobić mniej więcej tak:
| Kod: | Sub Drukuj()
With Worksheets("wyniki_ankiet")
.PageSetup.PrintArea = "$B$1:$O$" & .Range("F2").End(xlDown).Row
.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End With
End Sub |
Możesz też np. z końcem obszaru drukowania "pójść w górę" od ostatniego wiersza w arkuszu
| Kod: | | .PageSetup.PrintArea = "$B$1:$O$" & .cells(.cells.rows.count,"B").End(xlup).Row |
A zerowanie w sensie: ustawianie "wybierz"
- pewnie najprościej mniej więcej tak:
| Kod: | | range("D4").value = "~ wybierz ~" |
Pozdrawiam, |
_________________ Kaper
Każda trójwymiarowa zwarta i jednospójna rozmaitość topologiczna bez brzegu jest homeomorficzna ze sferą trójwymiarową. Czasem trzeba poczekać sto lat żeby się upewnić. |
|
 | ID posta:
147602
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
kati
Starszy Forumowicz


Posty: 54
|
Wysłany: 2012-02-07, 07:31
|
|
|
| Kaper napisał/a: | A zerowanie w sensie: ustawianie "wybierz" - pewnie najprościej mniej więcej tak:
| Kod: | | range("D4").value = "~ wybierz ~" |
|
Fakt, przyszlo mi to na mysl ale nie bylam pewna czy to dziala tez przy listach wyboru. A ze napisalam zanim sprawdzilam, to i poszlo w eter
Mam za to inna zagwozdke. U nas w pracy komputery uzytkownikow sa wpiete w domenie. I domyslnie poziom zabezpieczen ustawiony jest na wysoki. A ze na 250 osob moze 10 jak widzi okienko dialogowe z pytaniem o uruchomienie makr wie o co chodzi, a jeszcze mniej wie, gdzie sie to modyfikuje, to mam problem.
Otoz. Jak wpisac makrem autouruchamianym przy otwieraniu pliku, zeby poziom makr byl na niski, a przy zamykaniu - wrocic do wysokiego. Da sie to tak?
K |
|
 | ID posta:
147695
|
|
|
 |
Kaper
Excel Expert


Pomógł: 1152 razy Posty: 1626
|
Wysłany: 2012-02-07, 18:09
|
|
|
no aż tak, to nie, bo skoro poziom jest wysoki to makro się nie uruchomi, prawda
ale możesz "dać wyraźnie do zrozumienia", że włączona obsługa makr jest niezbędna.
Zobacz np.:
http://www.excelforum.pl/...highlight=wymus*+makr*
http://www.excelforum.pl/...highlight=wymus*+makr*
http://www.excelforum.pl/...highlight=wymus*+makr*
http://www.excelforum.pl/...kro-vt20913.htm
Inny pomysł - skoro "zbierasz ankiety" to może pliki z ankietami powinny być wolne od matk, a tylko potem wyniki poszczególnych ankiet przysłane przez tą setkę pracowników w 100 oddzielnych skoroszytach powinny być automatycznie zebrane przez makro i upchnięte do skoroszytu zbiorczego (i podsumowane w arkuszu zbiorczym).
Pozdrawiam, |
_________________ Kaper
Każda trójwymiarowa zwarta i jednospójna rozmaitość topologiczna bez brzegu jest homeomorficzna ze sferą trójwymiarową. Czasem trzeba poczekać sto lat żeby się upewnić. |
|
 | ID posta:
147787
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
kati
Starszy Forumowicz


Posty: 54
|
Wysłany: 2012-02-08, 07:19
|
|
|
| Kaper napisał/a: | no aż tak, to nie, bo skoro poziom jest wysoki to makro się nie uruchomi, prawda |
uhm wlasnie tego sie obawialam, liczylam na jakis manewr w rodzaju 'tylnego wejscia'
| Kaper napisał/a: | | ale możesz "dać wyraźnie do zrozumienia", że włączona obsługa makr jest niezbędna |
dzieki, poszukam czegos w temacie
| Kaper napisał/a: | | Inny pomysł - skoro "zbierasz ankiety" to może pliki z ankietami powinny być wolne od matk, a tylko potem wyniki poszczególnych ankiet przysłane przez tą setkę pracowników w 100 oddzielnych skoroszytach powinny być automatycznie zebrane przez makro i upchnięte do skoroszytu zbiorczego (i podsumowane w arkuszu zbiorczym). |
No to w chole*e byloby tyle roboty dotychczas!
Nie no, smieje sie. Bralam to na samym poczatku pod uwage. To owszem bylaby jakas opcja, gdyby nie to, ze to wlasnie arkusze wynikow beda musialy byc drukowane i podpisywane przez kierownikow komorek merytorycznych, ktore wypelniaja ankiety. Wiec chyba nie mam zbyt duzego manewru ruchu..
Pozdr
Kaska |
|
 | ID posta:
147835
|
|
|
 |
Kaper
Excel Expert


Pomógł: 1152 razy Posty: 1626
|
Wysłany: 2012-02-08, 17:41
|
|
|
Czyli w ThisWorkbook (albo w tenskoroszyt ) coś w podobie do:
| Kod: | Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim wks As Worksheet
Application.ScreenUpdating = False
' tylko arkusz z komunikatem o konieczności zezwolenia na makra będzie widoczny po otwarciu
Worksheets("Start").Visible = xlVisible
For Each wks In Worksheets
If wks.Name <> "Start" Then wks.Visible = xlVeryHidden
Next wks
End Sub
Private Sub Workbook_Open()
Call pokaz_arkusze
End Sub |
A w zwykłym module coś w tym stylu:
| Kod: | Sub pokaz_arkusze()
Dim wks As Worksheet
Application.ScreenUpdating = False
For Each wks In Worksheets
wks.Visible = xlSheetVisible
Next wks
' ew. wybór aktywnego i ukrycie startowego
Application.ScreenUpdating = True
End Sub |
Albo ta ostatnia procedura wewnątrz workbook_open
Pozdrawiam, |
_________________ Kaper
Każda trójwymiarowa zwarta i jednospójna rozmaitość topologiczna bez brzegu jest homeomorficzna ze sferą trójwymiarową. Czasem trzeba poczekać sto lat żeby się upewnić. |
|
 | ID posta:
147925
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
| |
| |