Excel VBA inserire documenti esterni in ListBox

Un saluto a tutti

Non sono afferrato in VBA, confido in un vostro auito.

Avrei da inserire in una ListBox dei documenti esterni (più di uno) che poi selezionati, vengano aperti per la stampa.
(non credo si posssano mandare in anteprima di stampa, quindi forse meglio aprirli, i doc in linea di massima sono in formato pdf)

la mia situazione attuale è questa:

[code]
Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ListBox1.AddItem (ws.Name)
    Next ws
    For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Column(0, i) = "Foglio2" Or ListBox1.Column(0, i) = "zuzi10" Then
        ListBox1.Selected(i) = True
    End If
Next
End Sub
[/code]

[code]
Private Sub CommandButton1_Click()
    Foglio = ActiveSheet.Index
    Dim arr() As Variant
    x = 0
    For n = 0 To Me.ListBox1.ListCount - 1
        If ListBox1.Selected(n) = True Then
        ReDim Preserve arr(x)
        arr(x) = Me.ListBox1.List(n)
        x = x + 1
        End If
    Next
    Sheets(arr).Select
    Unload UserForm1
    ActiveWindow.SelectedSheets.PrintPreview
    Worksheets(Foglio).Select
End Sub
[/code]

grazie per il vostro aiuto
Saluti
 

Informazioni domanda


Ultimo aggiornamento febbraio 27, 2018 Visualizzazioni 1.374 Si applica a:
Risposta

 

 

I documenti normalmente sono in PDF.

E essendo su un server interno si trovano su varie directory tipo

D:\Download\mioFile1.pdf

P:\programma\giovanni\mioFile2.pdf

 


Sui miei pc il tuo codice non gira. Se sul tuo si, segno evidente che non hai la dichiarazione delle variabili obbligatoria, con tutto quello che ne consegue. Inoltre, colpa mia (il nonno che c'è in me è potente), ma non capisco cosa vuoi fare. Puoi spiegarlo a parole? Grazie.

 

Se(se) quello che vuoi è selezionare più documenti nella ListBox, devi settare questa propietà:

Me.ListBox1.MultiSelect = 2

 

Se(se) quello che vuoi fare è aprire e stampare un file .pdf:

 

Public Sub m(ByVal s As String)

    Dim Shell As Object
    Set Shell = CreateObject("Shell.Application")
   
    Shell.Open s
    Application.Wait (Now + TimeValue("0:00:03"))
    SendKeys "%F", True
    Application.Wait (Now + TimeValue("0:00:01"))
    SendKeys "P", True
    SendKeys "{ENTER}", True
    SendKeys "%F", True
    SendKeys "x", True
   
    Set Shell = Nothing
   
End Sub

 

Dove passi alla routine la path del file da stampare come stringa. Una cosa come:

 

....

    Call m(laStringa)

....

 

Se quello che vuoi fare è ciclare un disco (qui il disco C:):

 

 

Public Sub m()

    Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim objSubfolder As Object
    Dim colSubfolders As Object
   
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder("C:\")
    Set colSubfolders = objFolder.Subfolders
   
    For Each objSubfolder In colSubfolders
        For Each objFile In objSubfolder.Files
            MsgBox objSubfolder.Name & vbNewLine & objFile.Name
        Next
    Next

   Set objSubfolder = Nothing
   Set colSubfolders = Nothing
   Set objFile = Nothing
   Set objFolder = Nothing
   Set objFSO = Nothing
        
End Sub

 

OCCHIO! Metti un punto di interruzione nel secondo For Each ed esegui il codice con F8 e interrompi quando hai capito come funzione, altrimenti ti passi tutto l'hard disk... Modificarlo poi per caricare solo i file di tuo interesse è semplice: un If che identifica il tipo di file e/o identifica la Directory. 

 

--
Mauro Gamberini
Microsoft© MVP (Excel)
http://www.maurogsc.eu

Il problema è stato risolto?

Siamo spiacenti che questo non sia stato d'aiuto.

Fantastico! Grazie per aver scelto questa risposta.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento, ci aiuta a migliorare il sito.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento.