[ inzenjerija @ 13.11.2018. 13:43 ] @
Pozdrav narode

Opet ja sa problemom koji vidim da se vrteo bas na ovom forumu ali nikako da resim problem.
Radi se o tome da bih zeleo specifikaciju koju sam uokvirio sa SET PRINT AREA snimi u PDF formatu sa tekstom koji se nalazi u celiji N4.
Koristio sam stranicu http://ic.ims.hr/office/excel2003/razno/saveAs.html i ona mi je posluzila za jedan manji primer ali ne i za ovaj.
Mozete li pogledati kod i reci mi gde gresim

Code:
Sub Snimi_PDF() ' macro za snimanje racuna u PDF pomocu Microsoftovog ugradjenog alata za Office 2007

Dim txtIme As String

txtIme = "D:\R  A  Z  M  E  N  A    MAP\S P E C I F I K A C I J E\2018\" & Range("N4") & ".pdf"  'path do foldera i ime nove datoteke koja se snima
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=txtIme, _
OpenAfterPublish:=False

End Sub
[ Jpeca @ 13.11.2018. 14:36 ] @
U N4 imaš kosu crtu. Kad sam je zamenio to sa - snimio mi pdf fajl.

Code:
NTFS ne prihvata sledeće karaktere u nazivu fajla: 
/ \ : * ? " < > |
[ bokinet @ 13.11.2018. 15:08 ] @
Dodatak uz @Jpeca i nas doprinos eto malo da bude bolje definisano...

Code:


Public Sub Export2PDF(ByVal FolderLocation As String, ByVal Filename As String)

    On Error Resume Next

    FolderLocation = Trim(FolderLocation)
    Filename = Trim(Filename)
    
    If Len(FolderLocation) = 0 Then Err.Raise 1001, "Export2PDF", "Folder location not set."
    
    If Len(Filename) = 0 Then Err.Raise 1002, "Export2PDF", "File name not set."
    
    If Right(FolderLocation, 1) <> "\" Then FolderLocation = FolderLocation & "\"
    
    Dim sReplaceWith As String
    
    'sReplaceWith = ""
    sReplaceWith = "_"
    
    Filename = Replace(Filename, "\", sReplaceWith)
    Filename = Replace(Filename, "/", sReplaceWith)
    Filename = Replace(Filename, ":", sReplaceWith)
    Filename = Replace(Filename, "*", sReplaceWith)
    Filename = Replace(Filename, "?", sReplaceWith)
    Filename = Replace(Filename, """", sReplaceWith)
    Filename = Replace(Filename, "<", sReplaceWith)
    Filename = Replace(Filename, ">", sReplaceWith)
    Filename = Replace(Filename, "|", sReplaceWith)

    ' Make full path
    Filename = FolderLocation & Filename

    ' Try to export
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Filename, OpenAfterPublish:=False

    If Err.Number <> 0 Then
    
        ' Show message to user
        MsgBox "Doslo je do greske prilikom izvoza sadrzaja u PDF format." & vbCrLf & "Error " & Err.Number & " - " & Err.Description, vbCritical, "Export2PDF"
    
        Err.Clear
        
    End If
    
End Sub
Sub SnimiPDF()

    Export2PDF "D:\R  A  Z  M  E  N  A    MAP\S P E C I F I K A C I J E\2018\", Range("N4") & ".pdf"

End Sub



Preporuka da se prilikom dodavanja datuma u nazivu file a ako to nije propisano da mora da bude u formatu dd/mm/yyyy bude formulisano u formatu yyyy/mm/dd iz razloga sto kasnije prilikom sortiranja istih fileova sa razlicitim datom ce biti pravilno prikazani u recimo Windows Explorer-u ako se sortiranje file-ova vrsi po nazivu file-a (sortiranje stringova).

U prilogu je dat gore dati kod u okviru excel file-a.




[ jaskojsako @ 13.11.2018. 19:30 ] @
Pozdrav
pokusaj sa ovim kodom


Dim SaveAsStr As String

SaveAsStr = "C:\FAKTURA \" & "\" & ActiveSheet.Range("M15").Value & "-" & ActiveSheet.Range("Q15").Value 'zamjeni gdje se snima,.Range("M15").Value je ovdje broj fakture a .Range("Q15").Value je godina

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=SaveAsStr & ".pdf", _
OpenAfterPublish:=False
[ inzenjerija @ 14.11.2018. 18:24 ] @
evo i mene

hvala svima na odgovoru.
banalna stvar prilikom davanja imena bilo kojeg fajla kao sto je naveo @Jpeca ali eto promalko mi je jer sam se bazirao na kod a nisam obratio paznju na krajnje ime fajla
@bokinet opet mi je pravio isti problem koji si postavio ijako sam promenio umesto / postavio _ predpostavljam da je kod tebe radilo ali kod mene nece, izgleda da nesto preskacem
@jaskojasko iskoristio sam tvoj kod i odradio mi je posao uz modifikaciju na napomenu od @Jpeca broja predmeta u celiji B9 koji se koristi za ime fajla

jos jednom hvala svima
[ bokinet @ 14.11.2018. 18:43 ] @
- Koja je greska u pitanju? Kada javi da je doslo do greska, sta napise u opisu? Isto ako mozes kroz debug da se izvuce err.number & err.description bi mozda znacilo;

- Koja verzija Excel-a je u pitanju i za koju arhitekturu (x86 ili x64)?

F-ja koja je uradjena i data za vas primer a koja se poziva posle kroz drugi deo pod programa, sve sto se tice imena file-a cisti a sto se tice znakova koje ujedno naveo i @Jpeca, tako da bi konkretnije moglo mozda nesto vise da se kaze kada se dobiju odgovori na gore postavljena pitanja.


Ne bi bilo lose uzorke naziva svih file-ova koji se koriste da se isto navedu i daju kao i lokacije. Vidim da se naziv file u vasem slucaju izvodi na osnovu vise vrednosti i kasnije upisuju u jedno polje a koje se posle koristi kao naziv file-a - to je razlog i za upit sto se traze i nazivi file-ova kao i lokacija.

[ inzenjerija @ 14.11.2018. 18:55 ] @
u pitanju je office 2007 a arhitektura je x64
okacit cu sliku koja se konkretno odnosi na problem
[ bokinet @ 14.11.2018. 18:59 ] @
Ako se dobija poruka prilikom izvrsavanja koda:
Code execution has been interrupted

To moze da se resi na sledeci nacin (dato kroz moj vec dati primer f-je koja se poziva kroz drugi deo tj. pod program)

Code:


Sub SnimiPDF()

    Dim sFileName As String
    Dim sFolderLocation As String
    
    Dim vEnableCancelKey As XlEnableCancelKey
    
    ' Optional: Get's current value which is set for 'Application.EnableCancelKey' - make value backup for later restore
    vEnableCancelKey = Application.EnableCancelKey
    
    ' Disable EnableCancelKey
    Application.EnableCancelKey = xlDisabled
    
    sFolderLocation = "D:\R  A  Z  M  E  N  A    MAP\S P E C I F I K A C I J E\2018\"
    sFileName = Range("N4") & ".pdf"
    
    ' Export to PDF
    Export2PDF sFolderLocation, sFileName
    
    ' Return value from backup
    Application.EnableCancelKey = vEnableCancelKey

End Sub





Do greske moze takodje da dodje i kada lokacija tj. folder (direktorijum) nije fizicki prisutan te je onda u tom slucaju pre snimanja potrebno istu lokaciju kreirati kroz kod preko odgovarajucih VB (VBA) komandi ili koristeci sistemske API f-je.
[ inzenjerija @ 14.11.2018. 19:00 ] @
@bokinet izvinjavam se
moja je greska. gornji kod pod nazivom Snimi_PDF je pravio gresku i on je bio vezan BUTON
dok zadnji kod SnimiPDF odradjuje posaoi bez menjanja znaka /

hvala ti @bokinet
[ bokinet @ 14.11.2018. 19:04 ] @
Dodao sam vam podrsku i za moguci problem u MS Excelu kao sto sam vam vec nagovestio u mom poslednjem postu pre ovog.

'Code execution has been interrupted'

Ostaje samo jos da se odradi podrska da se proveri fizicka lokacija gde se snima tj. exportuje file.

Ako nije prisutna da se napravi.

Takodje sto se tice prakse izbegavati 'R A Z M E N A MAP\S P E C I F I K A C I J E\2018' jer moze kasnije da vam napravi probleme u radu zbog praznih mesta!

Pitomije i bolje deluje 'x:\Razmena MAP\Specifikacije\2018\'

Zar ne?

;)


[ inzenjerija @ 22.11.2018. 13:47 ] @
da ne otvaram drugu temu a tice se i ove koja je vec otvorena.

kako da iskoristim kod koji je poslao @jaskojsako da bih prilikom snimanja u PDF na osnovu sadrzaja celije recimo B3 napravi fasciklu i u toj fascikli snimi pod imenom koji koji se nalazi u celiji A1.

Recimo da je u celiji B3 upisano KAKADULADU onda bi ptanja bila D:\R A Z M E N A MAP\S P E C I F I K A C I J E\2018\KAKADULADU
ili
Recimo da je u celiji B3 upisano ZIGZAG onda bi ptanja bila D:\R A Z M E N A MAP\S P E C I F I K A C I J E\2018\ZIGZAG

I u okviru nje bi se snimio fajl pod imenom sadrzaja celije A1

nadam se da nije komplikovano mnogo
[ bokinet @ 22.11.2018. 15:40 ] @
Postoji vise nacina da se to uradi.

Preko VB(VBA) komande (dato dole), FSO set objekata, preko Win32 API f-ja i preko SHELL f-ja.

komanda mkdir

https://docs.microsoft.com/en-...interface-help/mkdir-statement

https://www.techonthenet.com/excel/formulas/mkdir.php

Vec vam je dato resenje gde se ovo oko kreiranja foldera ako je to potrebno moze dodati kao dodatni korak u kodu...


[ jaskojsako @ 22.11.2018. 18:18 ] @
Pozdrav
evo kod koji snima u PDF sa nazivom iz celije A1,i gdje se otvara dialog gdje da se snima PDF
nadam se da sam razumio sta treba

Dim ws As Worksheet
Dim strPath As String
Dim myFile As Variant
Dim strFile As String
On Error GoTo errHandler

Set ws = ActiveSheet

'enter name and select folder for file
' start in current workbook folder
strFile = Replace(Replace(ws.Name, " ", ""), ".", "_") _
& "_" _
& Range("A1").Value _
& ".pdf"
strFile = ThisWorkbook.Path & "\" & strFile

myFile = Application.GetSaveAsFilename _
(InitialFileName:=strFile, _
FileFilter:="PDF Files (*.pdf), *.pdf", _
Title:="Izaberi Folder i naziv file za snimanje ")

If myFile <> "False" Then
ws.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=myFile, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

MsgBox "PDF file je kreiran."
End If

exitHandler:
Exit Sub
errHandler:
MsgBox "Ne mogu kreirati PDF file"
Resume exitHandler
[ jaskojsako @ 22.11.2018. 18:23 ] @
A evo i drugog načina gdje mozes napraviti foldere za snimanje par nih i napraviti par kontrolni dugmadi
za snimanje za određeni fajl(jedan da snima naziv celije A1 drugi folder za drugu celiju i tako dalje,onaj prvi kod za snimanje mozes iskorisiti
a ovaj kod za pravljenje foldera sa tacnim nazivom.

Dim FolderPath As String

FolderPath = "C:\FAKTURA"
If Right(FolderPath, 1) <> "\" Then
FolderPath = FolderPath & "\"
End If

If Dir(FolderPath, vbDirectory) <> vbNullString Then
MsgBox "Folder vec postoji"
Else
MsgBox "Folder možete napraviti samo jednom ", vbInformation, "UPOZORENJE"
MkDir "C:\FAKTURA "

MsgBox "Folder FAKTURA uspješno napravljen ", vbInformation, "obavijest"

MsgBox "Folder se nalazi na lokalnom disku C: ", vbInformation, "obavijest"
End If

.............................................................................................................................
A evo kod da otvoris folder direktno iz excela,naravno mjenjaj putanju i naziv foldera po potrebi


Dim MyFolder As String
MyFolder = "C:\FAKTURA \"
ActiveWorkbook.FollowHyperlink MyFolder
[ inzenjerija @ 23.11.2018. 12:36 ] @
ovi kodovi kreiraju folder po vec utvrdjenoj putanji ili se bar ja nisam snasao

a trazeci po netu naleteo sam na stranicu https://www.extendoffice.com/d...te-folders-based-on-excel.html
gde se nalazi kod
Code:
Sub MakeFolders()
Dim Rng As Range
Dim maxRows, maxCols, r, c As Integer
Set Rng = Selection
maxRows = Rng.Rows.Count
maxCols = Rng.Columns.Count
For c = 1 To maxCols
r = 1
Do While r <= maxRows
If Len(Dir(ActiveWorkbook.Path & "\" & Rng(r, c), vbDirectory)) = 0 Then
MkDir (ActiveWorkbook.Path & "\" & Rng(r, c))
On Error Resume Next
End If
r = r + 1
Loop
Next c
End Sub


ali on creira folder u folderu gde se nalazi otvoreni excel fajl
dali moze u kodu da se definise putanja gde treba da kreira folder?
ja sam pokusao da modifikujem kod ali bezuspesno
[ bokinet @ 23.11.2018. 12:46 ] @
@inzenjerija
Kratki odgovor: Moze!

Duzi odgovor:
Mislim, da bi trebalo malo razumeti komande koje se koriste i malo procitati koliko toliko sta i kako se koristi a ne samo raditi 'copy-paste'.
Takodje treba i razumeti sta kod radi u celini.

Na osnovu gore vec datog je napravoljen ovaj zaklucak.

[ inzenjerija @ 23.11.2018. 13:07 ] @
kritika je na mestu. Istina, to mi je slabost. ja bar imam utisak da je programiranje dosta siroko,

uzgred sam naisao na resenje sa stranice https://www.mrexcel.com/forum/...-folder-based-cell-values.html

gde sam modifikaovao kod za moje potrebe

Code:
Sub CreateFolder()
Dim NewFolder As String
    NewFolder = "D:\R  A  Z  M  E  N  A    MAP\S P E C I F I K A C I J E\2018\" & Range("A2") & "_" & Range("B2")
        If Len(Dir(NewFolder, vbDirectory)) = 0 Then
           MkDir NewFolder
        Else
            MsgBox "Folder already exists"
        End If
End Sub


hvala svima