Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Eltrox Hurton
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Word 2003 wstawianie tekstu do tekstu

Lars_Likon 17 Oct 2013 18:27 3294 15
  • #1
    Lars_Likon
    Level 7  
    Czy jest jakaś funkcja w Wordzie która wstawiałaby do dłuższego tekstu wyrazy napisane w kolumnie. Np.

    Tomaszu
    Rzeszów

    Panie [imię], pan się nie boi, całe miasto [nazwa miasta] za panem stoi.

    coś na wzór korespondencji seryjnej, ale z poziomu tekstu w dokumencie.
    Ethernet jednoparowy (SPE) - rozwiązania w przemyśle. Szkolenie 29.09.2021r. g. 11.00 Zarejestruj się za darmo
  • Eltrox Hurton
  • Eltrox Hurton
  • #3
    Lars_Likon
    Level 7  
    Ponieważ program w którym pracuje może wygenerować mi tylko dane w takiej postaci, tekstu (nie tabeli).

    Mówiąc ogólnie mam ponad sto wzorów pism, które na co dzień uzupełniam zmiennymi danym (tj. imię, nazwisko, data i miejsce urodzenia, data i sygnatura sprawy i kilka innych) ręcznie.

    Pracuję w programie, który ma możliwość wygenerowania tych zmiennych do pliku Word 2003. Mam tam też możliwość stworzenia tych wzorów w programie wstawiając te zmienne i wygląda to podobnie jak korespondencja seryjna, a następnie wygenerowania pisma do Word, ale po pierwsze wstawianie zmiennych jest trudniejsze niż w korespondencji seryjnej w Word, po drugie tak wygenerowane pisma do Word nie są zbyt ładne (gubią formatowanie, czasem rozmiar czcionki). Po trzecie stworzenie tylu wzorów zajęłoby mi mnóstwo czasu, a tego nie mam zbyt wiele.

    Wpadłem więc na pomysł, żeby połączyć program i moje wzory. A mianowicie. W programie stworzyć jeden wzór pisma, który generowałby mi do Worda potrzebne zmienne, najlepiej w kolumnie.

    Następnie wkleiłbym (do Worda) jeden z moich wzorów z polami, które ściągałyby mi dane wygenerowane z programu (z kolumny ze zmiennymi).
    Tylko nie wiem właśnie jak to zrobić.
  • #5
    Lars_Likon
    Level 7  
    Problem w tym, że mamy dostęp tylko do Worda 2003.
  • #6
    JRV
    VBA, Excel specialist
    Word również może importować z plików tekstowych (txt, CSV)
    powinno być wersz nagłówków. Jeśli wszystkie zmienne w jednej kolumnie, a następnie w Worde możesz podzielić się pola 'NEXT'
    Przepraszam za złe gramatyki to tłumaczenie maszynowe
  • #7
    Lars_Likon
    Level 7  
    Dziękuje wam za dotychczasowe podpowiedzi.

    Wymyśliłem jeszcze jeden sposób: wszechmocne MARKA.
    Będę jednak potrzebował waszej pomocy w stworzeniu odpowiedniego kodu.

    Przykład:

    (1)ciotka
    (2)Danuta
    (3)swetry
    (4)zielone

    "Gruba (1) (2)
    Robi (3) na drutach.
    Już po pięciu minutach
    Dowiedziały się o tym jaskółki,
    Gwałt podniosły do spółki:
    "Jak to? (1) (2)
    Robi (3) na drutach?
    Na drutach siadają ptaki,
    Lecz (1)? Skąd pomysł taki?
    A lećcież do niej gromadnie,
    Bo wam (1) z drutów spadnie!"

    Pomysł jest prosty, ale pewnie tylko w zamyśle. Makro działałoby tak:
    Ctrl + Home; [ustawienie kursora na początek strony]
    Szukaj: "(1)"; [wyszukiwanie (1) znajdującej się powyżej tekstu - w kolumnie]
    Esc; [schowanie opcji wyszukiwania]
    ->; [przesunięcie kursora za (1)]
    Ctrl+Shift+ -> [zaznaczenie wyrazu do kopiowania]
    Ctrl+C [skopiowanie zaznaczonego tekstu, w przykładzie "ciotka"]
    ->; [przesunięcie kursora za "ciotka"]
    Szukaj: "(1)"; [wyszukiwanie (1) znajdującej się w tekście]
    Esc; [schowanie opcji wyszukiwania]
    Ctrl+V (wklejenie wyrazu "ciotka" w miejsce (1) w tekście]

    Tu mam pierwszy problem, w tekście słowo "ciotka" występuje 4x, a "Danuta" 2x.
    Jak napisać makro które będzie wyszukiwało (1) do końca, aż zamieni wszystkie?

    Dalej makro by się zaczynało od początku, czyli:

    Ctrl + Home; [ustawienie kursora na początek strony]
    Szukaj: "(2)"; [wyszukiwanie (2) znajdującej się powyżej tekstu - w kolumnie]
    Esc; [schowanie opcji wyszukiwania]
    ->; [przesunięcie kursora za (2)]
    Ctrl+Shift+ -> [zaznaczenie wyrazu do kopiowania]
    Ctrl+C [skopiowanie zaznaczonego tekstu, w przykładzie "Danuta"]
    itd.

    Pojawia się następny problem, w tekście nie zawsze będą potrzebne wszystkie dane z kolumny, w przykładzie podałem (4)zielony. Tego nie ma w tekście, jak napisać makro które w takim przypadku zakończy wyszukiwanie i przejdzie do wyszukiwania następnego wyrazu do zamiany.
  • #8
    JRV
    VBA, Excel specialist
    ten wzor (o ciotke) je w Wordu ?
    Jeśli tak, i danye w oddzielnych kolumnach, to nie ma problemu

    może nie przedstawim dokładnie to, czego potrzebujesz
    Rozpakuj do d:\
    ciotki.txt tylko na D:\
    ciotki.doc gdziekolwiek
  • #9
    Lars_Likon
    Level 7  
    Dziękuje, tak, ale nie całkiem o to mi chodziło.

    [1]ciotka
    [2]Danuta
    [3]swetry
    [4]zielone

    "Gruba (1) (2)
    Robi (3) na drutach.
    Już po pięciu minutach
    Dowiedziały się o tym jaskółki,
    Gwałt podniosły do spółki:
    "Jak to? (1) (2)
    Robi (3) na drutach?
    Na drutach siadają ptaki,
    Lecz (1)? Skąd pomysł taki?
    A lećcież do niej gromadnie,
    Bo wam (1) z drutów spadnie!"

    Code: vba
    Log in, to see the code


    Powyższe makro prezentuje jak to makro miałoby funkcjonować. Dołączam również plik (Word 2003).
    Przed wyrazami w kolumnie zapisane są liczby w nawiasach [], unikam w ten sposób ich wyszukanie i zamiany.

    Stworzone przeze mnie makro jest złe. Zrobiłem je za pomocą rejestratora. Krok po kroku jak opisałem 7 poście tego tematu.

    Zawiera wady opisane w 7 poście, czyli: wyszukałem i zamieniłem tyle wyrazów ile jest w tekście. Zrobiłem to "ręcznie".

    Dowiedziałem się w internecie, że można ten problem rozwiązać za pomocą pętli. W tym przypadku chyba właściwa będzie Do While, jednak nie wiem gdzie ją umieścić.

    Wpadłem też na pomysł, żeby zamiast kolejnego wyszukiwania i wstawiania przez makro wyrazów za zmienne (1) (2) ... użyć opcji Znajdź -> Zamień -> Zamień wszystko. Umieszczony przeze mnie wierszyk jest króciutki a makro dość obszerne. Myślę, że skróciłoby to długość makra, ale nie mam pojęcia czy jest to możliwe i jak to wykonać.
  • #10
    adamas_nt
    Moderator of Programming
    Spróbuj
    Code: vb
    Log in, to see the code
    Należałoby tylko spowodować, żeby makro uzupełniało brakujące spacje, zmieniało na początku zdania litery na wielkie, itp. Ale zostawiam to na deser...
  • #11
    JRV
    VBA, Excel specialist
    Witam
    Jeżeli numeracja w [ ... ] idzie w porządku, sugerują takiej opcji
    Code: vb
    Log in, to see the code
  • #12
    Lars_Likon
    Level 7  
    Tak! To jest to o co mi chodziło! Dziękuje.

    Pozostaje jedna kwestia.

    Czy można zmienić ten kod w ten sposób, żeby zamiast jednego wyrazu wstawiane było więcej wyrazów (tyle wyrazów ile jest w wierszu za [...])

    Np.

    Zamiast:
    [1]ciotka
    [2]Danuta

    wpisać:
    [1]ciotka Danuta

    A zamiast:
    [3]swetry
    [4]zielone

    [2]zielone cieplutkie swetry

    I wtedy:
    [1]ciotka Danuta
    [2]zielone cieplutkie swetry

    "Gruba (1)
    Robi (2) na drutach.
    Już po pięciu minutach
    Dowiedziały się o tym jaskółki,
    Gwałt podniosły do spółki:
    "Jak to? (1)
    Robi (3) na drutach?
    Na drutach siadają ptaki,
    Lecz (1)? Skąd pomysł taki?
    A lećcież do niej gromadnie,
    Bo wam (1) z drutów spadnie!"
  • #14
    Lars_Likon
    Level 7  
    Czy mógłby Pan umieścić to makro tu na forum?

    Podczas próby odtworzenia makro o nazwie "petla" wyskakuje mi komunikat:
    "The macros in this project are disabled. Please refer to the online help or documentation of the host application to determine how to enable macros."
  • Helpful post
    #15
    JRV
    VBA, Excel specialist
    Poproś kogoś od obywateli, aby wykazać, jak włączyć makro
    trochę się obawiam, że nie jestem w stanie wytłumaczyć z mojej gramatyki
    w menu Narzędzia - makro - zabezpieczenie niedźwiedź średnia - Pan zdecydowała, czy umożliwić działanie makra

    Code: vb
    Log in, to see the code
  • #16
    Lars_Likon
    Level 7  
    Działa Wspaniale! Wielkie Dzięki!