Condividi tramite

Excel VBA inserire documenti esterni in ListBox

Anonimo
2013-05-16T18:40:10+00:00

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

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2013-05-22T08:44:55+00:00

     

     

    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.

    La risposta è stata utile?

    0 commenti Nessun commento

10 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-05-20T08:07:57+00:00

    L'idea sarebbe di aggiungere l'apertura dei/del documenti/o quando questi sono selezionati.

    vi ripropongo il codice attuale


    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


    Grazie e scusate il disturbo

    Ciao,

    ribadisco quanto già detto!

    L'array arr può contenere sia nomi di fogli di lavoro sia nomi di file PDF, nel codice che hai postato sono trattati entrambi allo stesso modo, ovvero come se fossero tutti fogli di lavoro.

    L'anteprima e la stampa dei PDF, invece, deve essere effettuata come ti abbiamo indicato Mauro ed io.

    Ciao,

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-05-19T23:20:50+00:00

    Ciao grazie delle risposte.

    Forse non mi son spiegato molto bene.

    Ho indicato appunto che dovrei aprirli, perkè pensavo che i doc esterni non potevo mandarli in stampa.

    Io però non devo cambiare il codice attuale della mia listbox, in quanto è quella che mi serve per stampare i fogli di excel.

    io intendevo aggiungere ai nomi dei fogli di excel nel listbox i nomi dei documenti PDF, che non ho in una cartella specifica ma troverò alcune cartelle di un server, quindi non tutte allo stesso posto.

    quindi avevo pensato una cosa del genere


    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

    Me.ListBox1.AddItem ("MioDocumento1")

    Me.ListBox1.AddItem ("MioDocumento2")

    Me.ListBox1.AddItem ("MioDocumento3")

    End Sub


    E così facendo ho la listbox con i fogli si excel e i doc

    Ora è l'altra parte di codice che non so come modificare...

    Nel altro codice, io in pratica mi trovo con 2 fogli già selezionati (posso deselezionarli) al momento che si apre la listbox, e posso selezionare/deselezionarle gli altri, in modo che stampo in anteprima i fogli che mi servono.

    L'idea sarebbe di aggiungere l'apertura dei/del documenti/o quando questi sono selezionati.

    vi ripropongo il codice attuale


    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


    Grazie e scusate il disturbo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-05-17T08:09:12+00:00

    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)

    <cut>

    grazie per il vostro aiuto

    Saluti

    Se(se) ho capito, puoi partire da qui:

    http://www.maurogsc.eu/esempiforum13/listboxfiles.zip

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2013-05-17T07:42:58+00:00

    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)

    <cut>

    Ciao,

    forse hai le idee un po' confuse.

    Excel non può aprire direttamente un documento di un qualsiasi formato, visualizzarlo in anteprima ed eventualmente stamparlo, perché ogni formato di documento necessità del proprio gestore per essere correttamente aperto, stampato ecc..

    Detto ciò, ti segnalo alcune correzioni al codice che hai postato:

    1. nella listBox sono inseriti i nomi dei fogli del book piuttosto che i documenti esterni, dovresti, invece, utilizzare qualcosa del tipo:

    Dim oFSO As Object

    Dim oFolder As Object

    Dim oFile As Object

    Dim sPath As String

    sPath = "Cartella che contiene i documenti da stampare"

    Set oFSO = CreateObject("Scripting.FileSystemObject")

    Set oFolder = oFSO.GetFolder(sPath)

    For Each oFile In oFolder.Files

    ListBox1.AddItem oFile.Name

    Next

    1. la richiesta di stampa del documento deve essere 'personalizzata' per ciascun formato. Ad esempio, per il formato pdf dovresti utilizzare qualcosa del tipo:

    Dim sAdobePath As String

    Dim sFileName As String

    sAdobePath = "path completo di adobe reader\AcroRd32.exe"

    sFileName = "nome del documento completo del path.pdf"

    Call Shell("""" & sAdobePath & """/p""" & sFileName & """")

    Per stampare un foglio di una cartella aperta utilizza:

    Sheets("nome foglio").PrintOut

    Spero di averti messo sulla buona strada.

    Ciao,

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento