pętla przy kopiowaniu z Excela do Worda

Anonimowe
2023-04-05T14:09:17+00:00

Witam serdecznie,

czy ktoś wie czy jest możliwe zrobienie pętli przy kopiowaniu zawartości z Excela do Worda?

Chodzi mi o to, że w Excelu mam arkusze, np. "miesiac_1", "miesiac_2", "miesiac_3" itd. (nazwa "miesiac_"jest taka sama wszystkich arkuszy, a na końcu dochodzą kolejne liczby od 1 do x). W każdym arkuszu mam tabelę, którą chciałbym przekopiować do Worda. Każda tabela ma taki sam zakres komórek A1:F10.

Czy jest możliwe zrobienie takiego makro, które umożliwi przekopiowanie wszystkich tabel z Excela do Worda? Idealnie by było jakby wstawianie kolejnych tabel było poprzedzone wstawieniem tytułu tabeli (opcja w Word "Odwołania"/"Wstaw podpis" - Podpis: Tabela), ale to chyba nazbyt skomplikowane :/

Z góry serdecznie dziękuję za pomoc!

Microsoft 365 i pakiet Office | Word | Do użytku biznesowego | Windows

Pytanie zablokowane. To pytanie zostało zmigrowane ze społeczności pomocy technicznej firmy Microsoft. Możesz zagłosować, czy pytanie jest pomocne, ale nie możesz dodawać komentarzy ani odpowiedzi, ani też śledzić pytania.

Komentarze: 0 Brak komentarzy

Odpowiedzi: 6

Sortuj według: Najbardziej pomocne
  1. Oskar Shon 49,331 Punkty reputacji Moderator wolontariuszy
    2023-04-07T11:35:20+00:00

    Las rąk jak widzę :)

    Ja bym oparł pętlę o tabele a nie o obszary.

    Z jednej strony obszary bardziej precyzyjne, ale jak tabele mają różną ilość wierszy i kolumn to już nie bardzo to zadziała. No chyba że nie masz tabel, tylko po prostu dane w arkuszu, które akurat są poukładane jak tabelka w ramkach. To w tym przypadku może zaczął bym od zamiany obszarów na tabele. Można to nagrać a potem powtórzyć w pętli dla każdego arkusza. Domyślne w tedy może być określony max aktywnego obszaru.

    W drugiej części kodu realizujesz taką pętlę, ale już na Wordzie. Wcale bym się nie bawił w poprawianie tego w Wordzie oprócz; zaraz po skopiowaniu dotykową linijkę dopisać aby zastosować ustawiania dopasowania szerokości do wielkości kartki. Musisz sobie oczywiście zdawać sprawę, że rozmiary w Excelu są nieograniczone, a w Wordzie treści mogą być inaczej przedstawione i takie dopasowanie potem trzeba dodatkowo modyfikować.

    Pozdrawiam.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  2. Anonimowe
    2023-04-06T23:16:27+00:00

    Udało mi się zrobić coś takiego i w sumie działa:

    Sub ExportToWordTable()
    
    Dim wd_App As Object
    Dim wd_Doc As Object
    Dim n As Byte, s As Byte
    
    n = 41
    
    Set wd_App = CreateObject("Word.Application")
        wd_App.Visible = True
        Set wd_Doc = wd_App.Documents.Add
        wd_Doc.Activate
    
        wd_App.Selection.TypeParagraph
        wd_App.Selection.TypeParagraph
     
    Application.ScreenUpdating = False
    
        For s = 1 To n
        Sheets("miesiac_" & s).Range("A34:N69").Copy  '--- ten zakres można dowolnie zmienić na inny
        
        wd_App.Selection.TypeParagraph
        wd_App.Selection.TypeText Text:="Tabela. Nazwa tego co się stało w miesiącu nr " & s & "."  'nazwa tabeli
        
        wd_App.Selection.Paste
        On Error GoTo 0
        On Error Resume Next
        
        wd_App.Selection.TypeParagraph
    
        Next s
    
    Application.ScreenUpdating = True
    
    MsgBox ("Zakończono kopiowanie tabel")
    
    End Sub
    

    Mam tylko problem z ustawieniem stałej szerokości kolumny nr 1 i 2 (w tej kolumnie w wierszu 2 i ostatnim są scalone komórki i to pewnie one powodują problem)

    Kod, który zrobiłem niestety nie jest w pełni funkcjonalny:

    Dim TI As Long
    
    For TI = 1 To ActiveDocument.Tables.Count
        With ActiveDocument.Tables(TI)
            .Cell(1, 1).Select
                Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
                Selection.Columns.PreferredWidthType = wdPreferredWidthPoints
                Selection.Columns.Width = CentimetersToPoints(1.2)
        End With
    Next
    
    On Error Resume Next
            
    End Sub
    

    Kod wprawdzie zwęża kolumny, ale powoduje "rozbicie tabeli" w taki sposób:

    Obraz

    Może ktoś mi poradzi, gdzie popełniam błąd :(

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  3. Oskar Shon 49,331 Punkty reputacji Moderator wolontariuszy
    2023-04-05T21:19:06+00:00

    Piotr, nie będę ci pisał rozwiązania zwłaszcza jak mam gotowe rozwiązanie bo tak chcesz a potrzebujesz do swoich zawodowych celów.

    Nie wiesz co potrafi to rozwiązanie zatem przeczytaj o nim korzystając z linka, a sprawę ogarniesz w kilka chwil.

    No chyba że sam przedstawisz mi kod z którym będziesz miał problem, to ci wskażę błędy i naprowadzę abyś dalej główkował.

    Jeśli nie to zwróć uwagę na ten przykład:

    Pozdrawiam.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  4. Anonimowe
    2023-04-05T20:18:07+00:00

    Witaj Oskarze :)

    Nie wiem czy Twój dodatek rozwiąże mój problem 🤔

    Mi chodzi o to, że mam będzie dużo tabel (ponad 100), które muszę ręcznie wstawiać do Worda na zasadzie ctrl+c z Excela i ctrl+v do Worda.

    Ponieważ wszystkie tabele są dokładnie takie same to zastanawiam się czy mogę je skopiować pętlą. Nie potrzebuję później aktualizować danych w tych tabelach, bo chcę skopiować wartości z formatowaniem.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy
  5. Oskar Shon 49,331 Punkty reputacji Moderator wolontariuszy
    2023-04-05T16:07:48+00:00

    Tak. jest to możliwe, należy jednak znać model obiektowy Worda i po zapamiętaniu obiektu wrzucać doń dane.

    Prościej będzie ci z tym dodatkiem, który na podstawie szablonu wie gdzie ma umieścić zakres danych lub tabele: http://vbatools.pl/pobieranie-danych-z-szablonow-worda/ . Poczytaj o nim i wzoruj się na jego pomyśle lub zdecyduj się na niego aby szybciej okiełznać swoją potrzebę.

    Pozdrawiam.

    Czy ta odpowiedź była pomocna?

    Komentarze: 0 Brak komentarzy