Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

VBA jako skaner w wordzie

annnaanna 09 Dec 2015 17:27 2091 20
  • #1
    annnaanna
    Level 7  
    Witam. Szukam makra które działa jako "skaner" w wordzie. Każdy z nas dastało jakieś pismo z urzędu. W górynym lewym boku są znak sprawy, numer dokumentu, po środku tytuł pisma urzędowego. Interesowało by mnie takie makro w wordzie, które by szukał nastepujących słow: Znak sprawy(może być jeden numer sprawy lub więcej), numer dokumentu i tytuł dokumentu(np, zawiadomienie, decyzja, postanowienie itp). Po kliknieciu ma makro makro przeszukuje danych wartości jakie ma szukac i po znalezieniu umieszcza ja w pliku exela nazwijmy "dane". Czy jest taka możliowość? Nie znam na vba, prosze o pomoc.
  • #2
    arekkrasnal
    Level 20  
    Witam
    Proponuję zapoznać się z pozycją:
    Office 2007 Język VBA i makra-Paul McFedries
  • #3
    annnaanna
    Level 7  
    Dziekuję za pomoc, ale to zajmnie mi b.duzo czasu, którego nie mam. Chetnie zapoznam sie. Oczekiwała bym innej pomocy.
  • #4
    arekkrasnal
    Level 20  
    Raczej potrzeba makra dla excela które z wskazanego katalogu przejrzy pliki word i zwróci nazwę pliku jakiej tyczy się sprawy i tp.
  • #5
    kinggustav
    Level 26  
    Doprecyzujmy: pismo z urzędu jest zwykle na papierze, czy chcesz to zamienić na tekst w Wordzie? Jeżeli tak to temat jest bardzo trudny, są różne kulawe narzędzia (w samym VBA nie słyszałem), ale nie wiem czy wogóle da sie to zrobić.
    Jeżeli już mamy tekst to trzeba określić w jaki sposób znajdziemy każdy element, który nas interesuje. Jeżeli przy tym założymy, że numer jest w 1 wierszu, to jak będzie pierwszy pusty to nie znajdziemy. Algorytm musi więc być "inteligentny".
    Warto też pomyśleć o jakiejś walidacji, bo dane i tak będą niezbyt wysokiej jakości.
  • #6
    PRL
    Level 40  
    Do Autora.
    Potrzebujesz kombajn OCF+VBA.
  • #7
    annnaanna
    Level 7  
    Problem jest taki, że nie mozna dokładnie okreslić w ktorym wierszu znajduja szukane zwroty. Po znalezieniu określonych zwrotow, makro mialo by wyeksportwać dane do exela, do odpowienich komórek. jak można to zrobić?
  • #8
    marcinj12
    Level 40  
    Jaka wersja office? Jakie jest rozszerzenie tych plików word?
    Czy te wszystkie dokumenty mają ten sam format - możesz załączyć jakiś przykład?
    Samo rozpoznawanie np. rodzaju pisma po frazie kluczowej
    annnaanna wrote:
    np, zawiadomienie, decyzja, postanowienie itp
    nie zda rezultatu, jeśli wyraz wystąpi w treści dokumentu. Mogę np. wystosować do kolegi takie pismo:

    Quote:
    ZAWIADOMIENIE

    Szanowny Kolego,
    Po wczorajszym spotkaniu zapadła decyzja, że idziemy na piwo.
    Powyższe postanowienie zostanie wdrożone w czyn w dniu 11.12 b.r. o godzinie 18-tej. Proszę o terminowe stawienie się na rynku o podanej godzinie.

    Z wyrazami szacunku...

    :)
    To oczywiście bardzo prosty przykład, jednak słowo "zawiadomienie" nie zawsze musi być pierwszym słowem - nad nim może być adres nadawcy, odbiorcy etc.

    Jeśli format będzie stały (pisma wg szablonu od jednego nadawcy), można próbować jakoś to rozgraniczyć, jeśli różny, to...
  • #9
    annnaanna
    Level 7  
    Jutro przygotuje wzory dokumentow, tak pisanie to nie ma sensu. Dziekuje za pomoc
  • #10
    annnaanna
    Level 7  
    Witam. Przygotowałam załączniki.

    W pracy mam WORD i EXEL 2007, mam mieć WORD i EXEL 2010. Przepraszam jeśli popełnie jakiś błąd.

    Chodzi mi o makro, które skanuje dokumenty. Powiedzmy mam dokument "wezwanie do braków formalnych1" makro skanuje(rozpoznaje) znak sprawy " 0111-2233-0111-00000001/15" datę "13-07-2015 " i rozpoznaje co to za dokument "Wezwanie dla braków formalnych". Po ze skanowaniu tego dokumentu i uzyskaniu danych, przenosi te dane do exela o nazwie "_DANE_" (zeszyt i akrusz mają taka sama nazwę).

    W "_DANE_" wyszkuje Znak sprawy "0111-2233-0111-00000001/15" i tytuł kolumny "wezwanie do braków formalnych" wstawia ze skanowane dane, czyli nr dokumentu "0111-00000011113/15" i datę "13-07-2015" w odpowiednie miesce.

    Znaków spraw może być maksymalnie na dokumentach: "wezwanie do braków formalnych" i dokumencie "Wezwanie do wyjaśnień" maksymalnie 5. Rzadko tak jest. Przeważnie bywa tylko 3.

    Decyzje zawsze mają jeden znak sprawy i jeden nr dokumentu, czyli prościej.

    Zakładając że mamy na dokumentach typu: "wezwanie do braków formalnych" i dokumencie "Wezwanie do wyjaśnień" liczbę znaków 2( np 0111-2233-0111-00000002/15 i 0111-22334-0111-00000001/15) numer dokumentu jest taki sam dla każdej z tych sprawy taki sam, makro umieszcza nr dokumentu w komórkach dla tych spraw i dla tego typu dokumentu w zeszycie exela"_DANE_". oczywiście po odnalezieniu tych znaków spraw i nazwy dokumentu.
  • #11
    annnaanna
    Level 7  
    Zrobiłam przykładowe dane w zeszycie exela"_DANE_". Nie wiedziałam, jak mam napisać znaki spraw. Czy jeden pod drugim, czy też obok siebie jak to zrobiłam. Bywa tak że dana maja od 1 do 5 znaków spraw. W zalezności od tego ile musi być spraw.

    Przepraszam jak zamieszałam. Nie miałam takiego zamiaru. Jaśniej nie umiałam wytłumaczyć.

    Jest szansa żeby makro takie działało? jesli tak to wtedy bedę mogła z pliku "_DANE_" eksportować dane do innych plików.

    Nie znam się na informatyce. Prosze o pomoc. Z góry ślicznie dziękuje.
  • #12
    adamas_nt
    Moderator of Programming
    Postanowiłem potrenować szare komórki odrobinę ;)
    W załączniku folder "ćwiczebny" (należy rozpakować i zapisać na dysku/pulpicie). Do działania makra potrzebne są referencje "Microsoft Word x.xx Object Library" (w załączonym pliku włączone).

    W przykładzie wyekstrahowanie Nr dokumentu i daty. Z pozostałymi parametrami można podobnie. Pozostaje jedynie odszukanie wiersza i kolumny w pliku docelowym.

    Jest jeszcze kwestia tytułu (nazwy dokumentu). Jeśli ostatnim wierszem przed jego wystąpieniem jest, wcześniej niewystępujący, kod pocztowy (spacja & dwie cyfry & myślnik & trzy cyfry & spacja) i jakieś (nieistotne tutaj) miasto, to nie powinno być większych problemów.
  • #13
    annnaanna
    Level 7  
    Ślicznie dziekuje. W poniedzialek sprawdzę w pracy czy działa i dam znac
  • #15
    annnaanna
    Level 7  
    Witam.
    Do adamas_net chciala na początku Pana przeprosić za to ze dopiero teraz odpisuje. Jednoczenie podziekowac za makro, które Pan napisał.
    Makro które Pan napisał działa, tzn skanuje datę, nr dokumentu i nazwę dokumentu.

    Na 10 prob jakie zrobilam. 3 porazka(wg mnie ze względu na wiersze w tych dokumentach byly w innym miejscu); 7 poprawnie( w tym 1 przestawialo datę rrrr-mm-dd na rrrr-dd-mm). Ogólnie jest ok.

    liczyłam a nie wiem czy jest taka mozliwosc, ze makro będzie mozna podpiąć pod worda. I za pomocy skrótu zostanie uruchomione makro będzie skanować te dane. Nie wiem czy sie tak da zrobić.

    Nie wiem jakie bylo Pana zalozenie odnośnie makra. Makro które ze skanuje dane i przenosi do exela, w którym wstawia dane ze skanowane do konkretnej komorki. W skrócie sprawa 1 to w exelu odnajduje spraw 1 i wstawia dane ze skanowane.

    Chciala bym z góry przeprosić. Przemyślałam plik exela"dane" i doszłam ze najlepiej bedzie jak znaki spraw będą w kolumnie tylko A, ułożone po kolei. Jeśli jest taka potrzeba mogę wyslac wzor.

    Dodano po 7 [minuty]:

    Jeszcze jedna uwaga. Makro to dziala kiedy dane są zapisane w jakiś folderze. Rozumiem ze tak musi być. Myslalam ze jak makro będzie w wordzie to dokumentów nie będę musiala zapisywać.
  • #16
    adamas_nt
    Moderator of Programming
    annnaanna wrote:
    Do adamas_net chciala na początku Pana przeprosić za to ze
    Jeju, za co? W zasadzie każdy swój post musiałbym rozpoczynać od przeprosin :)
    annnaanna wrote:
    liczyłam a nie wiem czy jest taka mozliwosc, ze makro będzie mozna podpiąć pod worda. I za pomocy skrótu zostanie uruchomione makro będzie skanować te dane. Nie wiem czy sie tak da zrobić. (...) Myslalam ze jak makro będzie w wordzie to dokumentów nie będę musiala zapisywać.
    Nie powinno być problemów. Dla pewności, proszę spróbować włączyć referencje do "Microsoft Excel xx.x object library" w normal.dot i zamknąć Word'a z zapisaniem. Najprościej: otwierając Word'a z menu Start, Alt+F11, Tools>References
    VBA jako skaner w wordzie
    Będziemy musieli odwrócić wiązania...

    Jeśli są jakieś wzory w ostatecznej formie, to jak najbardziej. Nikt przeróbek specjalnie nie lubi ;)

    Interesują mnie (i pewnie nie tylko) również te 3 porażki. Może wystarczy jedynie "sięgnąć głębiej" w treść dokumentu, lub dopisać jakiś drobiazg do warunków?
  • #17
    annnaanna
    Level 7  
    Witam.

    W pracy ok. 98% procent dokumentów generuje się z systemu. Nie ma potrzeby ich zapisywania na dysku komputera. Z tego ok 90 % przepuszacza się przez makro, ktore ma wylkreśla nie potrzebne rzeczy, np.Pan/Pani. W przypadku przepuszecznia przez to,że tak nazwie "nasze" makro nie zawsze działa Pana makro. to nie jest jakiś wielki problem. Zawsze mogę powiedzieć żeby uruchomili najpierw Pana makro a potem "nasze". I sprawa będzie załatwiona.

    Makro ktore Pan napisał, żeby można było podpiąć pod WORD. Wtedy za pomocą skórtu będzie można ze "skanować" potrzebne informacje i umieszczać w pliku"Dane_skaner". Przepraszam za zmiane. uwżam że ta wersaja jest czytelniejsza.

    Zmieniłam tylko plik "Dane_skaner". Wszystkie znaki zostały ułożone pokolei. Myślę że tak jest czytelniej i może łatwiej w znalezieniu, znaku sprawy(tylko kolumny A) i określonenej komórki gdzie mają być umieszczone dane(nr dokumentu i data).

    Przykład 1.
    Znak sprawy 0111-2233-0111-00000001/15, nr dokumentu 0111-00000001/15 data 03-07-2015, wezwanie do braków formalnych. Makro skanuje ten dokumentu i umieszcza w pliku"DANE_Skaner" w komórce B3(nr dokumentu) i datę w komórce C3.

    Przykład2.(DWA znaki spraw)
    Znak sprawy 0111-2233-0111-00000002/15, i drugi znak sprawy: 0111-22334-0111-00000001/15 nr dokumentu 0111-00000002/15 data 03-07-2015, wezwanie do braków formalnych.
    Makro skanuje ten dokumentu i umieszcza w pliku"DANE_Skaner" w komórce B4(nr dokumentu:0111-00000002/15 ) i datę(03-07-2015) w komórce C4, dla znaku sprawy 0111-2233-0111-00000002/15.

    Znak 0111-22334-0111-00000001/15, makro umieszcza dane odpowiednio; nr dokumentu 0111-00000002/15 w komórce B 5003; datę (03-07-2015)
    w komórce C 5003.
    W przypadku 3 znaków sprawy działa tak na takiej samej zasadzie.

    We wzorach jakie Panu umiesciałam wcześniej, zdarza się(tylko w przypadku wezwań) wystepowanie jednego lub dwóch lub trzech znaków sprawy. W zależności czy wezwanie obojmuje jedną czu dwie czy trzy sprawy. Numer dokumnetu dla każdej ze spraw będzie ZAWSZE taki sam.


    Po rozpakowaniu od Pana załączników i zrobienia "próby", po numerze dokumentu zaraz jest pojawiał się taki kwadracik. Nie wiem czy tak ma być.

    Ten druki załączniku jaki podpiełam, makro co Pan zrobił mi nie chodziło. Nie wiem dlaczego.

    Chciała bym przeprosić za swój błąd. Napisałam wezwanie do wyjaśnień a powinno byc wezwanie do złożenia wyjaśnień. WZOR podpiełam teraz.

    Mogła bym Panu z procedury podać wzory wszystkich dokumentów, ale one są zrobione w nastepujący sposób: w wordzie jest wklejone jakby zdjęcie, które wg. nie da się edytować ani skopiować.

    To już kończe swoje pisanie.
  • #18
    adamas_nt
    Moderator of Programming
    Zauważyłem zmianę układu w DANE_SKANER.xls. Czy w takim (Wezwanie..2)
    Znak sprawy A: 0111-2233-0111-00000002/15
    Znak sprawy B: 0111-22334-0111-00000001/15
    przypadku, dane umieszczamy w dwóch wierszach (4 oraz 5003)

    A w takim (Decyzja1)
    Znak sprawy: 0111-65111-0111-00000001/15
    dopisujemy nowy wiersz (brak w kol 1)
    Dobrze kombinuję?

    W związku z tym, że w Word'zie nie ma excel'owskiego Find, wyszukiwanie wiersza zrealizowane jest w pętli. Mieliśmy już przypadek, że takie rozwiązanie na mojej maszynie "szło" pół dnia, na innych 5 sek.

    Przy czasie załączę w celu przetestowania. Proszę jednak o cierpliwość. Czas przedświąteczny ;)
  • #19
    annnaanna
    Level 7  
    [quote="adamas_nt"]Zauważyłem zmianę układu w DANE_SKANER.xls. Czy w takim (Wezwanie..2)
    Znak sprawy A: 0111-2233-0111-00000002/15
    Znak sprawy B: 0111-22334-0111-00000001/15
    przypadku, dane umieszczamy w dwóch wierszach (4 oraz 5003)

    Dodano po 2 [minuty]:

    Wezwanie 2 dobrze kolega rozumuje. Tak powinno być

    Dodano po 4 [minuty]:

    Nie sprawdzałam wzoru decyzji. Jest na innym kompie, Moglam popełnić błąd odnośnie decyzji. Pewnie we wzorze "Decyzji" powinien być Znak sprawy 0111-65111-0111-00000001/15 . Wtedy też umieszcza w date w odpowiedniej komórce

    Dodano po 5 [godziny] 20 [minuty]:

    Wzór "decyzji1" sprawdziłam, popełniłam błąd. Wysyłam poprawiony wzor
  • #20
    adamas_nt
    Moderator of Programming
    Makro do przetestowania. Uwagi:

    1. Najlepiej wrzucić kod do modułu "normal.dotm". Najprościej: otworzyć Worda z menu 'Start', nagrać dowolne makro wybierając miejsce przechowywanie "szablon globalny". Następnie zastąpić je poniższym, włączyć referencje i zamknąć Worda z zapisem szablonu.
    Makro będzie dostępne w każdym dokumencie. Żeby nie rozsyłać makra z nowymi dokumentami, będzie trzeba wejść głębiej w zarządzanie szablonami.

    2. "Wezwanie do braków formalnych" <> "Wezwanie dla braków formalnych "
    dlatego (niewielka tolerancja się przyda):
    tytul = Array("wezwaniemalnych", "wezwaniejaśnień", "decyzja") oraz
    If test <> "decyzja" Then test = Mid(test, 1, 8) & Mid(test, Len(test) - 6, 7)

    3. W wielu miejscach jest trymowanie, usuwanie spacji, zamiana "O" na "0", itp
    być może potrzebne będą jeszcze jakieś czary-mary. Wyjdzie w praniu. Starałem się opisać wszystko w komentarzach.

    4. Lokalizacja pliku "DANE_SKANER.xls" - pulpit. Można zmienić przez przypisanie zmiennej "ePath".

    5. Jeśli nie odnaleziono 'znak sprawy' - zostanie wstawiony nowy wiersz na końcu
    Code: vbscript
    Log in, to see the code

    u mnie dla dwóch pozycji:
    VBA jako skaner w wordzie

    Wesołych Świąt!
  • #21
    annnaanna
    Level 7  
    Ślicznie dziekuje koledze za pomoc z makrem. W poniedzialek przetestuje i poinformuje o wynikach testu. Jeszcze raz dziękuję za pomoc.