logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[VBA] kopiowanie z kilku plików do jednego arkusza

vrd 25 Lis 2010 13:15 5821 6
REKLAMA
  • #1 8787421
    vrd
    Poziom 10  
    Posty: 23
    Ocena: 2
    Koledzy posiadam takie makro kopiujące z plików do jednego arkusza.
    Wszystko działa, problem polega na tym że zaszyte mam gdzie makro ma zaczynać kopiowanie i zazwyczaj kończy na pierwszy wolnym polu. Z tego powodu czasem omija dane jak komórka jest pusta.

    Czy ktoś mógłby zasugerować jak powinno wyglądać makro kopiujące cały arkusz?

    Option Explicit
    
    Sub odczytPlikuZKatalogu()
    Dim docelowy    As Worksheet
    Dim odczytany   As Workbook
    Dim sciezka     As String
    Dim nazwa_pliku As String
    Dim ileA        As Long
    
    Application.ScreenUpdating = False
    Const Odstep = 1
    
    Set docelowy = ThisWorkbook.Worksheets(1)
    sciezka = ThisWorkbook.Path & "\test\"
    nazwa_pliku = Dir(sciezka & "*.xls")
    With docelowy
        Do While nazwa_pliku <> ""
            ileA = .Cells(.Rows.Count, "A").End(xlUp).Row + 2
            If .Range("A1") = "" Then ileA = 1
            
            Set odczytany = Workbooks.Open(sciezka & nazwa_pliku)
            odczytany.Worksheets("Dokument").Cells(24, 1).CurrentRegion.Copy .Cells(ileA, "A")
            odczytany.Close
            nazwa_pliku = Dir
        Loop
    End With
    Application.ScreenUpdating = True
    
    End Sub
    


    Dziekuje za pomoc
  • REKLAMA
  • #2 8787557
    walek33
    Poziom 29  
    Posty: 1015
    Pomógł: 132
    Ocena: 81
    Cytat:
    zaszyte mam gdzie makro ma zaczynać kopiowanie
    jest w wierszu
    odczytany.Worksheets("Dokument").Cells(24, 1).CurrentRegion.Copy .Cells(ileA, "A") 

    a
    Cytat:
    kończy na pierwszy wolnym polu
    tu
    ileA = .Cells(.Rows.Count, "A").End(xlUp).Row + 2 
  • REKLAMA
  • #3 8788664
    vrd
    Poziom 10  
    Posty: 23
    Ocena: 2
    to to wiem sam :) naotmiast mimo usilnych starań nie potrafie tego zamienić na cały plik
  • REKLAMA
  • #4 8788840
    marek003
    Poziom 40  
    Posty: 4607
    Pomógł: 801
    Ocena: 488
    vrd napisał:
    ...jak powinno wyglądać makro kopiujące cały arkusz?


    vrd napisał:
    ...nie potrafie tego zamienić na cały plik


    Arkusz - część składowa skoroszytu. W skoroszycie może być wiele arkuszy.
    Plik zapewne w tym przypadku rozumiany jako skoroszyt. np Zeszyt1.xls

    Przepraszam że się wtrącam ale zdecyduj się co chcesz kopiować.
    Myślę że chodzi o arkusz ale...


    Zapis kopiujący cały arkusz to:

    odczytany.Worksheets("Dokument").Cells.Copy


    jednak w twojej formule jest problem bo ona chce kopiować kolejne dane do już istniejących a gdy kopiujesz cały arkusz to razem z wszystkimi komórkami a wtedy nastąpi błąd rozmiarów.

    Jeżeli chcesz skopiować cały arkusz (w cały arkusz) spróbuj zmienić pętlę:

    Do While nazwa_pliku <> "" 
            Set odczytany = Workbooks.Open(sciezka & nazwa_pliku) 
            odczytany.Worksheets("Dokument").Cells.Copy .Cells
            odczytany.Close 
            nazwa_pliku = Dir 
        Loop 


    Z tym że nie sprawdzałem do końca tego rozwiązania ale myślę że zadziała.
  • #5 8789010
    vrd
    Poziom 10  
    Posty: 23
    Ocena: 2
    Tak chodzi o arkusz.
    Niestety Twoje rozwiązanie nie działa. Pojawia się informacja o przechowywaniu informacji w schowku po czym excel sie zamyka.
  • REKLAMA
  • #6 8789064
    marek003
    Poziom 40  
    Posty: 4607
    Pomógł: 801
    Ocena: 488
    Spójrz jeszcze raz trochę poprawiłem (dokładnie o [spacja].Cells)
    Czyli linia kopiująca to
    odczytany.Worksheets("Dokument").Cells.Copy .Cells 
  • #7 11197646
    szynamon
    Poziom 12  
    Posty: 50
    Pomógł: 4
    Ocena: 11
    to żeby to zadziałało to jak powinno wyglądać bo u mnie nie chodzi

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono problem dotyczący makra VBA, które ma za zadanie kopiować dane z kilku plików do jednego arkusza. Użytkownik zauważył, że makro pomija dane w przypadku pustych komórek, co prowadzi do niekompletnego kopiowania. Uczestnicy zaproponowali różne rozwiązania, w tym użycie metody kopiowania całego arkusza za pomocą `odczytany.Worksheets("Dokument").Cells.Copy`. Zwrócono uwagę na konieczność poprawienia pętli, aby uniknąć błędów związanych z rozmiarem danych. Użytkownik jednak napotkał problemy z zamykającym się Excelem po próbie zastosowania zaproponowanych rozwiązań.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA