Excel - Actualizar funciones de 32 bits para utilizar en 64 bits

 
Vista:

Actualizar funciones de 32 bits para utilizar en 64 bits

Publicado por Marco Antonio Espinoza (1 intervención) el 04/07/2017 20:10:49
son 2 funciones que se utilizan para abrir formularios donde el usuario selecciona una ruta y se captura en un cuadro de texto, a continuacion les presento el codigo que se utiliza en 32 bits, necesito el codigo para que funcione a 64 bits


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
********Primera Funcion**********
 
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
  Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
 
Private Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
 
Private Type BROWSEINFO
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type
 
 
 
Function GetDirectory(Optional Msg) As String
    Dim bInfo As BROWSEINFO
    Dim path As String
    Dim r As Long, x As Long, pos As Integer
 
'   Root folder = Desktop
    bInfo.pidlRoot = 0&
 
'   Title in the dialog
    If IsMissing(Msg) Then
        bInfo.lpszTitle = "Select a folder."
    Else
        bInfo.lpszTitle = Msg
    End If
 
'   Type of directory to return
    bInfo.ulFlags = &H1
 
'   Display the dialog
    x = SHBrowseForFolder(bInfo)
 
'   Parse the result
    path = Space$(512)
    r = SHGetPathFromIDList(ByVal x, ByVal path)
    If r Then
        pos = InStr(path, Chr$(0))
        GetDirectory = Left(path, pos - 1)
    Else
        GetDirectory = ""
    End If
 
End Function
 
 
*********Segunda Funcion*****************
 
Private Declare Function apiGetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Long
 
Dim OPENFILENAME As tagOPENFILENAME
Private Const OFN_READONLY = &H1
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_NOCHANGEDIR = &H8
Private Const OFN_SHOWHELP = &H10
Private Const OFN_ENABLEHOOK = &H20
Private Const OFN_ENABLETEMPLATE = &H40
Private Const OFN_ENABLETEMPLATEHANDLE = &H80
Private Const OFN_NOVALIDATE = &H100
Private Const OFN_ALLOWMULTISELECT = &H200
Private Const OFN_EXTENSIONDIFFERENT = &H400
Private Const OFN_PATHMUSTEXIST = &H800
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_CREATEPROMPT = &H2000
Private Const OFN_SHAREAWARE = &H4000
Private Const OFN_NOREADONLYRETURN = &H8000
Private Const OFN_NOTESTFILECREATE = &H10000
Private Const OFN_NONETWORKBUTTON = &H20000
Private Const OFN_NOLONGNAMES = &H40000
Private Const OFN_EXPLORER = &H80000
Private Const OFN_NODEREFERENCELINKS = &H100000
Private Const OFN_LONGNAMES = &H200000
 
Private Const OFN_SHAREFALLTHROUGH = 2
Private Const OFN_SHARENOWARN = 1
Private Const OFN_SHAREWARN = 0
 
 
Private Type tagOPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    FLAGS As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type
 
 
 
 
Function OpenCommDlg(Optional Ruta As String)
    On Error GoTo Err_TodoError
    Dim Message$, FileName$, FileTitle$, DefExt$, Filter$
    Dim Title$, szCurDir$, APIResults&
 
    If Me.cboTipo = "Factura" Then
        xExtension = ".xml"
        Filter$ = "Archivo XML" & Chr$(0) & "*" & xExtension & ";" & Chr$(0)
        Title$ = "Seleccionar Archivos de xml de esta aplicación..." & Chr$(0)
        xExtension = UCase(Mid(xExtension, 2))
    Else
        xExtension = Sheets("Panel de Control").Range("pExtencion")
        Filter$ = "Archivo de Excel" & Chr$(0) & "*" & xExtension & ";" & Chr$(0)
        Title$ = "Seleccionar Archivos de excel de esta aplicación..." & Chr$(0)
        xExtension = UCase(Mid(xExtension, 2))
    End If
 
    DefExt$ = xExtension & Chr$(0)
    szCurDir$ = Ruta
 
    FileName$ = Chr$(0) & Space$(255) & Chr$(0)
    FileTitle$ = Space$(255) & Chr$(0)
 
    OPENFILENAME.lStructSize = Len(OPENFILENAME)
 
    'OPENFILENAME.hwndOwner = Screen.ActiveForm.Hwnd
    OPENFILENAME.lpstrFilter = Filter$
    OPENFILENAME.nFilterIndex = 1
    OPENFILENAME.lpstrFile = FileName$
    OPENFILENAME.nMaxFile = Len(FileName$)
    OPENFILENAME.lpstrFileTitle = FileTitle$
    OPENFILENAME.nMaxFileTitle = Len(FileTitle$)
    OPENFILENAME.lpstrTitle = Title$
    OPENFILENAME.FLAGS = OFN_FILEMUSTEXIST Or OFN_READONLY Or OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST
    OPENFILENAME.lpstrDefExt = DefExt$
    OPENFILENAME.hInstance = 0
    OPENFILENAME.lpstrCustomFilter = String(255, 0)
    OPENFILENAME.nMaxCustFilter = 255
    OPENFILENAME.lpstrInitialDir = szCurDir$
    OPENFILENAME.nFileOffset = 0
    OPENFILENAME.nFileExtension = 0
    OPENFILENAME.lCustData = 0
    OPENFILENAME.lpfnHook = 0
    OPENFILENAME.lpTemplateName = 0
    If apiGetOpenFileName(OPENFILENAME) <> 0 Then
        OpenCommDlg = Left$(OPENFILENAME.lpstrFile, InStr(OPENFILENAME.lpstrFile, Chr$(0)) - 1)
    Else
        OpenCommDlg = ""
    End If
Exit_TodoError:
    Exit Function
 
Err_TodoError:
    MsgBox "Aviso Nº: " & Err.Number & "  " & Err.Description, vbCritical + vbOKOnly, "Abrir Cuadro de Dialogo"
    Resume Exit_TodoError
End Function


si pudieran ayudarme con el codigo compatible con vba a 64 bits

Gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder