Office problem

Pomoč pri delu z MS Excelom
Odgovori
JankoK
Prispevkov: 8
Pridružen: Ne Mar 23, 2014 4:06 pm

Office problem

Odgovor Napisal/-a JankoK »

Živjo!
Obrnil sem se na tale forum v upanju na rešitev mojega problema ki se že vleče kakšen mesec. Torej, imam podatkovno bazo z pdf datotekami (v dropdown menijih) za katere sem ustaril gumb "print" ter "tiskalnik", namen prvega gumba je da mi odpre pdf datoteko ter jo avtomatsko sprinta, drugi pa izbira tiskalnika. Problem sem se spravil rešiti z makroti katere sem uspešno našel ter jih implementiral v office, zdaj mi pa nikakor ne uspe to spraviti k delovanju tako da me zanima kje sem naredil napako da mi gumba ne funkcionirata (gumb print ob pritisku sicer deluje, vendar ko dodam gumb ter macro "tiskalnik" mi napiše "error 424" ter gumb "print" neha delovati - ob pritisku ni nobenega učinka).

Za lažjo predstavo prilagam slike ter macro kodo:

https://dl.dropboxusercontent.com/u/455 ... ffice1.jpg

https://dl.dropboxusercontent.com/u/455 ... ffice2.jpg

Macro gumba "print":

Koda: Izberi vse

Sub printPDFfiles()
'******************************************
'CHECK IF A PRINTER IS SELECTED..
'******************************************
zPrinter = [chosenPrinter]                  'fetch value from named cell

If zPrinter = "" Then                       'CAN'T HAVE A BLANK ENTRY, SO..
zPrinter = ActivePrinter    'e.g. "hp LaserJet 1320 PCL 5 on Ne04:"

zPosition = Application.Find(" on ", zPrinter)  '<< look for " on " in
zPrinterName = Left(zPrinter, zPosition - 1)    '<< removes the " on Ne04:"
[chosenPrinter] = zPrinterName                  '<< printer name, without port
'[chosenPrinter] = ActivePrinter                '<< printer with port address
End If                                      'end of test for no printer selection
'******************************************
'ChDrive "E"        '<< if your files are on a different drive!

'NOTE:Example below uses Adobe Reader, but apply to Acrobat as well.
'If you are using Acrobat, substitute Acrobat.exe in place of AcroRd32.exe
'on the command line.

'NOTE:
'/s=don't show splash screen
'/n=new instance
'/h=minimised window
'/t=print to default printer; or use /t <filename> <printername> <drivername> <portname>

'CHECK YOUR ADOBE READER VERSION, AND USE CORRECT PATH..
zProg = "C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe"
'zProg = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe"
'******************************************
'FETCH NUMBER OF FILES TO PRINT..
'******************************************
zCount = L7                       'fetch value from named cell; # of PDF files


With ActiveSheet.Shapes("Drop Down 64").ControlFormat 'Izberem trenutno vrednost iz seznama za vsak seznam boš moral ustvariti svoj gumb, če hočeš da deluje.
    
    vIzbraniPredmet = .List(.Value) 'zapišem ime datoteke v spremenljivko vIzbraniPredmet
    'MsgBox (vIzbraniPredmet)
    
End With

vSplosnaPot = "c:\test\Nove\" 'Pot mora biti na tvojem kompu enaka kot tukaj.
vIzbraniPredmet = """" & vSplosnaPot & vIzbraniPredmet & """"  ' V spremenljivko zapišem pot do dokumenta.. Vsi tej narekovaji so tukaj zato ker imaš presledek v imenih datotek.
'vIzbraniPredmet = """c:\Nove\3830046990075.pdf"""
MsgBox vIzbraniPredmet

'zLastRow = [a65536].End(xlUp).Row           'find last row in column [A]; e.g. 15
'temp = "a1:a" & zLastRow                    'e.g. "a1:a15"

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'For Each cell In Range(temp)                'loop through all entries in range
zFile = vIzbraniPredmet                          'fetch filename from cell
vTest = "*.pdf" & """"
'MsgBox vTest

If zFile Like vTest Then                'check it is a pdf file type
Shell (zProg & " /n /h /t " & zFile)        'execute command to print  the pdf document
End If                                      'end of test for pdf file type

'Next                                        'process nect file in list
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

End Sub
Macro gumba "tiskalnik"

Koda: Izberi vse

Sub selectPrinter()

Application.Dialogs(xlDialogPrinterSetup).Show (ActivePrinter)
zPrinter = ActivePrinter    'e.g. "hp LaserJet 1320 PCL 5 on Ne04:"

zPosition = Application.Find(" on ", zPrinter)
zPrinterName = Left(zPrinter, zPosition - 1)    '<< removes the " on Ne04:"
[chosenPrinter] = zPrinterName                  '<< printer name, without port
'[chosenPrinter] = ActivePrinter                '<< printer with port address

End Sub


Hvala za vso pomoč!
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Office problem

Odgovor Napisal/-a admin »

Pozdravljeni,

Takoj opazim sledeče napake:
  • Ali imate definirano celico 'chosenPrinter', saj se tja zapiše izbran tiskalnik?
  • Napaka '424' pomeni 'Object Required' oz. VBA zahteva objekt, ki ga niste posredovali, kje se vam to zgodi morate pa povedati tako, da se z razhroščevalcem (Debuger) sprehodite preko kodo in poveste na kateri vrstici koda preneha delovati.
lp,
Matjaž Prtenjak
Administrator
JankoK
Prispevkov: 8
Pridružen: Ne Mar 23, 2014 4:06 pm

Re: Office problem

Odgovor Napisal/-a JankoK »

Super, nisem imel definirane celice - hvala! sem popravil, zdaj mi stvar funkcionira do neke mere.
Nevem zakaj mi vedno ob kliku na gumb "print" 2x odpre msg box na katera kliknem "ok" in mi odpre 2 pdf datoteki ter mi vrže v pdfu okenček za shranjevanje te datoteke namesto okenčna za print. Kaj bi bilo lahko pa tu narobe ?
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Office problem

Odgovor Napisal/-a admin »

Pozdravljeni,

Postavite se v kodo in na eni izmed vrstic kode (na začetku funkcije) pritisnite tipko F9. Vrstica se bo obarvala rdeče, kar pomeni da ste tam postavili prekinitveno točko. Ko boste program izvajali se bo slednji ustavil na vsaki prekinitveni točki, ki jo določite.

Ko ste torej določili prekinitveno točko se postavite nazaj v Excel in pritisnite gumb oz. izvedite funkcijo, ki jo želite. Ko bo slednja prišla do prekinitvene točke, se bo tam ustavila in vam prikazala vašo kodo. Od tod dalje pa se lahko potem preprosto premikate z uporabo funkcijske tipke F8 in točno vidite, kaj se dogaja. na tan način boste takoj ugotovili na katerem mestu v programu se vam odpre okno in zakaj se vam odpre 2x.
lp,
Matjaž Prtenjak
Administrator
JankoK
Prispevkov: 8
Pridružen: Ne Mar 23, 2014 4:06 pm

Re: Office problem

Odgovor Napisal/-a JankoK »

Odlično! Vidim da stvar obvladaš, ker napako takoj odpravim ko mi poveš kako stvar funkcionira, hvala ti!
Zdaj mi odpre tako kot mora, zataknilo se mi je le še ko kliknem "print" mi odpre pdf datoteko ter avtomatsko vrže okenček "Save the file as", kaj bi bilo lahko tukaj narobe ? Moralo bi mi odpreti okence za printanje namesto za shranjevanje.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Office problem

Odgovor Napisal/-a admin »

Pozdravljeni,

Na kateri vrstici pa se vam odpre okno 'SaveAs'. pokažite tisti del kode in bomo videli, kaj naj bi bilo.
lp,
Matjaž Prtenjak
Administrator
JankoK
Prispevkov: 8
Pridružen: Ne Mar 23, 2014 4:06 pm

Re: Office problem

Odgovor Napisal/-a JankoK »

Mislim da je čisto nakoncu kode nekaj narobe z shell komando:

Koda: Izberi vse

vSplosnaPot = "c:\test\Nove\"                'pot do .pdf datotek
vIzbraniPredmet = """" & vSplosnaPot & vIzbraniPredmet & """"
zFile = vIzbraniPredmet
vTest = "*.pdf" & """"
'MsgBox vTest

If zFile Like vTest Then                'Preveri če je .pdf datoteka
Shell (zProg & " /n /h /t " & zFile)        'naj bi zagnalo komando "print" v pdf-ju
End If
Tako se koda konča in mislim da je problem pri Shell komandi saj ne zažene komande za print temveč za shranjevanje tiste datoteke ?
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Office problem

Odgovor Napisal/-a admin »

Pozdravljeni,

Poglejte kaj točno predajate komandi Shell:

Koda: Izberi vse

ukaz = zProg & " /n /h /t " & zFile
In sedaj ta ukaz preprosto izvedite v ukazni vrstici Oken in boste videli, kaj ukaz naredi. Če ne naredi tistega kar pričakujete morate popraviti ta ukaz; to nima zveze z VBA
lp,
Matjaž Prtenjak
Administrator
JankoK
Prispevkov: 8
Pridružen: Ne Mar 23, 2014 4:06 pm

Re: Office problem

Odgovor Napisal/-a JankoK »

Ne razumem najbolje odgovora kje naj bi to komando preizkusil, vendar sklepam da je Shell komanda napačna in je potrebno vse v oklepajih (zProg & " /n /h /t " & zFile) zamenjati z pravo komando ?
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Office problem

Odgovor Napisal/-a admin »

Pozdravljeni,

Ukaz (komando po vaše) lahko preizkusite v Ukazni vrstici (ali 'command promptu' oz 'CMD-ju', kot mu tudi pravijo). Gre pa za ukazno vrstico Oken, ki jo dobite preprosto tako da v Start/zaženi napišete CMD.

Tam lahko vaš ukaz preizkusite in vidite kaj naredi ter ga ustrezno popravite, da bo naredil tisto kar mora - če seveda to zna :)
lp,
Matjaž Prtenjak
Administrator
JankoK
Prispevkov: 8
Pridružen: Ne Mar 23, 2014 4:06 pm

Re: Office problem

Odgovor Napisal/-a JankoK »

Ne naredi nič, CMD ne prepozna ukaza ? ali delam kaj narobe ?

edit: sem popravil ukaz z:

Koda: Izberi vse

Shell (zProg & " /n /h /t " & Chr(34) & zFile & Chr(34) & " " & zPrinter) 
vendar mi zdaj napiše error v adobe readerju " There was an error opening this document..." in mi ne odpre .pdf datoteke ?
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Office problem

Odgovor Napisal/-a admin »

JankoK napisal/-a:Ne naredi nič, CMD ne prepozna ukaza ?
:):) Če bi ne prepoznal ukaza potem se tudi adobe nebi zagnal...

In kakšen je ukaz, ki naj bi ga ukazna vrstica ne spoznala?
lp,
Matjaž Prtenjak
Administrator
JankoK
Prispevkov: 8
Pridružen: Ne Mar 23, 2014 4:06 pm

Re: Office problem

Odgovor Napisal/-a JankoK »

Evo sem popravil! superca, hvala ti 100x ! bom priporočil tale forum še drugim ker je top! :D

Ukaz sem zamenjal z ukazom:

Koda: Izberi vse

zCommand = zProg & " /n /h /t " & zFile & " " & zPrinter
Shell (zCommand)
Probleme mi je povzročala "Chr(34)" komanda na koncu ker mi je "pokvarila" pot do datoteke - vsaj tako razumem delovanje te funkcije.
Tisto z shranjevanjem namesto printanjem pa je povzročal Microsoft XPS document writter katerega sem imel kot primarni printer, zato mi je datoteko ponujalo za shranjevanje v XPS kar ni imelo veze s kodo.

Zadnja stvar ki pa me zanima je, kako zdaj to "kopiram" še na druge gumbe ? Zdaj imam narejeno za eno vrstico, imam pa še nekaj drugih vrstic z različnimi "dropdown" meniji v katerih so izbrane .pdf datoteke, je kakšna možnost kopiranja macrotov ali kako lahko zdaj te gumbe skopiram še za druge vrstice z macroti (v macrotih bom potem samo spremenil "št. dropdowna " ter ostale spremeniljivke) ?
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Office problem

Odgovor Napisal/-a admin »

JankoK napisal/-a:Zadnja stvar ki pa me zanima je, kako zdaj to "kopiram" še na druge gumbe ?
Hm, kako to mislite? Ideja funkcij je ravno v tem, da jih lahko kličete kjerkoli. Če imate torej funkcijo printPDFfiles jo preprosto kličete na odzivih gumbov:

Koda: Izberi vse

Sub Gumb1_Klikni()
  printPDFfiles()
End Sub

Sub Gumb2_Klikni()
  printPDFfiles()
End Sub

JankoK napisal/-a:Zdaj imam narejeno za eno vrstico, imam pa še nekaj drugih vrstic z različnimi "dropdown" meniji v katerih so izbrane .pdf datoteke, je kakšna možnost kopiranja macrotov ali kako lahko zdaj te gumbe skopiram še za druge vrstice z macroti (v macrotih bom potem samo spremenil "št. dropdowna " ter ostale spremeniljivke) ?
Tega vprašanja pa ne razumem ravno najbolje, vendar pa vam, tudi glede na gornje vprašanje, predlagam, da si najprej preberete nekaj osnov o programiranju.

Če imate torej neko funkcijo, ki vam nekaj naredi jo lahko pač kličete od koderkoli (gornji odgovor). V kolikor pa mora funkcija narediti različne stvari, ko jo kličete iz različnih koncev, pa mora sprejeti parametre, ki ji natančneje povedo, kaj naj naredi.
Če se torej mora funkcija obnašati različno glede na to iz katere celice jo kličete, ji morate kot parameter pač podati celico in potem funkcija naredi tisto, kar mora narediti pač glede na to iz katere celice ste jo poklicali.
lp,
Matjaž Prtenjak
Administrator
JankoK
Prispevkov: 8
Pridružen: Ne Mar 23, 2014 4:06 pm

Re: Office problem

Odgovor Napisal/-a JankoK »

Ja tako, nekaj takega sem imel v mislih. Torej recimo imam 2 dropdown menija, zdaj za prvi dropdown meni mi gumbi funkcionirajo, če pa to funkcijo kličem še na drugem gumbu bo pa delalo enako kot na prvem za dropdown1 in ne za dropdown2, nepoznam načina kako bi naredil gumb na katerem bi bila ista funkcija le z različnim dostopom dropdowna tako da bi vsak gumb imel funkcijo ki dostopa do dropdowna v svoji vrstici (recimo sedaj imam dropdown1 gumbe delujoče, zdaj potrebujem dropdown2, dropdown3 gumbe ter nekako bi rad skopiral macro PrintPDFfiles in mu spremenil vrstico kjer je določen dropdown1 z dropdown2 da bi še za druge dropdown menije delovalo na enak način kot pri prvem).
Upam da sem bolj jasen, nevem pa kako se naredi parameter celice, mi lahko napišeš samo primer k moji kodi ?
Recimo zdaj imam takole:

Koda: Izberi vse

With ActiveSheet.Shapes("Drop Down 64").ControlFormat
    vIzbraniPredmet = .List(.Value) 
End With
in če dodam spodaj:

Koda: Izberi vse

With ActiveSheet.Shapes("Drop Down 65").ControlFormat
    vIzbraniPredmet = .List(.Value)
    'MsgBox (vIzbraniPredmet)
End With
Mi ne funkcionira če spremenim DropDown na 65


Hvala!
Odgovori