Necesito un macro excel que abra un powerpoint

Hola
Tengo unas plantillas realizadas en powerpoint que contienen datos ( son plantillas de reporte de estudios de patologia) las cuales manualmente he conseguido guardarlas en formato xml y luego las importo con excel para crear una base de datos.
esto a causa de que son muchisimas plantillas de informacion que se requieren resguardar.
Hacerlo de esta manera es muy laborioso por lo que me gustaria que se realizare a travez de un macro donde se le pueda indicar o selecionar la carpeta que contiene el año o mes o rango de plantillas y que este realice la tarea automatizada.
Las plantillas llevar nombres correlativos ejemplo C-00010-06, c-00011-06, etc donde C es de citologia, luego el codigo de 5 digitos y 06 corresponde al año 2006, el codigo es correlativo incrementalmente por lo que podria usarlo para hacer un llamado automatizado
estilo Abrir desde 00001 hasta 00100 de uno en uno he ir guardandolo a xml, una vez concluido este loop pasar a crear las hojas en excel segun su nombre ejemplo hoja 00001 con los datos xml y por ultimo tomar todas estas hojas y crear una sola para poder llevarlas a una base de datos.
Me gustaria si pudieran orientarme en esto, gracias

1 Respuesta

Respuesta
1
Te envio un codigo que utilizo para abrir archivos en general le doy un path y el tipo de archivo que quiero abrir y me trai la direcciones, con este puedes hacer una macro que te convierta las hojas a excel
Option Explicit
Dim j As Long
'Sub Leer_directorio()
' Dim Archivo As String
' Dim i As Integer
'
' Archivo = Dir("C:\JM\01\Archivos Sin respaldo\Musica\")
'
' i = 1
' While Archivo <> ""
'  i = i + 1
'  Archivo = Dir
 ' ActiveWorkbook.Sheets("Leer").Activate
'  ActiveSheet.Cells(i, 2).Value = Archivo
' Wend
'End Sub
'*********************************************************************************************************
'------------------------------------------------------------------------------
'Declaraciones del Api
'------------------------------------------------------------------------------
 'Esta función busca el primer archivo de un Dir
 Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" ( _
     ByVal lpFileName As String, _
     lpFindFileData As WIN32_FIND_DATA) As Long
 'Esta el siguiente archivo o directorio
 Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" ( _
     ByVal hFindFile As Long, _
     lpFindFileData As WIN32_FIND_DATA) As Long
 Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" ( _
     ByVal lpFileName As String) As Long
 'Esta cierra el Handle de búsqueda
 Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
 ' Constantes
 '------------------------------------------------------------------------------
 'Constantes de atributos de archivos
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100
'Otras constantes
Const MAX_PATH = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1
'UDT
'------------------------------------------------------------------------------
'Estructura para las fechas de los archivos
 Private Type FILETIME
     dwLowDateTime As Long
     dwHighDateTime As Long
 End Type
'Estructura necesaria para la información de archivos
Private Type WIN32_FIND_DATA
     dwFileAttributes As Long
     ftCreationTime As FILETIME
     ftLastAccessTime As FILETIME
     ftLastWriteTime As FILETIME
     nFileSizeHigh As Long
     nFileSizeLow As Long
     dwReserved0 As Long
     dwReserved1 As Long
     cFileName As String * MAX_PATH
     cAlternate As String * 14
End Type
Type T_Tag_Mp3
     Header As String * 3
     SongTitle As String * 30
     Artist  As String * 30
     Album  As String * 30
     Year  As String * 4
     Comment As String * 30
     Genre  As Byte
End Type
Sub Busca_Archivos()
 Dim Path As String
 Dim Pattern As String
 Dim FileSize As Currency
 Dim Count_Archivos As Long
 Dim Count_Dir As Long
 ActiveWorkbook.Sheets("Leer").Activate
 'Path y archivos a buscar
 Path = ActiveSheet.Cells(1, 1).Value
 Pattern = ActiveSheet.Cells(1, 2).Value
 j = 2
 'Llamamos a la función para buscar y que nos retorne algunos datos
  FileSize = Encuentra_Archivos_API(Path, Pattern, Count_Archivos, Count_Dir)
 'Mostramos los resultados
 'Cantidad de archivos encontrados
  MsgBox Count_Archivos & " Archivos encontrados en " & Count_Dir & " Directorios", 64
 'Tamaño Total en Bytes de los archivos encontrados
  MsgBox "Tamaño total de los archivos: " & Path & " = " & _
         Format(FileSize, "#,###,###,##0") & " Bytes", 64
 End Sub
Private Function Encuentra_Archivos_API(Path As String, SearchStr As String, _
                                          FileCount As Long, DirCount As Long)
On Error GoTo EH
 Dim FileName As String
 Dim DirName As String
 Dim dirNames() As String
 Dim nDir As Long
 Dim i, Archivo As Long
 Dim hSearch As Long
 Dim WFD As WIN32_FIND_DATA
 Dim Cont As Long
 Dim ar As String
 Dim Ext As String
 Dim Un_Tag As T_Tag_Mp3
 If Right(Path, 1) <> "\" Then Path = Path & "\"
  ' Buscamos por mas directorios
  nDir = 0
  ReDim dirNames(nDir)
  Cont = True
  hSearch = FindFirstFile(Path & "*", WFD)
  If hSearch <> INVALID_HANDLE_VALUE Then
   Do While Cont
    DirName = Eliminar_Nulos(WFD.cFileName)
    ' Ignora estos directorios
    If (DirName <> ".") And (DirName <> "..") Then
     ' revisa el directrio
     If GetFileAttributes(Path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
       dirNames(nDir) = DirName
       DirCount = DirCount + 1
       nDir = nDir + 1
       ReDim Preserve dirNames(nDir)
     End If
    End If
    Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
   Loop
   Cont = FindClose(hSearch)
  End If
  hSearch = FindFirstFile(Path & SearchStr, WFD)
  Cont = True
  If hSearch <> INVALID_HANDLE_VALUE Then
   While Cont
    FileName = Eliminar_Nulos(WFD.cFileName)
    If (FileName <> ".") And (FileName <> "..") Then
     Encuentra_Archivos_API = Encuentra_Archivos_API + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
     FileCount = FileCount + 1
     ActiveWorkbook.Sheets("Leer").Activate
     j = j + 1
     If j > 64999 Then
      MsgBox "Existen demasiados archivos por favor seleccione una ruta mas corta", vbOKOnly + vbCritical, _
             "ERROR"
      End
     End If
     ActiveSheet.Cells(j, 1).Value = Path
     ActiveSheet.Cells(j, 2).Value = FileName
     Ext = Right(FileName, 4)
     If Left(Ext, 1) = "." Then
      ActiveSheet.Cells(j, 3).Value = Ext
     End If
     If Ext = ".mp3" Or Ext = ".wma" Then
      ar = Path & FileName
      Archivo = FreeFile
      Open ar For Binary Access Read As Archivo
      Get Archivo, LOF(1) - 127, Un_Tag
      Close Archivo
      ActiveSheet.Cells(j, 4).Value = Eliminar_Nulos(Un_Tag.Album)
      ActiveSheet.Cells(j, 5).Value = Eliminar_Nulos(Un_Tag.Artist)
      ActiveSheet.Cells(j, 6).Value = Eliminar_Nulos(Un_Tag.Comment)
      ActiveSheet.Cells(j, 7).Value = Eliminar_Nulos(Un_Tag.Genre)
      ActiveSheet.Cells(j, 8).Value = Eliminar_Nulos(Un_Tag.Header)
      ActiveSheet.Cells(j, 9).Value = Eliminar_Nulos(Un_Tag.SongTitle)
      ActiveSheet.Cells(j, 10).Value = Eliminar_Nulos(Un_Tag.Year)
     End If
    End If
    Cont = FindNextFile(hSearch, WFD)
   Wend
   Cont = FindClose(hSearch)
  End If
  ' Si estos son Sub Directorios......
  If nDir > 0 Then
   For i = 0 To nDir - 1
    Encuentra_Archivos_API = Encuentra_Archivos_API + Encuentra_Archivos_API(Path & dirNames(i) & "\", _
                                  SearchStr, FileCount, DirCount)
    Next i
  End If
 Exit Function
EH:
 Select Case Err.Number
  Case 1004:
   Resume Next
  Case 63
   Resume Next
  Case Else:
   MsgBox Err.Number & "-" & Err.Description, vbOKOnly + vbCritical
   Resume
  End Select
End Function
'Esta función es para formatear los nombres de archivos y directorios. Elimina los CHR(0)
'------------------------------------------------------------------------
Function Eliminar_Nulos(ByVal OriginalStr As String) As String
 If (InStr(OriginalStr, Chr(0)) > 0) Then
  OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
 End If
 Eliminar_Nulos = OriginalStr
End Function
Hola
Gracias por responder, lo aplico y te aviso
Ok

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas