Pasos para grabar una macro
1. Primero se graba una macro
2. Seleccionar el libro de macros personal
3. Dar click en aceptar y después seleccionamos una celda cualquiera y finalmente le
damos en detener grabación.
4. Abrir Visual basic
5. Después seleccionamos la hoja de VBA personal
6. Pegar el código en el recuadro lanco y cerrar el editor de vba
7. Para probarlo le damos click en macros y elegimos la macros personales, y elegimos
el nombre que le pusimos a la macro
8. Después agregar la macro al centro de confianza.
9. Dejar con la siguiente configuración.
10. Para añadirlo a la arra de Excel
- Ir a la pestaña Archivo
- Después opciones
- Posteriormente en la cinta de opciones, elegimos macros.
- Una vez seleccionado la opción macros, elegir la macro que nosotros hicimos y
seleccionar la pestaña donde queremos que aparezca. (Las casillas que están en
verde darles click, no desmarcar, solo darles click a lado)
Por ejemplo, elegimos el grupo datos, le damos en nuevo grupo, después ese nuevo
grupo le damos en cambiar nombre.
- Le asignamos un nuevo nombre y elegimos un icono con el que queremos que
aparezca.
- Una vez creado el grupo seleccionamos nuestra macro y le damos en agregar y
se agregara al grupo que hicimos.
Por ejemplo, si elegimos la ruta Datos>ejemplo, ahí debe aparecer a la altura que la
colocamos, en este caso al final.
- Por último, cerramos y guardamos la configuración (Antes de eso aparecerá una
pestaña para guardar el libro, ese lo puedes si o no guardar, es opcional y no
influye, pero donde indique guardar la macros si importa).
CODIGO IMPORTAR FACTURAS
Sub Importarxml()
Dim xmlDoc As Object
Dim xmlNode As Object
Dim ws As Worksheet
Dim filePaths As Variant
Dim i As Long
Dim row As Long
Dim objetoImp01Monto As String
Dim objetoImp02Monto As String
Dim factorTipo As String
Dim factorMonto As String
Dim baseTasa0 As String, baseTasa16 As String
' Mostrar cuadro de diálogo para seleccionar múltiples archivos XML
filePaths = [Link]("Archivos XML (*.xml), *.xml", ,
"Selecciona archivos XML", , True)
' Verificar si se seleccionaron archivos
If IsArray(filePaths) = False Then
MsgBox "No se seleccionó ningún archivo."
Exit Sub
End If
' Usar la hoja activa
Set ws = ActiveSheet
' Limpiar la hoja
[Link]
' Encabezados de columnas
[Link](1, 1).Value = "Archivo XML"
[Link](1, 2).Value = "RFC Emisor"
[Link](1, 3).Value = "Nombre Emisor"
[Link](1, 4).Value = "Monto Objeto Imp 01"
[Link](1, 5).Value = "Monto Objeto Imp 02"
[Link](1, 6).Value = "Tipo de Factor"
[Link](1, 7).Value = "Monto Factor"
[Link](1, 8).Value = "Base Tasa 0"
[Link](1, 9).Value = "Base Tasa 16"
[Link](1, 10).Value = "IVA"
[Link](1, 11).Value = "Ret Impuesto 01"
[Link](1, 12).Value = "Ret Impuesto 02"
[Link](1, 13).Value = "Total"
[Link]("A1:M1").[Link] = True
[Link]("A1:M1").[Link] = RGB(200, 200, 200)
' Inicializar fila para los datos
row = 2
' Iterar sobre los archivos seleccionados
For i = LBound(filePaths) To UBound(filePaths)
' Crear el objeto XML
Set xmlDoc = CreateObject("[Link]")
[Link] = False
[Link] (filePaths(i))
' Verificar si el XML se cargó correctamente
If [Link] <> 0 Then
MsgBox "Error al cargar el archivo XML: " & [Link]
Exit Sub
End If
' Guardar la ruta del archivo XML
[Link](row, 1).Value = filePaths(i)
' Obtener RFC del Emisor
Set xmlNode = [Link]("//cfdi:Emisor/@Rfc")
If Not xmlNode Is Nothing Then
[Link](row, 2).Value = [Link]
Else
[Link](row, 2).Value = ""
End If
' Obtener Nombre del Emisor
Set xmlNode = [Link]("//cfdi:Emisor/@Nombre")
If Not xmlNode Is Nothing Then
[Link](row, 3).Value = [Link]
Else
[Link](row, 3).Value = ""
End If
' Obtener el monto de ObjetoImp="01"
Set xmlNode =
[Link]("//cfdi:Conceptos/cfdi:Concepto[@ObjetoImp='01']/
@Importe")
If Not xmlNode Is Nothing Then
objetoImp01Monto = [Link]
[Link](row, 4).Value = objetoImp01Monto
Else
[Link](row, 4).Value = ""
End If
' Obtener el monto de ObjetoImp="02"
Set xmlNode =
[Link]("//cfdi:Conceptos/cfdi:Concepto[@ObjetoImp='02']/
@Importe")
If Not xmlNode Is Nothing Then
objetoImp02Monto = [Link]
[Link](row, 5).Value = objetoImp02Monto
Else
[Link](row, 5).Value = ""
End If
' Obtener Tipo de Factor
Set xmlNode =
[Link]("//cfdi:Traslados/cfdi:Traslado/@TipoFactor")
If Not xmlNode Is Nothing Then
factorTipo = [Link]
[Link](row, 6).Value = factorTipo
Else
[Link](row, 6).Value = "Exento"
End If
' Obtener Monto del Factor
Set xmlNode =
[Link]("//cfdi:Traslados/cfdi:Traslado/@Importe")
If Not xmlNode Is Nothing Then
factorMonto = [Link]
[Link](row, 7).Value = factorMonto
Else
[Link](row, 7).Value = ""
End If
' Obtener Base Tasa 0
Set xmlNode =
[Link]("//cfdi:Traslados/cfdi:Traslado[@TasaOCuota='0.000000']/
@Base")
If Not xmlNode Is Nothing Then
baseTasa0 = [Link]
[Link](row, 8).Value = baseTasa0
Else
[Link](row, 8).Value = ""
End If
' Obtener Base Tasa 16
Set xmlNode =
[Link]("//cfdi:Traslados/cfdi:Traslado[@TasaOCuota='0.160000']/
@Base")
If Not xmlNode Is Nothing Then
baseTasa16 = [Link]
[Link](row, 9).Value = baseTasa16
Else
[Link](row, 9).Value = ""
End If
' Obtener IVA
Set xmlNode =
[Link]("//cfdi:Traslados/cfdi:Traslado[@TasaOCuota='0.160000']/
@Importe")
If Not xmlNode Is Nothing Then
[Link](row, 10).Value = [Link]
Else
[Link](row, 10).Value = ""
End If
' Obtener Ret Impuesto 01
Set xmlNode =
[Link]("//cfdi:Retenciones/cfdi:Retencion[@Impuesto='001']/
@Importe")
If Not xmlNode Is Nothing Then
[Link](row, 11).Value = [Link]
Else
[Link](row, 11).Value = ""
End If
' Obtener Ret Impuesto 02
Set xmlNode =
[Link]("//cfdi:Retenciones/cfdi:Retencion[@Impuesto='002']/
@Importe")
If Not xmlNode Is Nothing Then
[Link](row, 12).Value = [Link]
Else
[Link](row, 12).Value = ""
End If
' Obtener Total
Set xmlNode = [Link]("//cfdi:Comprobante/@Total")
If Not xmlNode Is Nothing Then
[Link](row, 13).Value = [Link]
Else
[Link](row, 13).Value = ""
End If
' Avanzar a la siguiente fila
row = row + 1
Next i
' Ajustar el ancho de las columnas
[Link]("A:M").AutoFit
MsgBox "Facturas importadas y procesadas correctamente."
End Sub