ciao miss, se non vuoi usare componenti esterni ti giro questa classe che avevo scritto tempo fa partendo da una funzione per la gestione dei commondialog:
codice:
Option Compare Database
Option Explicit

Private Type adh_accOfficeGetFileNameInfo
    hwndOwner As Long
    strAppName As String * 255
    strDlgTitle As String * 255
    strOpenTitle As String * 255
    strFile As String * 4096
    strInitialDir As String * 255
    strFilter As String * 255
    lngFilterIndex As Long
    lngView As Long
    lngFlags As Long
End Type


Private strDlgTitle As String
Private strFile As String
Private strDir As String
Private mode As Integer
Private defPath As String
Private fileFilters As String

Private fullFilePath As String
Private fullDirPath As String


Private Declare Function adh_accOfficeGetFileName Lib "msaccess.exe" Alias "#56" (gfni As adh_accOfficeGetFileNameInfo, ByVal fOpen As Integer) As Long


Private Sub Class_Initialize()
    strDlgTitle = "Apri File o Cartella"
    strFile = ""
    strDir = ""
    mode = -1
    defPath = ""
    
    fullFilePath = ""
    
    resetFilters
    addFileFilter "Tutti i files", "*.*"
End Sub


Public Sub openFileMode()
    mode = -1
End Sub

Public Sub saveAsMode()
    mode = 0
End Sub

Public Property Let setDialogTitle(sTitle As String)
    strDlgTitle = sTitle
End Property

Public Property Let setDefaultPath(sPath As String)
    defPath = sPath
End Property

Public Property Let setDefaultFileName(sFileName As String)
    strFile = sFileName
End Property

Public Property Let setDefaultDirName(sDirName As String)
    strDir = sDirName
End Property

Public Sub addFileFilter(fileDescription As String, fileExtension As String)
    
    If fileFilters & "" = "" Then
        fileFilters = fileDescription & " (" & fileExtension & ")" & "|" & fileExtension
    Else
        fileFilters = fileFilters & "|" & fileDescription & " (" & fileExtension & ")" & "|" & fileExtension
    End If
    
End Sub

Public Sub resetFilters()
    fileFilters = ""
End Sub


Public Property Get getFileFullPath() As String
    
    On Error GoTo errorPath
    
    If Trim(fullFilePath & "") = "" Then GoTo errorPath
    
    getFileFullPath = fullFilePath
    
    Exit Property
    
errorPath:
    
    getFileFullPath = -1
    
End Property

Public Property Get getDirFullPath() As String
    
    On Error GoTo errorPath
    
    If Trim(fullDirPath & "") = "" Then GoTo errorPath
    
    getDirFullPath = fullDirPath
    
    Exit Property
    
errorPath:
    
    getDirFullPath = -1
    
End Property



Public Property Get getFileDirPath() As String
    
    On Error GoTo errorPath
    
    If fullFilePath & "" = "" Then GoTo errorPath
    
    getFileDirPath = Left$(fullFilePath, InStrRev(fullFilePath, "\"))
    
    Exit Property
    
errorPath:
    getFileDirPath = -1
    
End Property



Public Property Get getFileName() As String
    
    On Error GoTo errorName
    
    If fullFilePath = "" Then GoTo errorName
    
    getFileName = Right$(fullFilePath, Len(fullFilePath) - InStrRev(fullFilePath, "\"))
    
    Exit Property
    
errorName:
    getFileName = -1
    
End Property


Private Function adhOfficeGetFileName(gfni As adh_accOfficeGetFileNameInfo, ByVal fOpen As Integer) As Long
    Dim lng As Long
    With gfni
        .strAppName = RTrim$(.strAppName) & vbNullChar
        .strDlgTitle = RTrim$(.strDlgTitle) & vbNullChar
        .strOpenTitle = RTrim$(.strOpenTitle) & vbNullChar
        .strFile = RTrim$(.strFile) & vbNullChar
        .strInitialDir = RTrim$(.strInitialDir) & vbNullChar
        .strFilter = RTrim$(.strFilter) & vbNullChar
        SysCmd acSysCmdClearHelpTopic
        lng = adh_accOfficeGetFileName(gfni, fOpen)
        .strAppName = RTrim$(adhTrimNull(.strAppName))
        .strDlgTitle = RTrim$(adhTrimNull(.strDlgTitle))
        .strOpenTitle = RTrim$(adhTrimNull(.strOpenTitle))
        .strFile = RTrim$(adhTrimNull(.strFile))
        .strInitialDir = RTrim$(adhTrimNull(.strInitialDir))
        .strFilter = RTrim$(adhTrimNull(.strFilter))
    End With
    adhOfficeGetFileName = lng
End Function



Private Function adhTrimNull(strVal As String) As String
    Dim intPos As Integer
    intPos = InStr(strVal, vbNullChar)
    If intPos > 0 Then
        adhTrimNull = Left$(strVal, intPos - 1)
    Else
        adhTrimNull = strVal
    End If
End Function



'Opens commom dialog box for a directory
Public Sub OpenCommDlgDir()
    
    On Error GoTo OpenCommDlgDir_Err
    Dim gfni As adh_accOfficeGetFileNameInfo
    
    With gfni
        .lngFlags = &H20
        .strDlgTitle = strDlgTitle & ""
        .strOpenTitle = "&OK" & ""
        .strInitialDir = strDir & ""
    End With
    
    OpenCommDlgDir = ""
    'mode : -1 for Open; 0 for Save
    If adhOfficeGetFileName(gfni, mode) = 0 Then
        fullDirPath = Trim(gfni.strFile)
    End If
    
    Exit Sub
    
OpenCommDlgDir_Err:
    MsgBox Err.Description & Chr(13) & Chr(10) & " ErrorNum:" & str(Err), 48
    Exit Sub
End Sub


Public Sub OpenCommDlg()

On Error GoTo OpenCommDlg_Err

    Dim stdir As String, dbFilename As String
    Dim gfni As adh_accOfficeGetFileNameInfo

    'Make sure not to pass in Null values.
    With gfni
        .strDlgTitle = strDlgTitle & ""
        .strFile = strFile & ""
        .strInitialDir = defPath & ""
        .strFilter = fileFilters & ""
        .strOpenTitle = "&OK" & ""
    End With
    
    'mode : -1 for Open; 0 for Save
    If adhOfficeGetFileName(gfni, mode) = 0 Then
        dbFilename = Trim(gfni.strFile)
    End If

    fullFilePath = dbFilename
    
    Exit Sub
    
OpenCommDlg_Err:
    MsgBox Err.Description & Chr(13) & Chr(10) & " ErrorNum:" & str(Err), 48
    Exit Sub
    Resume Next
End Sub
ti crei un nuovo modulo di classe e ce lo copi dentro, quando lo salvi lo chiami come vuoi (ex MiaCommonDialog)

poi lo usi con:
codice:
Dim mcd as MiaCommonDialog
set mcd = New MiaCommonDialog

mcd.saveAsMode

'altri metodi e proprietà che vuoi

mcd.openCommDlg

set mcd = nothing
gli altri metodi e proprietà te li lascio scoprire