Word+Building Blocks+Excel
Word+Building Blocks+Excel
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
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
Re: Word+Building Blocks+Excel
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:
-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
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
-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.
Re: Word+Building Blocks+Excel
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!
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!
Re: Word+Building Blocks+Excel
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
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
Re: Word+Building Blocks+Excel
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)
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
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
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.
Re: Word+Building Blocks+Excel
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!
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!
Re: Word+Building Blocks+Excel
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
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