Makro za samodejno shranjevanje spojenih dokumentov v posamezno mapo

Pomoč pri izdelavi makrov
Odgovori
Vikmar
Prispevkov: 22
Pridružen: Pe Jun 10, 2016 8:36 pm

Makro za samodejno shranjevanje spojenih dokumentov v posamezno mapo

Odgovor Napisal/-a Vikmar »

Pozdravljeni.
Prosim za pomoč pri rešitvi problema, ki se mi pokaže pri zagonu makra v Wordu.
Želja je, da se po spajanju dokumentov izdelane priponke samodejno shranijo v PDF obliki v mapo, ki je odprta za posameznega prejemnika. V Excelovi tabeli, je tudi stolpec s povezavami do mape za posametnega prejemnika.
Bing AI mi je za ta namen napisal makro, ki sem ga v Wordu zagnal.
Ob zagonu makra se mi pojavlja napaka ' Compile error: User defined type not defined '. Po Bing AI navodilih sem preveril, če imam pod 'Tools -> References' označeno Microsoft Excel 16.0 Object Library in Microsoft Word 16.0 Object Library. Možnost Microsoft Word 16.0. Object Library ni bila odkljukana, zato sem jo odkljukal in shranil. Napaka se je ponovila zato sem zopet pogledal na isto mesto in Wordova knjižnica ni bila odkljukana čeprav sem prej spremembo shranil. Vezano na to težavo mi je Bing AI ponudil te možnosti za rešitev problema:
1. Odstranite in ponovno dodajte referenco: ( to sem storil, rezultat je bil isti);
2. Preverite, ali je Microsoft Word dejansko nameščen: ( glede na to, da lahko Word odprem in v njem delam, predvidevam, da je dejansko nameščen?)
3. Uporabite “late binding”: ( tudi to sem spremenil po navodilih, pa ni bilo spremembe);
4. Preverite, ali so potrebne posodobitve: ( preveril in posodobil, nobene spremembe).
Scripta, ki mi jo je za potrebe samodejnega shranjevanja v posamezne mape napisal je:

' Sub SaveInvoices()
Dim wd As Word.Application
Dim wdDoc As Word.Document
Dim xl As Excel.Application
Dim xlWb As Excel.Workbook
Dim xlWs As Excel.Worksheet
Dim i As Long

Set wd = New Word.Application
Set wdDoc = wd.Documents.Open("02_Račun za tekoči mesec.doc")
Set xl = New Excel.Application
Set xlWb = xl.Workbooks.Open("01_Seznam računov za leto 2024.xlsx")
Set xlWs = xlWb.Sheets("List1")

wd.Visible = True
xl.Visible = True

For i = 2 To xlWs.Cells(xlWs.Rows.Count, "A").End(xlUp).Row
If Not IsEmpty(xlWs.Cells(i, "C").Value) Then
With wdDoc.MailMerge
.MainDocumentType = wdFormLetters
.OpenDataSource Name:=xlWb.FullName, _
ReadOnly:=True, _
AddToRecentFiles:=False, _
LinkToSource:=True, _
Connection:="Data Source=" & xlWb.FullName & ";Mode=Read", _
SQLStatement:="SELECT * FROM [" & xlWs.Name & "$] WHERE `ID NAROČNIKA` = " & xlWs.Cells(i, "C").Value
.Destination = wdSendToNewDocument
.Execute
End With

wd.ActiveDocument.SaveAs2 FileName:=xlWs.Cells(i, "Z").Value & xlWs.Cells(i, "B").Value & ".pdf", FileFormat:=wdFormatPDF
wd.ActiveDocument.Close False
End If
Next i

wdDoc.Close False
Set wdDoc = Nothing
wd.Quit
Set wd = Nothing
xlWb.Close False
Set xlWb = Nothing
xl.Quit
Set xl = Nothing
End Sub'

Mogoče veste, kako lahko rešim problem ( samo ne mi prosim reči: ' Ja Bing AI vpraši!', :D ker izgleda, da je tudi pri umetni inteligenci omejitev).
Če pa obstaja še kakšen drugačen način za rešitev samodejnega shranjevanja spojene datoteke v posamezno mapo, bo pa tudi dobrodošla informacija!
Hvala za odgovor!
Viktor
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro za samodejno shranjevanje spojenih dokumentov v posamezno mapo

Odgovor Napisal/-a admin »

Pozdravljeni,

Prosim da pri vprašanjih, kjer vstavljate programsko kodo uporabite peti gumb zgoraj in kodo zaprite med oznaki za kodo:

Koda: Izberi vse

S tem je potem programsko kodo lažje brati
saj se upoštevajo prelomi vrstic
in vse črke so enako široke.
Zdaj pa k vaši težavi.

Bing vam je pravilno svetoval in res, vse kar morate narediti je da znotraj 'Microsoft Visual basic For Aplications' okna (to je tam kjer vnašate programsko kodo) izberete Tools/References.

Odpre se novo okno, kjer se z miško odpeljite kar precej dol (izbire so sortirane po črkah) in najdite Microsoft Excel 16.0 Object Library ter jo obljukajte, Ostalega ne potrebujete, saj pravite da želite to zaganjati v Wordu. Za zagon makra v word-u je to dovolj!

Bing ne ve kje želite vi to zaganjati in če bi to zaganjali v PowerPoint-u, potem pa bi morali obkljukati tako Excel, kot Word. S tem ste se prebili preko vrstic

Koda: Izberi vse

Dim wd As Word.Application
in

Koda: Izberi vse

Dim xl As Excel.Application
To je to - Vendar, da se razumeva - jaz ne trdim da makro deluje pravilno kaj imate vi zapisano v datotekah '02_Račun za tekoči mesec.doc' in '01_Seznam računov za leto 2024.xlsx' ne vem

Torej od trenutka ko v Wordu odkljukate Microsoft Excel 16.0 Object Library bo makro shemantično deloval - vsebinsko pa seveda ne vem!
lp,
Matjaž Prtenjak
Administrator
Vikmar
Prispevkov: 22
Pridružen: Pe Jun 10, 2016 8:36 pm

Re: Makro za samodejno shranjevanje spojenih dokumentov v posamezno mapo

Odgovor Napisal/-a Vikmar »

Hvala za hiter odgovor in napotek za vnos kode!
Napako mi javlja kljub temu, da imam Microsoft Excel 16.0 Object Library odkljukano.
Ampak, če sedaj zadevo pravilno razumem, bi morala biti v kodi označena tudi stolpca v Excelu, ki določata po kakšnem ključu se prenos spojenih dokumentov izvaja. Pa v kodi ne vidim nazivov obeh stolpcev. V tabeli imam stolpec z definirano potjo do posamezne mape ' POT DO MAPE' , kamor bi se moral pdf dokument prenesti, pa ga v sami kodi ni. Je mogoče tudi v tem težava?
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro za samodejno shranjevanje spojenih dokumentov v posamezno mapo

Odgovor Napisal/-a admin »

Pozdravljeni,

Da, nisem se želel spuščati v to, da vam ne uničim pričakovanj, vendar ta makro ne bo naredil tistega, kar ste vi opisovali na začetku.

Saj orodja so zelo uporabna in jih tudi sam uporabljam, vendar pa so zaenkrat vseeno samo pomočniki in je še vedno potrebno dobro vedeti kaj počnemo.
lp,
Matjaž Prtenjak
Administrator
Vikmar
Prispevkov: 22
Pridružen: Pe Jun 10, 2016 8:36 pm

Re: Makro za samodejno shranjevanje spojenih dokumentov v posamezno mapo

Odgovor Napisal/-a Vikmar »

Pošteno.
Imate mogoče kakšen nasvet glede literature, ki bi nekomu, ki ni izobražen informatik, razumljivo razložila VBA pisanje kod, po možnosti v slovenščini?
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro za samodejno shranjevanje spojenih dokumentov v posamezno mapo

Odgovor Napisal/-a admin »

Predlagam vam, da si - za začetek - v knjižnici izposodite mojo knjigo 'Visual basic za Aplikacije'

Je v Slovenščini in je namenjena "ne-programerjem". Dala vam bo dobre osnove, vendar od tod dalje pa literature v Slovenščini ne bo več :(
lp,
Matjaž Prtenjak
Administrator
Vikmar
Prispevkov: 22
Pridružen: Pe Jun 10, 2016 8:36 pm

Re: Makro za samodejno shranjevanje spojenih dokumentov v posamezno mapo

Odgovor Napisal/-a Vikmar »

Že sam hitri opis na začetku posredovanega linka, da ' je knjiga o usodnih strasteh, knjiga o srečni ženi, katere svet se naenkrat zruši.' obeta :D :)! A se da to knjigo kje kupiti? Ker iščem po netu za možnost nakupa, pa knjige ne najdem!
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Makro za samodejno shranjevanje spojenih dokumentov v posamezno mapo

Odgovor Napisal/-a admin »

Oh ne, to je že zelo "stara" knjiga in že dolgo ni več v prodaji oz je razprodana.
lp,
Matjaž Prtenjak
Administrator
Odgovori