You are on page 1of 4

AbrirARchivo - 1 Option Compare Database Option Explicit Public Enum FileDialogView ViewDetails ViewPreview ViewProperties ViewList End Enum

Public Enum FileDialogType DialogOpen DialogSaveAs DialogFolderPicker End Enum Private Type OFFICEGETFILENAMEINFO hwndOwner As Long szAppName As String * 255 szDlgTitle As String * 255 szOpenTitle As String * 255 szFile As String * 4096 szInitialDir As String * 255 szFilter As String * 255 nFilterIndex As Long lView As Long flags As Long End Type Private Declare Function GetFileName _ Lib "msaccess.exe" _ Alias "#56" _ (gfni As OFFICEGETFILENAMEINFO, _ ByVal fOpen As Integer) As Long Private Declare Function ShellExecute _ Lib "shell32.dll" _ Alias "ShellExecuteA" _ (ByVal hWnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long Private Const SW_SHOWNORMAL = 1 Private Private Private Private Private Private Const Const Const Const Const Const ERROR_BAD_FORMAT = &HB SE_ERR_ACCESSDENIED = &H5 SE_ERR_ASSOCINCOMPLETE = &H1B SE_ERR_NOASSOC = &H1F SE_ERR_OOM = &H8 SE_ERR_SHARE = &H1A

Private Const MultiSelect = &HC Private Const FolderPicker = &H20 Private Const InitView = &H40 Private Const ErrorDlg = -301 Private Const Cancelar = -302 ' Activar esta constante si se quiere el ' aviso "El archivo ya existe desea ' reemplazarlo?" 'Private Const ConfirmarReemplazar = &H1 Private Private Private Private Private Private mvarInitialDir As String mvarTitle As String mvarFilterIndex As Long mvarButtonName As String mvarDialogType As FileDialogType mvarInitialView As FileDialogView

AbrirARchivo - 2 Private mvarAllowMultiSelect As Boolean Private mvarInitialFileName As String Private mvarSelectedItems As New Collection Private InitDlg As Boolean Public Filters As Collection Private Property Let SelectedItems(ByVal vData As Collection) Set mvarSelectedItems = vData End Property Public Property Get SelectedItems() As Collection Set SelectedItems = mvarSelectedItems End Property Public Property Let InitialFileName(ByVal vData As String) mvarInitialFileName = vData End Property Public Property Get InitialFileName() As String InitialFileName = mvarInitialFileName End Property Public Property Let AllowMultiSelect(ByVal vData As Boolean) mvarAllowMultiSelect = vData End Property Public Property Get AllowMultiSelect() As Boolean AllowMultiSelect = mvarAllowMultiSelect End Property Public Property Let ButtonName(ByVal vData As String) mvarButtonName = vData End Property Public Property Get ButtonName() As String ButtonName = mvarButtonName End Property Public Property Let DialogType(ByVal vData As FileDialogType) mvarDialogType = vData End Property Public Property Get DialogType() As FileDialogType DialogType = mvarDialogType End Property Public Property Let FilterIndex(ByVal vData As Long) mvarFilterIndex = vData End Property Public Property Get FilterIndex() As Long FilterIndex = mvarFilterIndex End Property Public Property Let InitialView(ByVal vData As FileDialogView) mvarInitialView = vData InitDlg = True End Property Public Property Get InitialView() As FileDialogView InitialView = mvarInitialView End Property Public Property Let Title(ByVal vData As String) mvarTitle = vData End Property Public Property Get Title() As String Title = mvarTitle

AbrirARchivo - 3 End Property Private Sub Class_Initialize() Set Filters = New Collection End Sub Function Show() As Long Dim FileInfo As OFFICEGETFILENAMEINFO Dim ret As Long Dim DlgType As Long Dim col As Collection Dim varItem As Variant Dim strFilter As Variant Dim cadena As Variant Dim Archivos As String With FileInfo .hwndOwner = hWndAccessApp .szDlgTitle = Me.Title & vbNullChar .szOpenTitle = Me.ButtonName & vbNullChar For Each varItem In Me.Filters strFilter = strFilter & CStr(varItem) & "|" Next If strFilter <> "" Then strFilter = Left(strFilter, Len(strFilter) - 1) Else strFilter = "(*.*)" End If .szFilter = strFilter & vbNullChar .nFilterIndex = Me.FilterIndex .szFile = Me.InitialFileName & vbNullChar If Not InitDlg Then .lView = ViewList Else .lView = Me.InitialView .flags = InitView End If If Me.AllowMultiSelect Then .flags = .flags Or MultiSelect End If Select Case Me.DialogType Case DialogOpen DlgType = 1& Case DialogSaveAs DlgType = 0& ' activar para detectar si el archivo ' ya existe '.flags = .flags Or ConfirmarReemplazar Case DialogFolderPicker DlgType = 1& .flags = FolderPicker End Select ret = GetFileName(FileInfo, DlgType) Set col = New Collection If ret <> ErrorDlg Then If ret <> Cancelar Then Archivos = Left(.szFile, InStr(.szFile, vbNullChar) - 1) cadena = Split(Archivos, vbTab) For Each varItem In cadena If varItem <> "" Then col.Add varItem Next Show = -1

AbrirARchivo - 4 End If End If SelectedItems = col Set col = Nothing End With End Function Sub Execute() Dim varItem As Variant Dim hInstance As Long ' Este mtodo slo se ejecutar si ' el cuadro de dilogo es del tipo ' DialogOpen (Abrir fichero) If Me.DialogType = DialogOpen Then If Me.SelectedItems.Count > 0 Then For Each varItem In Me.SelectedItems hInstance = ShellExecute( _ 0&, vbNullString, _ CStr(varItem), vbNullString, _ CurDir, SW_SHOWNORMAL) If hInstance < 33 Then Call err_ShellExecute(hInstance, varItem) End If Next End If End If End Sub Private Sub err_ShellExecute(hError As Long, FileName) Dim msg As String msg = "Archivo '" & FileName & "'" & vbCrLf & vbCrLf Select Case hError Case 0 msg = msg & "Memoria insuficiente" Case ERROR_BAD_FORMAT msg = msg & "No es una aplicacin Win32" Case SE_ERR_ACCESSDENIED msg = msg & "Se ha denegado el acceso al fichero" Case SE_ERR_ASSOCINCOMPLETE msg = msg & "La extensin del archivo es invlida o est incompleta" Case SE_ERR_NOASSOC msg = msg & "No existe una aplicacin asociada a esta extensin" Case SE_ERR_OOM msg = msg & "No hay memoria suficiente para completar la operacin" Case Else msg = msg & "No se pudo completar la operacin" End Select MsgBox msg, vbCritical End Sub Private Sub Class_Terminate() Set Filters = Nothing End Sub

You might also like