Chiusura cartella & VBA

di coccobello il
10 risposte

Salve a tutti.

Con questa routine nel VBA di word apro una specifica cartella:

Sub CARTELLEAPERTURACartellaMIAAPRI()
  Dim FSO  
  Dim CartellaSelezione As String
  Dim Messaggio As String     
       Set FSO = CreateObject("Scripting.FileSystemObject")
          If FSO.FolderExists(CartellaMIA) Then
               shell ("explorer.exe " & CartellaMIA), vbMaximizedFocus
                   Else
              Exit Sub
          End If

End Sub

Funziona perfettamente.

Ma come devo adattarla se invece volessi CHIUDERE quella specifica cartella?

Grazie per i suggerimenti.

10 Risposte

  • Non è affatto facile come credi.

    Devi usare delle API apposite  

  • 19/09/2023 - oregon ha scritto:


    Non è affatto facile come credi.

    Devi usare delle API apposite  

    Ti ringrazio per la risposta.

    Conosco le API di windows.

    Puoi cortesemente essere più preciso? Quali API?

  • Leggi qui

    https://answers.microsoft.com/it-it/msoffice/forum/all/chiudere-finestre-di-windows-tramite-vba/71ac8d74-d43e-4145-bc61-a46ec29fa972

  • Ti ringrazio per il suggerimento.

    Seguendo il link che mi hai indicato ho trovato questa routine che chiude tutte le cartelle aperte

    Option Explicit
    Private Declare Function SendMessage Lib "user32" _
                                        Alias "SendMessageA" _
                                        (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
    Private Declare Function FindWindow Lib "user32" _
                                       Alias "FindWindowA"  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

    Private Const SC_CLOSE = &HF060&
    Private Const WM_SYSCOMMAND = &H112
    Private Const EXPLORER_CLASSNAME As String = "CabinetWClass"

    Sub CARTELLETutteChiudi()
     Dim iExplhwnd As Long
       iExplhwnd = FindWindow(EXPLORER_CLASSNAME, vbNullString)
          Do Until Not CBool(iExplhwnd)
             SendMessage iExplhwnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&
               iExplhwnd = FindWindow(EXPLORER_CLASSNAME, vbNullString)
          Loop
    End Sub

    Ma se invece volessi chiudere soltanto una cartella specifica?

    Immagino che dovrei inserire una riga all'interno del ciclo Do Until Not CBool

  • Il codice inseriscilo tra tag CODE nel forum (tasto <>)

    Comunque tieni presente che puoi indicare nel secondo parametro della FindWindow il titolo della finestra

  • 22/09/2023 - oregon ha scritto:


    Il codice inseriscilo tra tag CODE nel forum (tasto <>)

    Comunque tieni presente che puoi indicare nel secondo parametro della FindWindow il titolo della finestra

    Grazie della risposta.

    Che cosa intendi per titolo della finestra?

    Quindi dovrei inserirlo al posto di vbNullString?

  • Il titolo della finestra. Mi sembra che non ci siano dubbi su cosa intendo.

  • 05/10/2023 - oregon ha scritto:


    Il titolo della finestra. Mi sembra che non ci siano dubbi su cosa intendo.

    Scusa la mia ignoranza , ma intendi semplicemente la path della finestra?

  • Quello che c'è nel titolo, in alto

    Nelle finestre di windows la barra del titolo è quella im alto

Devi accedere o registrarti per scrivere nel forum
10 risposte