Buen dia.
Acudo a ustedes ya que aqui he aprendido bastantes detalles de VBA.
tengo una macro que me funciona perfecto, gracias a un foro de esta WEB pude armarla conforme a mis necesidades.
Su función es abrir un archivo de una carpeta, generalmente los archivos tienen nombres genéricos, por ejemplo "SUCURSAL _XXX_AGOSTO" el unco valor que cambia es el mes.
Lo que me gustaría es que si no encuentra el archivo correspondiente al mes actual abra el del mes anterior (en base al ejemplo seria el del mes de Julio), ya sea mediante un MSBOX de confirmacion/aviso o directamente abrirlo.
Les adjunto la MACRO que tengo:
Dim xfolders As New Collection
Sub Buscar_Fichas_de_Datos()
Dim sPath As String
Dim xfold As Variant, arch As Variant
Dim bexist As Boolean
Dim sPartialName As String
Dim Mensaje As String
Set xfolders = Nothing
sPath = "C:\Users\Miguel Angel\Desktop\MIGUEL\FORMATOS pruebas\FICHAS pruebas"
xfolders.Add sPath 'CORRIGE DIRECTORIO
Mensaje = "¿Qué sucursal buscas?"
sPartialName = InputBox(Mensaje, "Centro de Control")
Call AddSubDir(sPath)
For Each xfold In xfolders
arch = Dir(xfold & "\" & "Sucursal" & " " & sPartialName & " " & Application.WorksheetFunction.Proper(MonthName(VBA.Month(Date), False)) & ".*")
If arch <> "" Then Exit For
Next
If arch = "" Then
MsgBox "No se encontró el archivo"
Else
ActiveWorkbook.FollowHyperlink xfold & "\" & arch
End If
End Sub
'
Sub AddSubDir(lPath As Variant)
Dim SubDir As New Collection, DirFile As Variant, sd As Variant
If Right(lPath, 1) <> "\" Then lPath = lPath & "\"
DirFile = Dir(lPath & "*", vbDirectory)
Do While DirFile <> ""
If DirFile <> "." And DirFile <> ".." Then
If ((GetAttr(lPath & DirFile) And vbDirectory) = 16) Then
SubDir.Add lPath & DirFile
End If
End If
DirFile = Dir
Loop
For Each sd In SubDir
xfolders.Add sd
Call AddSubDir(sd)
Next
End Sub
DE ANTEMANO GRACIAS
Acudo a ustedes ya que aqui he aprendido bastantes detalles de VBA.
tengo una macro que me funciona perfecto, gracias a un foro de esta WEB pude armarla conforme a mis necesidades.
Su función es abrir un archivo de una carpeta, generalmente los archivos tienen nombres genéricos, por ejemplo "SUCURSAL _XXX_AGOSTO" el unco valor que cambia es el mes.
Lo que me gustaría es que si no encuentra el archivo correspondiente al mes actual abra el del mes anterior (en base al ejemplo seria el del mes de Julio), ya sea mediante un MSBOX de confirmacion/aviso o directamente abrirlo.
Les adjunto la MACRO que tengo:
Dim xfolders As New Collection
Sub Buscar_Fichas_de_Datos()
Dim sPath As String
Dim xfold As Variant, arch As Variant
Dim bexist As Boolean
Dim sPartialName As String
Dim Mensaje As String
Set xfolders = Nothing
sPath = "C:\Users\Miguel Angel\Desktop\MIGUEL\FORMATOS pruebas\FICHAS pruebas"
xfolders.Add sPath 'CORRIGE DIRECTORIO
Mensaje = "¿Qué sucursal buscas?"
sPartialName = InputBox(Mensaje, "Centro de Control")
Call AddSubDir(sPath)
For Each xfold In xfolders
arch = Dir(xfold & "\" & "Sucursal" & " " & sPartialName & " " & Application.WorksheetFunction.Proper(MonthName(VBA.Month(Date), False)) & ".*")
If arch <> "" Then Exit For
Next
If arch = "" Then
MsgBox "No se encontró el archivo"
Else
ActiveWorkbook.FollowHyperlink xfold & "\" & arch
End If
End Sub
'
Sub AddSubDir(lPath As Variant)
Dim SubDir As New Collection, DirFile As Variant, sd As Variant
If Right(lPath, 1) <> "\" Then lPath = lPath & "\"
DirFile = Dir(lPath & "*", vbDirectory)
Do While DirFile <> ""
If DirFile <> "." And DirFile <> ".." Then
If ((GetAttr(lPath & DirFile) And vbDirectory) = 16) Then
SubDir.Add lPath & DirFile
End If
End If
DirFile = Dir
Loop
For Each sd In SubDir
xfolders.Add sd
Call AddSubDir(sd)
Next
End Sub
DE ANTEMANO GRACIAS