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
Dariusz
Pensiek
systemy alarmowe,
kontrola dostepu,
powiadomienie GSM,
el...
Temat: Makra i Visual Basic
Poszukuję skryptu zliczającego ilość pozycji(wierszy) dla danych indeksów.Jednocześnie usuwając zdublowane pozycje
Marcin Z. IT & 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.
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
doktorant, manager w
Deutsche Bank PBC
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
Robert
Kubacki
doktorant, manager w
Deutsche Bank PBC
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
Orłowski
Młodszy 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
Programista
Excel/VBA
Temat: Makra i Visual Basic
Bez kombinowania, na szybko bo czasu brak :-)Sub ExportSheets()Mariusz Jankowski edytował(a) ten post dnia 02.11.09 o godzinie 22:48
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
Robert
Kubacki
doktorant, manager w
Deutsche Bank PBC
S.A.
Temat: Makra i Visual Basic
Dzięki
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. 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.
Ekspert rozwoju i
przyszłości firm,
struktur, systemów
or...
Temat: Makra i Visual Basic
Proponuję podać poprawioną treść makra... :-))
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.
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
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.
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
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.
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
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.
