Avatar billede boligkode Nybegynder
03. december 2007 - 06:16 Der er 13 kommentarer

VBA - hvis sti/bibliotek/mappe ikke findes

Har denne kode, som jeg har fået hjælp til:

Option Explicit

Private mstrFileNames() As String
Private miX As String
Public PDFNavn, PDFFilnavn As String

Public Sub DebugPrintFilesNames()
    Dim iZ As Integer
    Dim wbTemp As Workbook
    Dim sUserPath As String
   
    sUserPath = UserSelectFilePath
    FindTheFiles sUserPath, "xls"
   
    For iZ = 1 To miX
   
        'Åben fil
        Set wbTemp = Application.Workbooks.Open(sUserPath & mstrFileNames(iZ))
               
        Range("A1").Select
        ActiveCell.FormulaR1C1 = _
            "=MID(CELL(""filnavn""),FIND(""["",CELL(""filnavn""))+1,FIND("".xls"",CELL(""filnavn""))-FIND(""["",CELL(""filnavn""))-1)"
        PDFNavn = ActiveCell.Value
       
        PDFFilnavn = sUserPath & "PDFTest\" & PDFNavn & ".pdf"
   
        Sheets(1).Select
       
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFilnavn, Quality _
            :=xlQualityMinimum, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
            OpenAfterPublish:=False
       
        ' Luk fil
        wbTemp.Close SaveChanges:=False
        Set wbTemp = Nothing
    Next iZ

End Sub

Public Function UserSelectFilePath() As String
    Dim sRetVal
    Dim vntFileToOpen As Variant
    Dim iChar As Integer
   
    vntFileToOpen = Application.GetOpenFilename("Text Files (*.xls), *.xls")
    If vntFileToOpen <> False Then
        'MsgBox "Open " & vntFileToOpen
        For iChar = Len(vntFileToOpen) To 1 Step -1
            If Mid(CStr(vntFileToOpen), iChar, 1) = "\" Then
                sRetVal = Left(CStr(vntFileToOpen), iChar)
                Exit For
            End If
        Next iChar
    End If
   
    UserSelectFilePath = sRetVal
End Function

Den danner PDF-filer ud af fra en udvalgt mappe. Og gemmer disse filer afhængigt af indhold i filen i en defineret mappe.

Inden den gemmer som PDF - hvorledes får jeg den til at lave en kontrol af om mappen findes. Og evt. giver brugeren en besked - og derefter går videre?
Avatar billede gider_ikke_mere Nybegynder
03. december 2007 - 08:13 #1
DIrekte fra hjælp:

Sub test()
' Display the names in C:\ that represent directories.
MyPath = "c:\ss\"    ' Set the path.
MyName = Dir(MyPath, vbDirectory)    ' Retrieve the first entry.
Do While MyName <> ""    ' Start the loop.
    ' Ignore the current directory and the encompassing directory.
    If MyName <> "." And MyName <> ".." Then
        ' Use bitwise comparison to make sure MyName is a directory.
        If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
            Debug.Print MyName    ' Display entry only if it
        End If    ' it represents a directory.
    End If
    MyName = Dir    ' Get next entry.
Loop
End Sub
Avatar billede word-hajen Nybegynder
03. december 2007 - 08:16 #2
Før linjen ActiveSheet.ExportAsFixed....(osv.) sætter du følgende kode:

    If Dir(sUserPath & "PDFTest", vbDirectory) = "" Then
        Msgbox "Folderen " & sUserPath & "PDFTest eksisterer ikke.", vbInformation
        Exit Sub
    End If

Der bliver tjekket på, om folderen eksisterer. Hvis ikke, får brugeren en meddelelse, og brugeren forlader derefter proceduren.
Avatar billede boligkode Nybegynder
03. december 2007 - 08:27 #3
>akyhne. tak for kommentar. Umiddelbart ser wordhajens løsning lettere ud. ;-}
>Wordhaj. Tak for kommentar. Koden er jo i en For..Next-løkke. Den skulle ikke så gerne stoppe det resterende gennemløb af filer. Men blot gøre opmærksom på at denne fil ikke kan behandles pga sti/mappe - men at makroen løber videre.

Alternativt skulle makroen måske komme med en liste over hvilke filer, som den var hoppet over grundet Error (uanset fejl) når den er færdig. Men det er jo en anden løsning, som dog måske er smartere (og mere besværlig at kode). Så vil 'producenten' jo få produceret det meste - men alligevel have en liste over forhold der skal tilses 'manuelt'.
Avatar billede gider_ikke_mere Nybegynder
03. december 2007 - 08:30 #4
Det var blot for at vise dig hvordan man kan checke hvad du spurgte efter. jeg har ikke kigget din kode igennem.
Avatar billede gider_ikke_mere Nybegynder
03. december 2007 - 08:34 #5
Du skal blot bruge mkdir til at oprette stien, hvis den ikke findes.
Avatar billede boligkode Nybegynder
03. december 2007 - 08:38 #6
> Akyhne. Tak for det. Det forstod jeg også.
Omkring mkdir. Stien skal helst ikke oprettes - fordi det oftest er en brugerfejl i selve sti-angivelsen fra filen. Altså at man har skrevet forkerte oplysninger i filen der skal omdannes til PDF. Og det er oftest ikke nødvendigvis samme bruger.
Avatar billede gider_ikke_mere Nybegynder
03. december 2007 - 08:41 #7
Jamen så i stedet for en msgbox i word-hajens kode, bygger du bare et array op, og laver en msgbox over alle fejlene til sidst.
Avatar billede boligkode Nybegynder
03. december 2007 - 08:46 #8
Array: Det har jeg godt set får i en anden sammenhæng. Men det kan jeg vist ikke sådan lige få op at stå uden hjælp. Dette gælder både opsamlingen af fejl, samt at hoppe over - hvis den støder på fejl.
Avatar billede boligkode Nybegynder
03. december 2007 - 08:47 #9
får skulle være før
Avatar billede gider_ikke_mere Nybegynder
03. december 2007 - 09:00 #10
Prøv denne (ikke testet):

Public Sub DebugPrintFilesNames()
    Dim iZ As Integer
    Dim wbTemp As Workbook
    Dim sUserPath As String
    Dim Fejlliste As String

    Fejlliste = "Følgende stier eksisterer ikke!" '(længde 31)
    sUserPath = UserSelectFilePath
    FindTheFiles sUserPath, "xls"
   
    For iZ = 1 To miX
   
        'Åben fil
        Set wbTemp = Application.Workbooks.Open(sUserPath & mstrFileNames(iZ))
               
        Range("A1").Select
        ActiveCell.FormulaR1C1 = _
            "=MID(CELL(""filnavn""),FIND(""["",CELL(""filnavn""))+1,FIND("".xls"",CELL(""filnavn""))-FIND(""["",CELL(""filnavn""))-1)"
        PDFNavn = ActiveCell.Value

    If Dir(sUserPath & "PDFTest", vbDirectory) = "" Then
        Fejlliste = Fejlliste & Chr(10) & Dir(sUserPath & "PDFTest", vbDirectory)
        GoTo næste:
    End If

        PDFFilnavn = sUserPath & "PDFTest\" & PDFNavn & ".pdf"
   
        Sheets(1).Select
       
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFilnavn, Quality _
            :=xlQualityMinimum, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
            OpenAfterPublish:=False
       
        ' Luk fil
        wbTemp.Close SaveChanges:=False
        Set wbTemp = Nothing
næste:
    Next iZ
If Len(Fejlliste) > 31 Then MsgBox Fejlliste
End Sub
Avatar billede gider_ikke_mere Nybegynder
03. december 2007 - 09:03 #11
Jeg kan ikke teste, da du ikke har al din kode med, men det burde virke. Tallet 31 er længden af default fjelteksten:

Fejlliste = "Følgende stier eksisterer ikke!" '(længde 31)

Hvis du ændrer den, skal du lige tælle op hvor mange tegn der er i din nye default fejltekst, og rette.
Avatar billede boligkode Nybegynder
03. december 2007 - 09:23 #12
Tusind tak. Jeg kikker på senere på dagen. Nu vælter møderne ind i en lind strøm til kl. 18. Se umiddelbart godt ud - og ja - hele koden er der ikke.....
Avatar billede word-hajen Nybegynder
10. februar 2008 - 17:17 #13
Mange møder? (rigtig, rigtig mange møder)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester