Import date in Access dintr-un Template Word

Acest template care l-am folosit la Salvarea automata in word are 2  intrebuintari. Care credeti ca a mai fost rolul lui?

1. Pentru completarea rapida si corecta a campurilor

As fi vrut sa astept un raspuns dar cum blog-ul meu este nou, nu prea are cine sa isi de-a cu parerea, asa ca spun si care e punctul 2

2. Pe baza informatiilor din acest document se fac 3 rapoarte. Rapoartele trebuie sa fie in excel.

Ce am facut eu (posibil sa fie variante mai usoare si mai bune):

a) Am facut o baza de date in acces (nenormalizata). Nu pentru ca nu as sti sa o normalizez, dar este mai usor asa si nici nu am avut timp cand am proiectat-o. Am facut intr-o noapte si baza de date si macro de import (plus ca nu mi-a iesit nimic financiar sa fiu motivat). Ma justific pentru specialisti, poate candva o sa citeasca si ei acest blog.

Arata cam asa:

Daca o sa fie cineva interesat sa fie atent la ambele imagini, o sa observe ca pentru fiecare camp din fisierul doc exista un corespondent in baza de date.

Recapitulam:

1. Avem un fisier word cu field-uri cu denumiri sugestive cum ar fi fldnume, flddata. Ex:

2. Avem o baza de date creata dupa campurile din document.

3. Creem un modul in Baza de date. Pentru necunoascatori, pentru a ajunge in Visual Basic cat mai usor si din toate versiunile de Office actionati combinatia de taste ALT+F11.

Codul arata cam asa:

„Option Compare Database

Public Sub getworddata()
Dim appWord As Word.Application
Dim doc As Word.Document
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strDocName As String
Dim blnQuitWord As Boolean

On Error GoTo ErrorHandling

strDocName = „D:\certificate distrugere\certificate distrugere\” & _
InputBox(„Enter the name of the Word contract ” & _
„you want to import:”, „Import Contract”)

Set appWord = GetObject(, „Word.Application”)
Set doc = appWord.Documents.Open(strDocName)

cnn.Open „Provider=Microsoft.Jet.OLEDB.4.0;” & _
„Data Source=D:\certificate distrugere\” & _
„Certificare distrugere.mdb;”
rst.Open „cert_distrugere”, cnn, _
adOpenKeyset, adLockOptimistic

With rst
.AddNew
!Nr_cert = doc.FormFields(„fldnrcert”).Result
!Data_cert = doc.FormFields(„flddatacert”).Result
!Numeprenume = doc.FormFields(„fldnumeprenume”).Result
!Nationalitate = doc.FormFields(„fldnationalitate”).Result
!Judet = doc.FormFields(„fldjudet”).Result
!Localitate = doc.FormFields(„fldlocalitate”).Result
!Adresa = doc.FormFields(„fldadresa”).Result
!Actidentitate = doc.FormFields(„fldactidentitate”).Result
!Serie = doc.FormFields(„fldSeria”).Result
!numar = doc.FormFields(„fldnumar”).Result
!Cnp = doc.FormFields(„fldcnp”).Result
!eliberat_de = doc.FormFields(„fldeliberat”).Result
!data_eliberarebuletin = doc.FormFields(„flddataeliberare”).Result
!categorie = doc.FormFields(„fldcategorie”).Result
!marca = doc.FormFields(„fldmarca”).Result
!tip = doc.FormFields(„fldtipmasina”).Result
!Ult_nr_inmatriculare = doc.FormFields(„fldnrinmatriculare”).Result
!Nr_seria = doc.FormFields(„fldseriacartii”).Result
!Nr_seria_cert_inmatriculare = doc.FormFields(„fldseriacertificatul”).Result
!nr_identificare = doc.FormFields(„fldnridentificare”).Result
!an_fabricatie = doc.FormFields(„fldanfabricatie”).Result
!comp_esentiale = doc.FormFields(„fldcomp”).Result
!an_prima_inmatriculare = doc.FormFields(„fldanprima”).Result
!capacitate_cilindrica = doc.FormFields(„fldcapcilindrica”).Result
!serie_motor = doc.FormFields(„fldseriemotor”).Result
!serie_ticket_valoric = doc.FormFields(„fldserietichet”).Result
!nr_ticket_valoric = doc.FormFields(„fldnrtichet”).Result
!greutate = doc.FormFields(„fldgreutate”).Result

.Update
.Close
End With
doc.Close
If blnQuitWord Then appWord.Quit
cnn.Close
MsgBox „Contract Imported!”

Cleanup:
Set rst = Nothing
Set cnn = Nothing
Set doc = Nothing
Set appWord = Nothing
Exit Sub
ErrorHandling:
Select Case Err
Case -2147022986, 429
Set appWord = CreateObject(„Word.Application”)
blnQuitWord = True
Resume Next
Case 5121, 5174
MsgBox „You must select a valid Word document. ” _
& „No data imported.”, vbOKOnly, _
„Document Not Found”
Case 5941
MsgBox „The document you selected does not ” _
& „contain the required form fields. ” _
& „No data imported.”, vbOKOnly, _
„Fields Not Found”
Case Else
MsgBox Err & „: ” & Err.Description
End Select
GoTo Cleanup
End Sub”

MORE INFO: Pentru a merge acest cod trebuie sa activati din Tools> Reference> Microsoft Word 12.0 object Library pentru Office 2007  sau Microsoft Word 11.0 object Library daca se folosete Office 2003.

Trebuie sa aveti selectata limba romana din Control Panel > Regional and Language settings (pentru data din formular, am avut mari batai de cap din cauza asta).

Revin mai tarziu cum un film, modul cum functioneaza. Nu stiu cat am fost de explicit in scris, va arat video si o sa fie mai interesant.

Update: http://www.youtube.com/watch?v=Q47M94G6CM0

Binenteles exportul in excel dintr-o baza de date access nu mai este o problema. Intr-un post viitor o sa pun si modul in care fac rapoartele.

Nu stiu pe cati o sa intereseze chestiile astea, dar eu am cautat mult solutii si nu am gasit pe nimeni sa ma ajute, asa ca daca cineva  doreste help…. sunt aici.

PS: Pentru ce am facut eu aici, merit undeva nota 7. Pentru cunoscatori se stie, ca se putea introduce tot acest cod in aplicatia principala (poate candva in viitorul apropiat o sa fac si asta)

2 Responses to Import date in Access dintr-un Template Word

  1. Pingback: Aplicatie Remat (casare masini uzate) « Ionut Sinescu

  2. Pingback: 2010 in review « Ionut Sinescu

Lasă un răspuns

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s

%d blogeri au apreciat asta: