vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest niedziela, 04 maja 2025 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Kopiowanie arkuszy do innego pliku


otwartyotwarty rozpoczął: damianel postów: 13



napisał: rudolf78
postów: 5


umieszczony:
8 kwietnia 2010
22:02

edytowany:
8 kwietnia 2010
22:17

  
Witam,

a jakby zrobić to samo tylko, że dane są w arkuszach o zmiennej nazwie składajacej się ze słowa dane, podkreślnika i numeru
np
dane_123545
dane_156755
dane_476755

Jeżeli to coś ułatwi to otwierany plik ma taką samą nazwę jak arkusz w tym pliku (w pliku jest tylko jeden arkusz)

Kombinowałem mocno z tym makrem ale nie moge sobie dać rady?

Pomocy
napisał: damianel
postów: 35


umieszczony:
20 sierpnia 2008
08:50

  
Jestem pod wrazeniem!!!! Dzieki wielkie
napisał: Rycho
postów: 291


umieszczony:
19 sierpnia 2008
22:23

  
Ok,
myślałem, że chodzi o kopiowanie jakich uporządkowanych danych (np. tabel).

Kolejna wersja makra kopiuje z arkuszy wszystko jak leci.
Jeśli w arkuszu wynikowym widać puste komórki czy wręcz puste całe wiersze, to znaczy że komórki te zostały sformatowane i jako takie puste nie są.

Sub test()
  Dim path As String
  Dim p As Long
  
  path = ThisWorkbook.path & Application.PathSeparator & "dane"
  
  p = ReadDataFromSheets(path, "mis", True)
  MsgBox "Wczytano: " & p & " arkusze(y)", vbInformation, " T e s t"
End Sub

Function ReadDataFromSheets(path As String, _
                            SheetName As String, _
                            Optional SearchSubFolders As Boolean = True _
                            ) As Long
'Copyleft: 2008 MR
'Opis: funkcja wczytuje dane do aktywnego arkusza
' ze skoroszytów zlokalizowanych w folderze 'Path'
' z arkuszy o nazwie 'SheetName'
' przeszukując podfoldery (domyslnie)
'Wynik: liczba wczytanych arkuszy

  Const Odstep = 1  'odstęp pomiedzy danymi z kolejnych arkuszy

  Dim FS As FileSearch
  Dim i As Long, wynik As Long
  Dim kom As Range, rg As Range
  Dim shAct As Worksheet, sh As Worksheet, wb As Workbook

  'pobranie listy plików
  Set FS = Application.FileSearch
  With FS
    .NewSearch
    .LookIn = path
    .FileType = msoFileTypeExcelWorkbooks
    .SearchSubFolders = SearchSubFolders
    .Execute msoSortByFileName
  End With

  'nie 'migamy' ekranem
  Application.ScreenUpdating = False

  'wyłączamy obsługę zdarzeń (w otwieranych skoroszytach
  'może być kod uruchamiany automatycznie)
  Application.EnableEvents = False

  'arkusz zestawienia czyli ten aktywny w momencie uruchomienia makra
  Set shAct = ActiveSheet

  'dla listy plików
  For i = 1 To FS.FoundFiles.Count
    'otwarcie skoroszytu
    Set wb = Workbooks.Open(FS.FoundFiles(i))

    'czy jest właściwy arkusz?
    Set sh = Nothing
    On Error Resume Next
    Set sh = wb.Worksheets(SheetName)
    On Error GoTo 0

    If Not sh Is Nothing Then  'jeśli jest arkusz

      'miejsce wstawienia danych
      With shAct
        If .UsedRange.Address(0, 0) = "A1" Then
          Set kom = .Range("A1")
        Else
          Set kom = .Cells(.UsedRange.Row + _
                           .UsedRange.Rows.Count + Odstep, "A")
        End If
      End With

      'zakres kopiowany
      With sh
        Set rg = .Range("A1", .UsedRange(.UsedRange.Count))
      End With

      'kopiowanie
      rg.Copy kom

      wynik = wynik + 1

    End If

    'zamknięcie skoroszytu
    wb.Close False
  Next i

  Application.ScreenUpdating = True
  Application.EnableEvents = True

  ReadDataFromSheets = wynik
End Function

napisał: damianel
postów: 35


umieszczony:
19 sierpnia 2008
15:43

  
nazwa pliku rozmiar
dane.zip 11.40 kB

np nie wyswietla wszystkich danych z pobieranych arkuszy (zalacznik)
napisał: damianel
postów: 35


umieszczony:
19 sierpnia 2008
12:11

  
Zgadza sie, ale testuj makro i nie dziala, nie wyswietla wszystkich danych, cos jest nie tak
napisał: Rycho
postów: 291


umieszczony:
18 sierpnia 2008
18:36

  
Hej,
krótko mówiąc, chcesz mieć pusty wiersz pomiędzy danymi z poszczególnych arkuszy?
w części kodu:
'miejsce wstawienia danych = pierwszy wolny wiersz wg kolumny A
      Set kom = shAct.Cells(Rows.Count, "A").End(xlUp)
      If kom.Value <> "" Then Set kom = kom.Offset(1, 0)


zmień parametr metody offset, np. na:
[...] = kom.Offset(2, 0)



... a może trzeba gdzieś wstawić - jako nagłówek tabeli z poszczególnych arkuszy lub dla każdego wiersza w dodatkowej kolumnie - nazwę pliku, z którego dane pochodzą?
napisał: damianel
postów: 35


umieszczony:
18 sierpnia 2008
15:17

  
Mamy powiedzmy 100 skoroszytow w kazdym jest arkusz o nazwie mis i makro ma pobierac dane z pierwszego arkusza i kopioac do arkusza jakiegos skoroszytu X nastepnie bierze kolejny arkusz o nazwie mis z kolejnego skoroszytu w naszej bazie i kopiujemy go pod danymi w arkuszu skoroszytu X ( po 100 razach bedziemy mieli 100 arkuszy jeden pod drugim w jednym arkuszu skoroszytu X)
Na tym polega problem, sprawdzalem Twoje makro, ale nie wychodzi kopiuje dane jedne pod drugimi, ale dane sa ze sobą pomieszane a my mamy miec tzw 100 "prostokątow"(arkuszy) jedne pod drugim, ale jakos nad tym pracuje zeby sobie pordzic, dzieki za pomoc, jak wpadnie Ci jakis pomysl to pisz
napisał: Rycho
postów: 291


umieszczony:
15 sierpnia 2008
18:55

edytowany:
15 sierpnia 2008
18:58

  
Witam,
precyzja Twoich opisów potrzeb damianel jest ... ma wiele do życzenia.
Swój kod też tak piszesz?

Zobacz przykładowe rozwiązanie:
Sub test()
  Dim path As String
  Dim p As Long
  
  path = ThisWorkbook.path & Application.PathSeparator & "dane"
  
  p = ReadDataFromSheets(path, "mis", True)
  MsgBox "Wczytano dane z " & p & " plików.", vbInformation, " T e s t"
End Sub

Function ReadDataFromSheets(path As String, _
                            SheetName As String, _
                            Optional SearchSubFolders As Boolean = True, _
                            Optional IsDataHeader As Boolean = True _
                            ) As Long
'Copyleft: 2008 MR
'Opis: funkcja wczytuje dane do aktywnego arkusza
' ze skoroszytów zlokalizowanych w folderze 'Path'
' z arkuszy o nazwie 'SheetName'
' przeszukując podfoldery (domyslnie)
' pomijając nagłówek dla kolejnych danych (domyślnie)
'Wynik: liczba wczytanych arkuszy

  Dim FS As FileSearch
  Dim i As Long, w As Long, wynik As Long
  Dim rg As Range, kom As Range
  Dim shAct As Worksheet, sh As Worksheet, wb As Workbook

  'pobranie listy plików
  Set FS = Application.FileSearch
  With FS
    .NewSearch
    .LookIn = path
    .FileType = msoFileTypeExcelWorkbooks
    .SearchSubFolders = SearchSubFolders
    .Execute msoSortByFileName
  End With

  'nie 'migamy' ekranem
  Application.ScreenUpdating = False

  'wyłączamy obsługę zdarzeń (w otwieranych skoroszytach
  'może być kod uruchamiany automatycznie)
  Application.EnableEvents = False

  'arkusz zestawienia czyli ten aktywny w momencie uruchomienia makra
  Set shAct = ActiveSheet
  
  'dla listy plików
  For i = 1 To FS.FoundFiles.Count
    'otwarcie skoroszytu
    Set wb = Workbooks.Open(FS.FoundFiles(i))

    'czy jest właściwy arkusz?
    Set sh = Nothing
    On Error Resume Next
    Set sh = wb.Worksheets(SheetName)
    On Error GoTo 0

    If Not sh Is Nothing Then  'jeśli jest arkusz

      'miejsce wstawienia danych = pierwszy wolny wiersz wg kolumny A
      Set kom = shAct.Cells(Rows.Count, "A").End(xlUp)
      If kom.Value <> "" Then Set kom = kom.Offset(1, 0)

      w = 1   'kopiujemy od 1-go wiersza, chyba że
      'są już jakieś dane (czyli jest już wkopiowany nagłówek)
      If kom.Row > 1 Then
        'i jeśli dane mają nagłówek
        If IsDataHeader Then w = 2
      End If

      'zakres kopiowany
      With sh
        Set rg = Intersect(.Cells(1, 1).CurrentRegion, _
              .Range(.Cells(w, 1), .Cells(Rows.Count, Columns.Count)))
      End With

      'kopiowanie
      rg.Copy kom
      
      wynik = wynik + 1

    End If

    'zamknięcie skoroszytu
    wb.Close False
  Next i

  Application.ScreenUpdating = True
  Application.EnableEvents = True

  ReadDataFromSheets = wynik
End Function


Powodzenia.

Dopisane po chwili: sprawdź ile razy użyłem select.
napisał: damianel
postów: 35


umieszczony:
14 sierpnia 2008
09:10

  
ma wkejac do tego samego arkusza
napisał: lukejohnr84
postów: 21


umieszczony:
14 sierpnia 2008
08:03

  
Cytat:
Widze ze walnoles jakies makro, ale program musi pobierac sciezki dostepu do skoroszytow z ktorych chce skopiowac arkusze no i musi pobierac nzwy arkusz ktore chce skopiowac, Pomozcie
Dzieki


jesli dobrze zrozumialem, to chcesz, zeby makro przeszukiwalo katalogi, szukalo w nich plikow .XLS, otwieralo je, szukalo w nich arkuszy "mis", jesli znajdzie takowy arkusz to kopiuje jego zawartosc do pliku docelowego(przy nastepnym znalezionym arkuszu "mis" kopiuje do tego samego pliku docelowego - w ten sam arkusz mis, dorzucajac dane, czy do nowego arkusza w pliku docelowym, np. "mis2"?)
jesli jest tak, jak napisalem, to Ci nie potrafie pomoc

jesli chodzi o samo wyszukiwanie sciezek - jak juz otworzysz jakis plik uzyj funkcji CurDir - zwraca ona obecna sciezke

sprecyzuj zadanie
napisał: damianel
postów: 35


umieszczony:
13 sierpnia 2008
15:44

  
Widze ze walnoles jakies makro, ale program musi pobierac sciezki dostepu do skoroszytow z ktorych chce skopiowac arkusze no i musi pobierac nzwy arkusz ktore chce skopiowac, Pomozcie
Dzieki
napisał: lukejohnr84
postów: 21


umieszczony:
13 sierpnia 2008
13:56

  
zacznijmy od tego, ze w jednym pliku excela nie mozesz miec dwoch arkuszy o takiej samej nazwie

co do kopiowania:
Sub aaa()

Sheets("mis1").Select
Range("A1:IV65536").Select
'Selection.End(xlDown).Select
Selection.Copy
'#####################
'plus opcjonalna zmiana pliku
'#####################
Sheets("mis2").Select
'Cells(1, 1).Select
Range("A1:IV65536").Select
Selection.PasteSpecial

End Sub

napisał: damianel
postów: 35


umieszczony:
13 sierpnia 2008
12:54

  
Hej dajcie jakies wskazowki jak skopiowac np wszystki arkusze o nazwie "mis" z roznych skoroszytow do jednego skoroszytu, tak ze w tym jednym skoroszycie mam wszystki arkusze o nazwie mis


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z