Tomasz Karowski

Tomasz Karowski .NET contractor
providing
programming services

Temat: Makro - kopiowanie wybranych wierszy

dzięki za całą pomoc, usunięcie tej 2 pętli okazało się rozwiązaniem problemu. Teraz wszystko jest ok. Tak jeszcze z ciekawości czy da się wymusić na excelu 2007, żeby nie pytał o to czy włączyć makra (u góry jest pasek gdzie można kliknąć na Opcje i tam włączyć makra) tylko wymusić na nim odpalenie ?
Tomasz Gawęda

Tomasz Gawęda Kierownik Zakładu
Produkcyjnego

Temat: Makro - kopiowanie wybranych wierszy

A jak zapiszesz go jako xlsm to nie pomoże?
Tomasz Karowski

Tomasz Karowski .NET contractor
providing
programming services

Temat: Makro - kopiowanie wybranych wierszy

nie mogę kombinować z formatami bo jest to raport generowany, także format xls jest narzucony z góry, ale to w sumie pytałem już z takie ciekawości, bo nie jest to wymagane
jeszcze raz dzięki za pomoc
Agata Grygoruk

Agata Grygoruk młodszy programista

Temat: Makro - kopiowanie wybranych wierszy

Witam serdecznie,

Jestem tutaj nowa i bardzo proszę o pomoc. Jeżeli chodzi o makro to jestem raczej zielona. Próbowałam przekształcić różne znalezione makra w internecie z podobnym problemem jednak nic mi z tego nie wyszło.
Mam dwa pliki jeden to "raport1"drugi "raport2". Żeby oszczędzić czas pracownikom chciałam, żeby wpisując datę wizyty u danego klienta ("raport1") automatycznie kopiowała się do "raport2" w momencie wpisania nazwy tego klienta.
Przykładowo w kolumnie A "raport1" mamy nazwy klientów X, Y, Z itd. W kolumnie B wpisuje się datę wizyty i teraz chciałabym, żeby w momencie wpisania w "raport2" klienta X w kolumnie A zwracało mi w kolumnie B datę z kolumny B "raport1".
Jest w ogóle możliwe zrobienie czegoś takiego? Jeżeli nie da się tego zrobić w dwóch plikach mogę je połączyć w jeden i "raport1", i "raport2" będą wtedy osobnymi arkuszami.
Robert M.

Robert M. finanse i bankowosc

Temat: Makro - kopiowanie wybranych wierszy

Witam serdecznie,
Potrzebuję pomocy w napisaniu makra które pomoże mi w pracy, a mianowicie:
w arkuszu dopisywane są pozycje w wierszach, chciałbym aby makro wyszukało ostatnią nie pustą komórkę w kolumnie A np. A15 i kopiowało cały wiersz z formatami i formułami do kolejnego pustego wiersza w tym wypadku A16.

Bardzo proszę o pomoc. Z góry dziękuję.
Bogdan Gilarski

Bogdan Gilarski www.excelperfect.pl
Perfect And
Practical

Temat: Makro - kopiowanie wybranych wierszy

Poczytaj o tym jak znaleźć ostatni wiersz http://excelperfect.pl/?p=217
Odnośnie kopiowania, to brak info z jakiego miejsca, jaki zakres jest kopiowany i w jakim arkuszu mają byc wyniki, zatem w przykładowym przypadku można zapisać tak
Arkusz1.Range("A10:D10").copy Arkusz2.Range("A"&wiersz)
gdzie "wiersz" to zmienna określona przez "ostatni wiersz" +1, Arkusz1, Arkusz2 to nazwy kodowe arkuszy kopiowane z -> kopiowane do...
Łukasz Kuchejda

Łukasz Kuchejda Kontroler przepływu
materiałów

Temat: Makro - kopiowanie wybranych wierszy

Witam serdecznie Jestem nowy na tym forum przyciągnęło mnie tu makro napisane przez Pana Tomasza Gawęda, chciał bym zapytać autora bądź też innych forumowiczów jak zmodyfikować to podstawowe makro:

Option Explicit
Sub dzialaj()
Dim ark As Worksheet, temp As Worksheet
Dim i As Integer

Set ark = Sheets("Arkusz1")
For i = 1 To ark.Range("d65536").End(xlUp).Row
If Not czyistnieje(ark.Cells(i, 4)) Then
Sheets.Add
Set temp = ActiveSheet
temp.Name = ark.Cells(i, 4)
temp.Move After:=Sheets(Sheets.Count)
Call esql(ark.Cells(i, 4), temp.Name)
End If
Next i

End Sub



Function esql(argument As String, arkusz As String)
Dim cn As Object, rs As Object
Dim nazwa As String, sqlstr As String
Dim ark As Worksheet

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

nazwa = ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & nazwa & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"""

sqlstr = "SELECT * FROM [Arkusz1$] WHERE F4 = '" & argument & "'"
Set rs = cn.Execute(sqlstr)
Set ark = ActiveWorkbook.Sheets(arkusz)

ark.Cells.ClearContents
ark.Range("a1").CopyFromRecordset rs

rs.Close
cn.Close

End Function

Function czyistnieje(nazwa As String) As Boolean
Dim ark As Worksheet
czyistnieje = False
For Each ark In ThisWorkbook.Worksheets
If ark.Name = nazwa Then czyistnieje = True
Next ark
End Function

tak aby po utworzeniu arkuszy na podstawie kolumny D po ponownym uruchomieniu dopisywało do nich nowe rekordy, które pojawiły się w arkuszu1. Na chwile obecną za każdym razem muszę usunąć powstałe arkusze i uruchomić makro ponownie. Drugie pytanie czy jest możliwość w jakiś sposób ograniczyć ilość kolumn kopiowanych, bądź wskazać które kolumny z danego wiersza mają być skopiowane ?? Jeśli ktoś był by w stanie mi pomóc będę bardzo wdzięczny. Dopiero zaczynam zabawę z VBA, więc prosił bym o ewentualne tłumaczenie jak dla laika
Sławek Kucharski

Sławek Kucharski Zarządzanie to pasja

Temat: Makro - kopiowanie wybranych wierszy

Witam i ja poproszę o pomoc bo to będzie moje pierwsze makro a wydaje mi się bardzo złożone. mam dwa pliki i potrzebuję kopiować dane z jednego do drugiego pod warunkiem że dane są przypisane w pliku źródłowym do tech samego pracownika a nie zawsze w tym samym wierszu
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Makro - kopiowanie wybranych wierszy

kopiować dane z jednego do drugiego pod warunkiem że dane są przypisane w pliku źródłowym do tech samego pracownika a nie zawsze w tym samym wierszu

Sławku - jeśli ten plik, kieruje się jakąś zasadą to jest to możliwe. Na etapie twojej wypowiedzi ciężko określić sposób modyfikacji kodu, tak aby uwzględniał niewiadome. (Czyt bez załącznika lub próbki materiału nie obejdzie się).
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: Makro - kopiowanie wybranych wierszy

Łukasz K.:
Witam serdecznie Jestem nowy na tym forum przyciągnęło mnie tu makro napisane przez Pana Tomasza Gawęda, chciał bym zapytać autora bądź też innych forumowiczów jak zmodyfikować to podstawowe makro:

Option Explicit
Sub dzialaj()
Dim ark As Worksheet, temp As Worksheet
Dim i As Integer

Set ark = Sheets("Arkusz1")
For i = 1 To ark.Range("d65536").End(xlUp).Row
If Not czyistnieje(ark.Cells(i, 4)) Then
Sheets.Add
Set temp = ActiveSheet
temp.Name = ark.Cells(i, 4)
temp.Move After:=Sheets(Sheets.Count)
Call esql(ark.Cells(i, 4), temp.Name)
End If
Next i

End Sub



Function esql(argument As String, arkusz As String)
Dim cn As Object, rs As Object
Dim nazwa As String, sqlstr As String
Dim ark As Worksheet

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

nazwa = ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & nazwa & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"""

sqlstr = "SELECT * FROM [Arkusz1$] WHERE F4 = '" & argument & "'"
Set rs = cn.Execute(sqlstr)
Set ark = ActiveWorkbook.Sheets(arkusz)

ark.Cells.ClearContents
ark.Range("a1").CopyFromRecordset rs

rs.Close
cn.Close

End Function

Function czyistnieje(nazwa As String) As Boolean
Dim ark As Worksheet
czyistnieje = False
For Each ark In ThisWorkbook.Worksheets
If ark.Name = nazwa Then czyistnieje = True
Next ark
End Function

tak aby po utworzeniu arkuszy na podstawie kolumny D po ponownym uruchomieniu dopisywało do nich nowe rekordy, które pojawiły się w arkuszu1. Na chwile obecną za każdym razem muszę
wstaw

rrr = ark.range(ark.rows.count,1).end(xlup).row +1
ark.Range("a"&rrr).CopyFromRecordset rs

zamiast

ark.Cells.ClearContents
ark.Range("a1").CopyFromRecordset rs
usunąć powstałe arkusze i uruchomić makro ponownie. Drugie pytanie czy jest możliwość w jakiś sposób ograniczyć ilość kolumn kopiowanych, bądź wskazać które kolumny z danego wiersza mają być skopiowane ?? Jeśli ktoś był by w stanie mi pomóc będę bardzo wdzięczny. Dopiero zaczynam

sqlstr = "SELECT * FROM [Arkusz1$] WHERE F4 = '" & argument & "'"

Zamiast "*" lista kolumn. F3, F5, F99, idt.
zabawę z VBA, więc prosił bym o ewentualne tłumaczenie jak dla laikaTen post został edytowany przez Autora dnia 22.07.13 o godzinie 09:07

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: Makro - kopiowanie wybranych wierszy

Wojciech G.:
http://www.afin.net/samples/Cases/AFIN.NET.Information...

Wiersz 8. to "kopiowanie" z filtrem.
Wierszy takich może być ilość dowolna.
Gdyby zadał Pan sobie trud przeczytania tematu, a nie jak małpka wklejał swoje linki, to pewnie mógłby Pan wnieść coś do dyskusji.
A tymczasem jak zwykle spam.Ten post został edytowany przez Autora dnia 22.07.13 o godzinie 12:09
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Makro - kopiowanie wybranych wierszy

Sławek. Pobieranie danych przyrostowo było by efektywne w przypadku prawdziwej bazy danych, nie Excelowego arkusza. Powodem tego jest brak klucza w tabeli, jak i możliwość sortowania danych źródłowych i ich modyfikacji prze usera.
Można oczywiście skupić się na tym aby jednak zmusić excela do pobrania nowych danych ale przy wywołaniu zapytania musiał byś podać nr wiersza od którego chcesz pobrać dane. W przypadku kiedy nie miałbyś pewności co do ich ciągłości to lepiej jest jednak czyścić obszar poprzednio pobranych danych i pobierać je na nowo. Takie czyszczenie możesz wywoływać kodem linijkę przed pobraniem - nie musisz uruchamiać 2-ch procedur.
Można też z rekordsetu pobrać dane do tablicy (odliczając ilość wierszy jakie już masz pobrane lub porównując dane z arkusza), a następnie ten variant wkleić na arkusz.: http://vbatools.pl/agregacja-wszystkich-arkuszy-skoros...

dane = .Range(.Range("a1"), .Cells(max_row, max_col)) 'przypisanie do tablicy
Arkusz_docelowy.Cells(LastRow + 1, 1).Resize(UBound(dane), max_col) = dane 'export na arkusz

Nie jest to analogiczny przykład ale z użyciem tablicy o jakiej pow wspomniałem. Sprawdź też zastosowanie w tym kodzie. http://vbatools.pl/usuniecie-pozycji-tabeli-nie-zawart...Ten post został edytowany przez Autora dnia 31.07.13 o godzinie 11:00

konto usunięte

Temat: Makro - kopiowanie wybranych wierszy

Witam,

Zaciekawił mnie ten wątek ale jako kompletny brak znajomosci vba chcialbym prosic o pomoc.

[url]http://www.sendspace.pl/file/17c850f8e7947157047c551[url]

Powyzej zalaczylem plik .xlsm. Potrzebowalbym w nim dwa makra:

1. Makro, ktore generowaloby nowy plik xlsx z wszystkimi danymi, ktore sie w nim znajduja (lacznie z wierszem 1) tyle, ze posegrogowane wg. kolumny N
2. Makro, ktore generowaloby nowe pliki xlsx, z danymi z danymi z wszystkich kolumn ale tylko o takich samych wartosciach wg kolumny A, czyli w jednym pliku wszystkie dane z takimi samymi wartosciami z kolumny A - w moim przypadku makro stworzyloby 3 pliki - w jednym 3 wiersze (2,3,4), w drugim 2 wiersze (5,6) i w trzecim 2 wiersze (7,8). Realne ilosci wierszy to ok 50tys i dane w kolumnie A sa porozrzucane. Oczywiscie wiersz 1 jest stalym elementem kazdego pliku. W tym punkcie wiersze rowniez posegregowane wg kolumny N.

Pomozecie ?

Pozdrawiam,
Krzysztof
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Makro - kopiowanie wybranych wierszy

@Krzysiek, może chcesz gotowe narzędzia:
http://vbatools.pl/podzial-arkuszy-na-skoroszyty/
oraz
http://vbatools.pl/podziel-dane-na-arkusze-skoroszyty/

Temat: Makro - kopiowanie wybranych wierszy

Witam, dołączę do tematu, nie bardzo umiem sobie poradzić z napisaniem odpowiedniego makra.

Mam tabelę w której w arkuszu Arkusz1 mam w 200 wierszach dane w następujących kolumnach:

Imię|Nazwisko|rok urodzenia|miejsowosc|kod|ulica|email|wiek
Jan|Kowalski|1991|Warszawa|00-000|Marszałkowska|jan.k@mail.pl|23
Andrzej|Kowalski|1992|Warszawa|00-000|Marszałkowska|andrzej.k@mail.pl|22
Andrzej|Wiśniewski|1991|Łowicz|00-000|Warszawska|andrzej.w@mail.pl|23

Chcę aby przy pomocy makra przypisanego do przycisku Excel kopiował wybrane wiersze, a z tych wierszy tylko określone komórki (A:B,D,F:H) te które w kolumnie wiek mają wynik "23" z arkusza Arkusz1 do Arkusz6, wiek jest wynikiem formuły.
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Makro - kopiowanie wybranych wierszy

Artek,
albo pętla FOR a w niej warunek IF() do tego deklaracja zamiennych na iteracje i arkusz docelowy,
albo autofiltr i skopiowanie przefiltrowanych do życzonego arkusza
(z tym 2gim radzi sobie nagrywarka, pierwszy zaś to lekka znajomość VBA).

Temat: Makro - kopiowanie wybranych wierszy

Dziękuje, nie znam się na VBA prawie. Zrobiłem to najprościej jak mi się wydaje, pewnie da się lepiej, na razie kopiuje mi jedną komórkę, myślę że przy kopiowaniu innych komórek z wiersza sobie poradzę, tylko pytanie jak skopiować tylko i umieścić po kolei te wiersze w których są dane?

w tej chwili w arkusz1 w kolumnie A mam przykładowo
1
2

4
5
6

Do arkusz2 kopiuje mi
1
2

4
5
6

jak zrobić żeby w arkusz2 było
1
2
4
5
6

Moje dotychczasowe wypociny:
Sub KopiujDoArkusza2()
Dim wksDane1 As Worksheet
Dim wksDane2 As Worksheet
Set wksDane1 = Worksheets("Arkusz1")
Set wksDane2 = Worksheets("Arkusz2")
For i = 1 To 10
If wksDane1.Range("A" & i).Value > "" Then
wksDane2.Range("A" & i).Value = wksDane1.Range("A" & i).Value
End If
Next i
End Sub
Ten post został edytowany przez Autora dnia 11.03.14 o godzinie 20:13
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Makro - kopiowanie wybranych wierszy

No wszystko było by dobrze, gdyby nie fakt że nie masz drugiej zmiennej odliczającej wiersze w drugim arkuszu. W tym momencie nic innego nie robisz jak przepisujesz dane. Z drugiej strony co to jest i? i jest zmienną typu long.
Dodajemy jej deklaracje jak i dodajemy następną zmienną tego samego typu - np niech to będzie x

Sub KopiujDoArkusza2()
Dim i as long, x as long
Dim wksDane1 As Worksheet
Dim wksDane2 As Worksheet
Set wksDane1 = Worksheets("Arkusz1")
Set wksDane2 = Worksheets("Arkusz2")
For i = 1 To 10
If wksDane1.Range("A" & i).Value > "" Then
x = x +1
wksDane2.Range("A" & x).Value = wksDane1.Range("A" & i).Value
End If
Next i
End Sub

Sprawdź sam jaki to dało efekt.

konto usunięte

Temat: Makro - kopiowanie wybranych wierszy

Witam, dorzucę swoje 3 grosze.
Potrzebuję pomocy w modyfikacji kodu makra.
Z pliku oferty_eksport poniższe makro kopiuje kolumny od A do M począwszy od 3 wiersza do pliku Zestawienie_ofert / arkusza Oferty poczynając od 2 wiersza.
Zastosowane jest kopiowanie przyrostowe.

Moje pytanie brzmi - co muszę zmienić by makro sprawdziło najpierw czy dane które chcę skopiować już istnieją w pliku Zestawienie_ofert.xlsx ? Jeśli Tak to te dane są pomijane (cały wiersz), w przeciwnym razie - są kopiowane.

 
Sub open_copy_paste_n_close()

Dim thiswkb As Workbook, wkb As Workbook, min_row&
Set thiswkb = ActiveWorkbook

Workbooks.Open Filename:= "O:\pliki\oferty_eksport.xlsx" 'arkusz źródłowy
Set wkb = ActiveWorkbook

Dim rng1 As Range, rng2 As Range
With wkb.Sheets(1)
Set rng1 = .Range("a3:m" & .Cells(Rows.Count, "a").End(xlUp).Row)
End With

With thiswkb.Sheets("Oferty") 'arkusz docelowy w pliku Zestawienie_ofert.xslx
min_row = .Cells(Rows.Count, "a").End(xlUp).Row
If Len(.Range("a1")) > 0 Then min_row = min_row + 1 'nagłówek
Set rng2 = .Range("a" & min_row)
End With

rng1.Copy rng2

Windows("Zestawienie_ofert.xlsx").Activate
Workbooks("oferty_eksport.xlsx").Close SaveChanges:=False

End Sub

Następna dyskusja:

Makro - kopiowanie wybranyc...




Wyślij zaproszenie do