Janusz K.

Janusz K. Ekspert rozwoju i
przyszłości firm,
struktur, systemów
or...

Temat: Makra i Visual Basic

Tu zgłaszaj wszystkie problemy, jakie masz podczas automatyzacji pracy Excela:
- tworzenia, edycji i korzystania z makr,
- tworzenia funkcji niestandardowych,
- tworzenia aplikacji Visual Basica

Podaj numer wersji Excela, której używasz - pomoże to w znalezieniu lekarstwa

konto usunięte

Temat: Makra i Visual Basic

Poszukuję skryptu zliczającego ilość pozycji(wierszy) dla danych indeksów.
Jednocześnie usuwając zdublowane pozycje
Marcin Z.

Marcin Z. IT/Business
Intelligence &
Logistics

Temat: Makra i Visual Basic

Usuwanie duplikatów wierszy można zrealizować za pomocą makra, które znajdziesz tutaj - wybierz makro "Duplikaty/Usuń wiersze".

Ale niestety ilość pozycji dla danych indeksów trzeba dorobić... ewentualnie zrealizować za pomocą tabeli przestawnej/sum częściowych - oczywiście przed usunięciem duplikatów ;-).

Pozdrawiam,
MarcinMarcin Z. edytował(a) ten post dnia 09.09.09 o godzinie 09:41
Janusz K.

Janusz K. Ekspert rozwoju i
przyszłości firm,
struktur, systemów
or...

Temat: Makra i Visual Basic

Proszę postarać się oznaczać wpisy zgodnie z zasadami podanymi w wątku przyklejonym - Zanim napiszesz na forum - przeczytaj to. Naprawdę łatwiej będzie poruszać się po forum i wyszukiwać interesujący nas aktualnie temat.

01 K
Poszukiwane makro zliczające wiersze i usuwające duplikaty


Makro usuwające duplikaty i zliczające wiersze może być skonstruowane w ten sposób, żeby najpierw wyszukiwało duplikaty pierwszego indeksu (od wiersza 1, do ostatniego) i usuwało dane wiersze, następnie od drugiego wiersza do ostatniego, wyszukując duplikaty drugiego indeksu i usuwając "zarażone" wiersze - i tak aż do wiersza przedostatniego. Można przy takiej konstrukcji skorzystać z metody OFFSET.
To procedura rozumiana intuicyjnie, więc jej napisanie nie powinno nastręczać szczególnych trudności.
Po usunięciu duplikatów makro powinno zliczać wiersze, w których znajdują się unikatowe indeksy.
Warto na początku procedury wpisać polecenie
Application.ScreenUpdating=false
aby przy przeszukiwaniu wielu wierszy ekran nie "migotał". Oczywiście przed zakończeniem makra należy właściwość ScreenUpdating ustawić na true: Application.ScreenUpdating=true

_________________

Uważam, że forum Fani Excela jest znakomitym miejscem do nauki Excela, w tym także VBA i VB.
Jeśli ktoś tylko szuka szybkiego rozwiązania, proszę problem przedstawić w wątku Excelo pogotowie Janusz K. edytował(a) ten post dnia 22.02.09 o godzinie 22:32
Robert Kubacki

Robert Kubacki Ph.D., CRM Manager,
Alior Bank Polska
S.A.

Temat: Makra i Visual Basic

Cześć,

Potrzebuje makra które w pliku xls zapisze wszystkie(zmienna liczba zakładek) zakładki w oddzialnych plikach pod nazwą, którą pobierze z komórki "B5" (zawsze w tej samej komórce w różnych arkuszach)

pzdr.Robert Kubacki edytował(a) ten post dnia 05.03.09 o godzinie 10:21
Bartek Borczyk

Bartek Borczyk Operator liczb i
słów

Temat: Makra i Visual Basic

Robert Kubacki:
Cześć,

Potrzebuje makra które w pliku xls zapisze wszystkie(zmienna liczba zakładek) zakładki w oddzialnych plikach pod nazwą, którą pobierze z komórki "B5" (zawsze w tej samej komórce w różnych arkuszach)

pzdr.Robert Kubacki edytował(a) ten post dnia 05.03.09 o godzinie 10:21

masło maślane, nie czaje...
Robert Kubacki

Robert Kubacki Ph.D., CRM Manager,
Alior Bank Polska
S.A.

Temat: Makra i Visual Basic

Cześć,

W takim razie jeszcze raz.

Mam plik, który nazywa się "oddziały". Zawiera on 56 zakładek.
Nazwy zakładek "arkusz1", "arkusz2", "arkusz3", ... "arkusz56".

Zadanie:

Wydzielić z pliku "Oddziały" 56 plików. Każdy ma zawierać jeden arkusz. Nazwa pod jaką plik ma być zapisany ma pochodzić z komórki B5 (Oddział Łódź, Oddział Warszawa...). Czyli zamiast nazwy pliku "arkusz1" ma być "oddział Łódź", później zamiast "arkusz2" ma być "Oddział Warszawa" itd.

pzdr.
Artur O.

Artur O. Kontroler Finansowy

Temat: Makra i Visual Basic

Tak na szybko, czyli bez obsługi błędów i pytania o wskazanie folderu:

Option Explicit

Sub Kopiuj_Arkusze()
Dim a As Worksheet
Dim Sciezka As String
Dim Plik As String

Application.ScreenUpdating = False

Sciezka = "C:\Documents and Settings\o\Pulpit"
For Each a In ActiveWorkbook.Sheets
Plik = Sciezka & "\" & a.Range("b5") & ".xls"
Sheets(a.Name).Copy
ActiveWorkbook.SaveAs Filename:=Plik, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
ActiveWorkbook.Close
Next a

Application.ScreenUpdating = True


End Sub

Zmień ścieżkę zapisu plików
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: Makra i Visual Basic

Bez kombinowania, na szybko bo czasu brak :-)

Sub ExportSheets()

Dim Ws As Worksheet
Dim CurWb As Workbook
Dim SheetName As String

Application.ScreenUpdating = False

For Each Ws In ThisWorkbook.Worksheets

SheetName = Ws.Range("B5").Value

Ws.Copy

Set CurWb = ActiveWorkbook
With CurWb
.SaveAs Filename:=.Path & "\" & SheetName & ".xls"
.Close
End With

Next Ws

Application.ScreenUpdating = True

End Sub
Mariusz Jankowski edytował(a) ten post dnia 02.11.09 o godzinie 22:48
Robert Kubacki

Robert Kubacki Ph.D., CRM Manager,
Alior Bank Polska
S.A.

Temat: Makra i Visual Basic

Dzięki
Paweł Jaczewski

Paweł Jaczewski Promocja Funduszy
Europejskich w
szczególności
Programu I...

Temat: Makra i Visual Basic

Mam pytanie,

Sciągam dane, które są zapisane w ten sposób: "123.1"; żeby móc na nich pracować muszę pozbyć się cudzysłowów i kropek, używam ctrl+h i wszystko jest tak jak chcę. ALE,

Że często to robię postanowiłem zarejestrować sobie Makro i tu pojawił się problem, gdyż jeżeli używam Makra to po zamianie liczby są "liczbą przechowywaną jako tekst" i nic nie mogę z nimi zrobić. Kolejne Makra i funkcje, które miały mi dalej odpowiednio przekształcać dane pod moje potrzeby nie działają.

Próbowałem zrobić makro, które zakres danych przemnażałby przez 1 i kiedy wykonuję to samemu to działa, natomiast kiedy robi to makro to znowu klops.

Jedyne co przyszło mi do głowy to pętla która będzie za pomocą opcji zamień tekst na kolumny zamieniała mi po kolei dane, aż do
końca zakresu tabeli, ale że jestem raczej osobą początkującą jeśli chodzi o VBA to tworzę to powoli i jestem ciekaw czy może jest jakieś łatwiejsze rozwiązanie...

Z Góry Dziękuję za pomoc i Pozdrawiam

Makro po rejestracji:

Sub Makro1()

'
Sheets("k6438760.xls 2").Select
Rows("1:10").Select
Range("A10").Activate
Selection.Delete Shift:=xlUp
Selection.CurrentRegion.Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart,
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Selection.Replace What:="""", Replacement:="", LookAt:=xlPart,
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False,
ReplaceFormat:=False
End Sub
Marek K.

Marek K. controlling

Temat: Makra i Visual Basic

Żeby przemnożyć komórki przez 1 możesz np. na końcu dopisać linijki:

Dim komorka As Range
For Each komorka In Selection
komorka.Value = komorka.Value * 1
Next komorka

a jeżeli używałbyś większej ilości plików, w których symbolem dziesiętnym są kropki, a nie przecinki - można zmienić w opcjach regionalnych symbol dziesiętny na kropkę, i wtedy nie trzeba konwertować liczby.
Janusz K.

Janusz K. Ekspert rozwoju i
przyszłości firm,
struktur, systemów
or...

Temat: Makra i Visual Basic

Proponuję podać poprawioną treść makra... :-))
Marek K.

Marek K. controlling

Temat: Makra i Visual Basic

Janusz K.:
Proponuję podać poprawioną treść makra... :-))

mogę podać

Makro działające na zaznaczeniu może być takie:

Sub Makro1()

Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Dim komorka As Range
For Each komorka In Selection
komorka.Value = komorka.Value * 1
Next komorka

End SubMarek K. edytował(a) ten post dnia 27.07.09 o godzinie 17:36
Janusz K.

Janusz K. Ekspert rozwoju i
przyszłości firm,
struktur, systemów
or...

Temat: Makra i Visual Basic

Myślę, że warto zwrócić uwagę na format danych i to nagrane makro:
tam są do usunięcia znaki cudzysłowu..
I jakaś obsługa błędu by się może przydała..
Paweł Jaczewski

Paweł Jaczewski Promocja Funduszy
Europejskich w
szczególności
Programu I...

Temat: Makra i Visual Basic

W końcu udało mi się zrobić to w ten sposób:


Sub obrobka()


On Error GoTo blad 'jest to konieczne bo w danych wystepuje puste, ale nie puste komorki, na których się pętla zacinała

Sheets("k6438760.xls 2").Select 'to jeszcze musze zmienic ze wybieral mi drugi arkusz
Rows("1:10").Select
Range("A10").Activate
Selection.Delete Shift:=xlUp
Selection.CurrentRegion.Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=True, _
ReplaceFormat:=True
Selection.Replace What:="""", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=True, _
ReplaceFormat:=True
Set mojzakres = Range("b2") 'w pierwszych kolumnach i linijkach mam opisy
mojzakres.Select
Set mojzakres = mojzakres.CurrentRegion
mojzakres.Offset(1, 1).Resize(mojzakres.Rows.Count - 1, mojzakres.Columns.Count - 1).Select
Dim komorka As Range
For Each komorka In Selection
komorka.Value = komorka.Value * 1
Next komorka
Exit Sub

blad:

Select Case Err.Number
Case 13
Resume Next
Case Else
MsgBox "blad numer " & Err.Number & " ( " & Err.Description & " ) ", vbCritical, "blad"
End Select
End Sub


Wszystkim bardzo Dziękuje za pomoc i jeszcze pewnie się odezwę bo to dopiero jakieś 15% tego co chcę uzyskać :)

Pozdrawiam
Janusz K.

Janusz K. Ekspert rozwoju i
przyszłości firm,
struktur, systemów
or...

Temat: Makra i Visual Basic

Makro można uprościć:
przede wszystkim sądzę, że nie jest Ci potrzebne, aby makro otwierało arkusz - wygodniej jest otworzyć go samemu, i dopiero po otwarciu uruchamiać (najwygodniej przyciskiem, do którego przypiszesz to makro).
nie jest potrzebne aktywowanie komórki A10, więc wiersz
"Range("A10").Activate" możesz skasować. Makro ma działać w określonym obszarze, który znacznie wygodniej byłoby określić konkretnie, podając adresy górnej lewej i dolnej prawej komórki zakresu z danymi, np. Range("B2:L10"). To się przyda później przy mnożeniu przez 1, bo chyba makro ma mnożyć te przekonwertowane liczby?
Można by było także skrócić zamianę znaków, ale dla pokazania, jak pracuje VB niech zostanie tak, jak jest - makro sprawdza każdą komórkę w zadanym obszarze, i dokonuje najpierw zamiany kropek na przecinki, a potem likwiduje, znowu sprawdzając każdą komórkę w obszarze, pojedyncze znaki cudzysłowu.
Zdefiniowanie zmiennej komorka (Dim komorka As Range) lepiej przenieść na początek makra, do pierwszej linijki po nazwie makra.
Jeśli zdefiniujesz ten zakres z danymi, to cały ciąg:
Set mojzakres = Range("b2") 'w pierwszych kolumnach i linijkach mam opisy
mojzakres.Select
Set mojzakres = mojzakres.CurrentRegion
mojzakres.Offset(1, 1).Resize(mojzakres.Rows.Count - 1, mojzakres.Columns.Count - 1).Select

staje się niepotrzebny.

makro może wtedy wyglądać tak:

Sub obrobka()

Dim komorka as Range
On Error GoTo blad

--Range("lewa górna komórka:prawa dolna komórka").Select
--Selection.Replace What:=".", Replacement:=","
--Selection.Replace What:="""", Replacement:=""
--Range("lewa górna komórka").Activate

-----------For Each komorka In Selection
-----------------If komorka.Value=0 then
----------------------Goto ignoruj
-----------------Else
----------------------komorka.Value = komorka.Value * 1
-----------------End If
ignoruj:
-----------Next komorka

--MsgBox "Skończone", vbInformation, "Twoje makro"
--Exit Sub

blad:

--MsgBox "Błąd, koniec makro.", vbCritical, "Twoje makro"

End Sub

-------------

Nie sprawdzam, ale wydaje mi się, że powinno działać.

[edit

GL nie umożliwia wprowadzenia przydatnych spacji w poszczególnych wierszach, więc zastąpię je znakami "-", których nie przeniesiesz przy przepisywaniu (kopiowaniu) tego makraJanusz K. edytował(a) ten post dnia 28.07.09 o godzinie 12:11
Paweł Jaczewski

Paweł Jaczewski Promocja Funduszy
Europejskich w
szczególności
Programu I...

Temat: Makra i Visual Basic

Uprościłem do takiej formy :), jakby kogoś interesowało albo kiedyś miał podobne problemy to są to dane z Eurostatu... Jeśli chodzi o sugestie Janusza to bardzo za nie dziękuję, tylko że nie wspomniałem, iż:

nie jest Ci potrzebne, aby makro otwierało arkusz
Będzie to dla mnie wygodniejsze gdyż co miesiąc dostaję kilkanaście plików, w każdym po kilka arkuszów z czego mnie interesuję zawsze ostatni (dlatego pojawiło się już Count)

nie jest potrzebne aktywowanie komórki A10
W każdym arkusze w pierwszych 10 wierszach są niepotrzebne dla mnie informację

wygodniej byłoby określić konkretnie, podając adresy górnej lewej i dolnej prawej komórki zakresu z danymi
Niestety zakres jest zawsze inny :)

Można by było także skrócić zamianę znaków
Nie do końca wiem jak, a tak jak napisałeś w ten sposób jest w miarę czytelnie

For Each komorka In Selection If komorka.Value=0 then...
Próbowałem z tym zapisem, ale te "puste" komórki są jakieś dziwne, nie ma w nich żadnych spacji, ani niczego innego (tzn. ja nie widze ;)). Nawet jeżeli stosuję opcję excela "przejdź do" ctrl+g i zaznacz puste to pojawia się komunikat że takich nie ma ?!. Ten Problem jednak dopiero przede mną bo w każda taka komórkę będę musiał wstawić odpowiedni symbol :) i w zasadzie to będzie mój kolejny problem...

Jeszcze raz dziękuję i Pozdrawiam


Sub makro2()

Dim komorka As Range
On Error GoTo blad 'jest to konieczne bo w danych wystepuje puste, ale nie puste komorki

Sheets(Sheets.Count).Select 'zawsze interesuje mnie ostatni arkusz

Rows("1:10").Select 'w pierwszych 10 wierszach mam niepotrzebne informacje na temat
Range("A10").Activate 'daty eksportowania plikow i kilka innych zbednych informacji
Selection.Delete Shift:=xlUp

Set mojzakres = Range("a1") 'w pierwszych kolumnach i linijkach mam opisy
mojzakres.Select
Set mojzakres = mojzakres.CurrentRegion
mojzakres.Offset(1, 1).Resize(mojzakres.Rows.Count - 1, mojzakres.Columns.Count - 1).Select

Selection.Replace What:=".", Replacement:=","
Selection.Replace What:="""", Replacement:=""

For Each komorka In Selection
komorka.Value = komorka.Value * 1
Next komorka
Exit Sub

blad:

Select Case Err.Number
Case 13
Resume Next
Case Else
MsgBox "blad numer " & Err.Number & " ( " & Err.Description & " ) ", vbCritical, "blad"
End Select
End Sub
Janusz K.

Janusz K. Ekspert rozwoju i
przyszłości firm,
struktur, systemów
or...

Temat: Makra i Visual Basic

Ja w tamtym makrze zrobiłem jeszcze jeden błąd, bo dopiero teraz doczytałem się, że dane w komórkach nie zawsze są znakowe - i pętla For...next będzie się kończyła na pierwszej takiej komórce zakończeniem makra. Do poprawienia byłaby pętla mnożąca liczby przez 1, ale w nowych okolicznościach nie ma konieczności.

Jeśli masz czas i dla nauki:
proponuję Ci przejrzeć makro linijka po linijce, bo ono jest zdecydowanie do uproszczenia. Możesz przed każdym wierszem, po kolei, stawiać znak " ' " (apostrof), co uczyni tę linijkę kodu komentarzem, i nie zostanie ona wykonana. W ten sposób sprawdzisz, które z poleceń są rzeczywiście potrzebne.
O zawieszenie procedury nie musisz się martwić, bo masz obsługę błędów.

Miłej zabawy.. :-))Janusz K. edytował(a) ten post dnia 28.07.09 o godzinie 14:37
Anna Rzeszowska

Anna Rzeszowska polecam
http://dziennikarziz
aklinacze.blox.pl/ht
ml

Temat: Makra i Visual Basic

Czy ktoś z Was wie, jakie makro w outlooku 2003 będzie tworzyć szablon wiadomości o danej treści?

Przykład:
"wykonaj to i owo"

i zadanie specjalne :)
Czy da się stworzyć szablon wiadomości posiadający tekst i przyciski, gdzie wybranie każdego przycisku będzie równoznaczne z przekazaniem odpowiedzi do nadawcy (dzięki czemu odbiorca nie musi tracić czasu na klikanie w "odpowiedz" i wpisywanie tekstu)?

Przykład:
"wykonaj to i owo, dla potwierdzenia wybierz odpowiedni przycisk"
gdzie:
- przycisk 1 "START" wybrany przez odbiorcę wiadomości będzie powodował powiadomienie nadawcy o starcie
- przycisk 2 "KONIEC" wybrany przez odbiorcę wiadomości będzie powodował powiadomienie nadawcy o zakończeniu
- przycisk 3 "POMOC" wybrany przez odbiorcę wiadomości będzie powodował powiadomienie nadawcy o konieczności udzielenia pomocy
- przycisk 4 "OPÓŹNIENIE" wybrany przez odbiorcę wiadomości będzie powodował powiadomienie nadawcy o opóźnieniu
itp.

Będę wdzięczna za instrukcję - najlepiej krok po kroku.

Następna dyskusja:

Excel + Visual Basic




Wyślij zaproszenie do