Word+Building Blocks+Excel

Ce este nou in Microsoft Word 2010?
Informatii despre cum se utilizeaza Microsoft Word 2010
Editare, formatare, automatizare de documente
Închis
Elendiar
Mesaje: 4
Membru din: Mar Noi 13, 2012 2:45 pm

Word+Building Blocks+Excel

Mesaj de Elendiar » Mie Mar 27, 2013 9:32 pm

Salutare, tuturor,

Am nevoie de puțin ajutor. Vreau să fac în așa fel încât să realizez o „conexiune” automată între un fișier docx și unul xlsx. Ideea este că în fișierul excel am formule care îmi calculează o serie de parametri în funcție de anumite date. În funcție de acești parametri eu vreau să completez fișierul word (care este deja formatat, cu spații dedicate fiecărui parametru) cu anumite texte asociate plajei de valori pe care un parametru o poate lua.
Până acum făceam totul manual. Obțineam rezultatele parametrilor, apoi, selectam textul corespunzător valorii respective, îl copiam și îl lipeam în documentul word, în capitolul corespunzător, după care treceam mai departe.
Este un proces care îmi consumă mult timp fiind nevoit să fac aceste operații pentru aproximativ 25 de parametri.
Recent am descoperit acele minunate building blocks care mi-au permis să creez blocuri (quickparts) pentru fiecare text, așa că treaba merge mult mai repede acum.
Cu toate astea, mi-am propus în continuare să găsesc o metodă de a automatiza acest întreg proces. Mă gândesc că ar putea fi creată o rutină macro care să facă în mod automat selecția blocurilor, în funcție de valoarea unei celule din fișierul excel.
Ex.

if [test.xlsx]'Sheet 1'$A$1="1" then "text1" else
if [test.xlsx]'Sheet 1'$A$1="2" then "text2" else
if [test.xlsx]'Sheet 1'$A$1="3" then "text3"
.
.
.
Unde celula A1 reprezintă prima variabilă, iar text1 reprezintă blocul de text asociat valorii "1".

Îmi imaginez că aș avea nevoie de o rutină pentru fiecare variabilă, care să îmi insereze blocul în spațiile alese de mine în documentul respectiv. În ultimă instanță vreau să pot deschide fișierul excel, să introduc datele necesare pentru generarea valorilor variabilelor, să deschid apoi fișierul excel și să activez macrourile și să salvez în sfârșit fișierul word, completat, în forma finală.

Informații suplimentare: Nu mă pricep deloc la macro-uri, deși încep să îmi doresc să fi știut... :))

Mulțumesc anticipat!

O zi frumoasă vă doresc!

Andrei

IPP
Moderator
Moderator
Mesaje: 3865
Membru din: Mie Iul 29, 2009 7:26 am
Localitate: Cluj-Napoca

Re: Word+Building Blocks+Excel

Mesaj de IPP » Sâm Mar 30, 2013 8:25 pm

Buna seara

Atasat gasiti o idee de abordare a problemei dvs.

Obiectiv: inserarea automata (=la rularea macro), in locul specificat de utilizator a unui bloc de text predefinit, in functie de o valoare dintr-o celula a unui fisier excel.

Premisa: Atat fisierul word cat si fisierul Excel vor fi in acelasi folder

1) Configurari in Excel (cu referire la fisierul exemplu)
-lista de corespondenta intre valoarea calculata si numele blocului de text ce va trebui inserat in concordanta cu acea valoare (v. Sheet1, A16:B19)
-C2 celula pentru introducerea unei valori numerice >=1
-A2 formula care sa returneze un rezultat (1, 2 sau 3) in functie de valoarea din C2
-A3 formula care sa extraga denumirea blocului de text aferenta valorii din A2

2) Configurari in Word
-Pentru a se putea lucra cu Excelul din Word trebuie bifat Microsoft Excel 14 Object Library care se gaseste in lista Tools, References din editorul VBA. (Pentru a deschide editorul VBA apasati Alt+F11)
-crearea blocurilor de text, salvarea si denumirea lor in concordanta cu lista facuta deja in excel (in exemplul meu acestea se numesc txt01, txt02 respectiv txt03)
-Codul macro, plasat intr-un modul:

Cod: Selectaţi tot

Public Sub Prelucrare()

'IPP - 30.03.2013

Dim appExcel As Excel.Application
 Set appExcel = CreateObject("Excel.Application")

Dim myPath As String
 myPath = ThisDocument.Path & "\"
Dim myUser As String
 myUser = Environ("username")
 
Dim qPrt As String

Templates.LoadBuildingBlocks

'deschide fisier excel
appExcel.Workbooks.Open myPath & "Parametri.xlsx"

'insereaza valoarea din foaia 1, A3 acolo unde e cursorul
Selection = appExcel.ActiveWorkbook.Sheets(1).Cells(3, 1)

'inchide excel
appExcel.Quit

'inlocuieste
qPrt = Selection

Application.Templates("C:\Users\" & myUser & "\AppData\Roaming\Microsoft\Document Building Blocks\1033\14\Building Blocks.dotx") _
        .BuildingBlockEntries(qPrt).Insert Where:=Selection.Range, RichText:=True
 
End Sub
-comunica Wordului ca se va lucra cu Excel
-identifica calea catre fisierul word ca fiind si cea in care se afla fisierul excel
-incarca in memorie blocurile de text
-deschide fisierul Excel si copiaza in word (acolo unde este cursorul in momentul rularii macro) denumirea blocului de text afisata ca urmare a valorii parametrului calculat in excel
-inlocuieste selectia (denumirea) cu blocul de text avand acea denumire.

Pentru testare: salvati arhiva pe disc si dezarhivati-o; deschideti folderul Elendiar deschideti fisierul excel si schimbati valoarea din Sheet1, C2. Ca urmare formula din A2 va afisa una dintre valorile: 1, 2 sau 3 iar formula din A3 va extrage denumirea corespondenta acelei valori sub forma de txt01, txt02 sau txt03. Salvati si inchideti fisierul.
Deschideti fisierul word, activati continutul, plasati cursorul in locul dorit si rulati macro (apasati Ctrl+Q).

IP
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Elendiar
Mesaje: 4
Membru din: Mar Noi 13, 2012 2:45 pm

Re: Word+Building Blocks+Excel

Mesaj de Elendiar » Mar Apr 09, 2013 11:02 am

Salut, IPP,

Putem vorbi la persoana a II-a singular. :)

Îți mulțumesc pentru propunere, este exact ceea ce căutam. Cu toate astea, trebuie ajustată puțin, căci eu nu am un singur parametru, ci vreo 25. Fiecare parametru ia valori dintr-o plajă de valori de la 1 la 9. În principiu treaba arată cam așa:

Parametrul 1: CV
Locație celulă: A2
Valoare: 1
Block asociat: CV1
(dacă are valoarea 7, block-ul asociat are denumirea CV7).

Parametrul 2: ND
Locație celulă: A3
Valoare: 7
Block asociat: ND7

...
...
...

Dacă aveam un singur parametru propunerea ta ar fi fost ideală, dar locațiile celulelor valorilor calculate sunt diferite, iar calculele sunt pentru parametri diferiți.
Un alt inconvenient este introducerea block-ului în locul cursorului de la mouse. Pentru că soluția asta nu se potrivește cu nevoile mele (nu se pot diferenția parametrii), mă gândeam să realizez bookmark-uri predefinite în interiorul documentului word, pe care să le apeleze rutina respectivă.

Ex:
În poziția bookmark-ului „CV” (creat în word) să introducă block-ul corespunzător textului (CV1) asociat valorii (1) parametrului CV din fișierul Excel (locația A2).

Același lucru trebuie să procedeze și pentru bookmark-ul ND, situat în același word, dar în următorul următor.

Fișierul excel intermediar îl pot popula cu asociațiile aferente:

Bookmark | Valoare parametru | block-text
CV | 1 | CV1
CV | 2 | CV2
CV | 3 | CV3
CV | 4 | CV4
...
...
CV | 9 | CV9

Acelasi lucru as face si pentru parametrul/bookmark-ul ND, precum si pentru urmatorii, fie in acelasi sheet, fie in sheeturi diferite.

Se poate realiza?

Sper că am reușit să fac ceva mai clară dilema mea. Îți mulțumesc din suflet pentru ajutor!

Toate cele bune!

IPP
Moderator
Moderator
Mesaje: 3865
Membru din: Mie Iul 29, 2009 7:26 am
Localitate: Cluj-Napoca

Re: Word+Building Blocks+Excel

Mesaj de IPP » Mar Apr 09, 2013 11:10 am

Buna ziua

n-am nimic impotriva ;)

Ar trebui sa atasezi niste fisiere exemplu chiar daca cu informatii minimale si fictive. Ar scuti nu numai timpul celui care incearca sa raspunda (ca regula generala) dar si ar inlatura unele neintelegeri.
Oricum doar diseara ma voi putea uita peste noutati

IP

IPP
Moderator
Moderator
Mesaje: 3865
Membru din: Mie Iul 29, 2009 7:26 am
Localitate: Cluj-Napoca

Re: Word+Building Blocks+Excel

Mesaj de IPP » Mar Apr 09, 2013 6:10 pm

Buna ziua

La nivel de fisier excel (a nu se schimba denumirea fisierului si a foilor implicate):
-o foaie (numita forWord) dedicata tabelului de corespondente intre denumirea semnelor de carte si denumirile blocurilor de text aferente valorii fiecarui parametru
-o foaie (numita Parametri) in care (incepand cu A2) vor aparea:
valorile aferente unui parametru (scrise direct sau calculate, ideea este sa aiba valori intre 1 inclusiv si 9 inclusiv)
denumirea parametrului (incepand cu B2)
denumirea blocului de text aferent (incepand cu C2). Aceasta este calculata automat de o combinatie de formule index+match

La nivel de fisier word (in vederea testarii):
-am inserat doua bookmark-(t)uri numite CV si ND
-am creat doar 4 blocuri de text aferente (atentie) CV1, CV3, ND2 si ND4
-am schimbat codul care a devenit acum (explicatiile le gasiti direct in el sub forma de comentarii)

Cod: Selectaţi tot

Public Sub Prelucrare()

'IPP - 09.04.2013

Dim appExcel As Excel.Application
 Set appExcel = CreateObject("Excel.Application")

Dim myPath As String
 myPath = ThisDocument.Path & "\"
Dim myUser As String
 myUser = Environ("username")
 
Dim qPrt As String
Dim bM As Bookmark

Templates.LoadBuildingBlocks

'deschide fisier excel
appExcel.Workbooks.Open myPath & "Parametri.xlsx"

'parcurge documentul word si, pentru fiecare semn de carte,
For Each bM In ThisDocument.Bookmarks
'selecteaza semnul de carte
 bM.Select

'inlocuieste semnul de carte, in functie de denumirea sa cu una sau
'alta, dupa caz, dintre valorile dein fisierul excel
Select Case bM.Name
    Case "CV"
    Selection = appExcel.ActiveWorkbook.Sheets("Parametri").Cells(2, 3)

    Case "NB"
    Selection = appExcel.ActiveWorkbook.Sheets("Parametri").Cells(3, 3)

End Select

'inlocuieste denumirea cu blocul de text aferent
qPrt = Selection

Application.Templates("C:\Users\" & myUser & "\AppData\Roaming\Microsoft\Document Building Blocks\1033\14\Building Blocks.dotx") _
        .BuildingBlockEntries(qPrt).Insert Where:=Selection.Range, RichText:=True
Next bM

'inchide fisierul si aplicatia excel
appExcel.ActiveWorkbook.Close
appExcel.Quit
 
End Sub
Pentru testare: salvati arhiva pe disc si dezarhivati-o; deschideti folderul Elendiar1, deschideti fisierul excel si schimbati valoarea din foaia Parametri, scriind 1 sau 3 in celula A2 si 2 sau 4 in celula A3. Ca urmare formulele din C2 si C3 vor extrage denumirea blocurilor de text corespondenta acelor denumiri+valori sub forma de CV1 sau CV3 respectiv ND2 sau ND4. Salvati si inchideti fisierul.

Deschideti fisierul word, activati continutul, si rulati macro (apasati Ctrl+Q).

IP
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Elendiar
Mesaje: 4
Membru din: Mar Noi 13, 2012 2:45 pm

Re: Word+Building Blocks+Excel

Mesaj de Elendiar » Mie Apr 10, 2013 10:06 am

Salut, IPP,

Te rog să mă ierți, dar ai fost mai rapid decât mine și nu am apucat să atașez documentele necesare. Verific diseară ce mi-ai trimis și vedem mai departe ce e de făcut!

Din câte am văzut, ar trebui să fie relativ ușor să completez codul cu toți parametrii de care am nevoie.

Îți mulțumesc!

Elendiar
Mesaje: 4
Membru din: Mar Noi 13, 2012 2:45 pm

Re: Word+Building Blocks+Excel

Mesaj de Elendiar » Mar Mar 25, 2014 2:05 pm

Salut, IPP,

Te rog să mă ierți pentru întârzierea cu care vine răspunsul meu. Deși între timp am lăsat totul baltă, în favoarea altor activități, acum am reluat proiectul și mi-am propus să învăț și vba. Îți mulțumesc pentru indicații!

Cu drag,
Andrei

Închis

Înapoi la “Intrebari despre Word 2010”