PROGRAMAR EN VBA MACROS PARA EXCEL: octubre 2018

Como Filtrar por Cliente Rango de Fechas y Exportar a TXT






En este ejemplo se muestra un ejemplo que permite filtrar por cliente, un rango de fechas y a su vez exportar a TXT el filtro realizado, es decir se podrá filtrar por clientes solamente o por fecha, también por cliente y a los datos ya filtrado adicionar un filtro entre fecha y fecha, los datos que coincidan con las condiciones ingresadas se podrán exportar a un fichero TXT.

Recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

Suscribe a nuestro canal para que YouTube te avise cuando se suba nuevo contenido al canal, en el vídeo encontrarás una explicación gráfica y detallada del ejemplo que se muestra en este post.






 


Al descargar el ejemplo se obtiene un archivo xlsm con la macro, al abrirlo se puede observar un botón, al presionarlo se muestra un formulario con tres textbox uno para ingresar el nombre del Cliente otro para ingresar el rango de fechas; también existe un listbox que es donde se mostrarán los datos filtrados.

También en el formulario se podrán visualizar tres botones, uno para luego de ingresar las fechas proceder a filtrar por fecha, el segundo botón, procede a exportar a TXT y el tercer botón es para cerrar el formulario de Excel.

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Como Pasar de Listbox Multiselect a Hoja de Excel Dependiendo de Condición


Como enviar mail con archivo Excel y PDF mediante Outlook con Excel

Como Validar Textbox Permitiendo Ingresar Letras y Números Solamente

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

El filtro por cliente y entre fecha y fecha fue explicado en el post Como Filtrar por Cliente y Rango de Fechas, por lo que en este post nos vamos a detener en explicar como proceder a Exportar a TXT los datos filtrados solamente.

Ingresado el cliente la macro filtrará por el cliente solicitado, si a eso de adiciona un rango de fechas también sumará al filtro por clientes un rango de fecha, dicho informe o resultado de datos coincidentes se mostrarán en el listbox que existe en el formulario.

Los datos mostrados en el listbox se pueden exportar a TXT presionando el botón correspondiente (el segundo botón en este formulario).

Para exportar los datos filtrados de la base de datos de Excel a TXT, primero se determinar el nombre del archivo TXT que en este caso será el nombre del archivo de Excel, pero con la extensión TXT, para ello se usa el siguiente código que permite determinar el nombre del archivo de Excel y la ubicación en la PC o path:

nom = ActiveWorkbook.Name
pto = InStr(nom, ".")
nomarch = Left(nom, pto - 1)
myfile = ThisWorkbook.Path & "\" & nomarch & ".txt"

En este caso vamos a determinar o mejor dicho vamos a delimitar o separar los datos con punto y coma, para ello he decidido cargar en la variable "cara", el caracter que se usará para delimitar los datos en el archivo TXT.

cara = ";"

Seguidamente se procede a realizar un bucle que recorra todas las filas del listbox y a dar a las variables C1 a C7 el valor de que tiene cada columna y fila correspondiente en el listbox, realizado esto se procede a concatenar cada variable con el caracter usado para delimitar los datos y con eso se obtiene cada linea del archivo TXT, el código usado es el siguiente:

For x = 1 To UserForm1.ListBox1.ListCount - 5
C1 = ListBox1.List(x, 0)
C2 = CDate(ListBox1.List(x, 1))
C3 = ListBox1.List(x, 2)
C4 = ListBox1.List(x, 3)
C5 = ListBox1.List(x, 4)
C6 = ListBox1.List(x, 5)
C7 = CDec(ListBox1.List(x, 6))
Print #1, C1 & cara & C2 & cara & C3 & cara & C4 & cara & C5 & cara & C6 & cara & C7
Next x

A continuación se expone todo el código contenido en el ejemplo denominado Como Filtar por Cliente Rango de Fechas y Exportar a TXT, luego de ello al finalizar el post está el link que permite obtener el archivo usado de ejemplo.


Código que se inserta en un Formulario de Excel

'**************https://programarexcel.com  **** https://youtube.com/programarexcel*********



Private Sub CommandButton1_Click()
Unload Me
End Sub

Private Sub CommandButton2_Click()
On Error Resume Next
Set b = Sheets("Hoja1")
uf = b.Range("A" & Rows.Count).End(xlUp).Row
dato1 = CDate(TextBox2)
dato2 = CDate(TextBox3)
If dato2 = Empty Or dato1 = emtpy Then
MsgBox ("Debe ingresar datos para consulta entre rango de fechas"), vbCritical, "AVISO"
Exit Sub
End If
If dato2 < dato1 Then
MsgBox ("La fecha final no puede ser mayor a la fecha inicial"), vbCritical, "AVISO"
Exit Sub
End If

b.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear

'Adiciona un item al listbox reservado para la cabecera
UserForm1.ListBox1.AddItem

If dato1 = Empty Or dato2 = Empty Then

For i = 2 To uf
   dato0 = CDate(b.Cells(i, 2).Value)
   If dato0 >= dato1 And dato0 <= dato2 Then
       Me.ListBox1.AddItem b.Cells(i, 1)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = b.Cells(i, 2)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = b.Cells(i, 3)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = b.Cells(i, 4)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = b.Cells(i, 5)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = b.Cells(i, 6)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = b.Cells(i, 7)
   End If
Next i


Else

If dato2 < dato1 Then
MsgBox ("La fecha final no puede ser mayor a la fecha inicial"), vbCritical, "AVISO"
Exit Sub
End If

For i = 2 To uf
   strg = b.Cells(i, 1).Value
   dato0 = CDate(b.Cells(i, 2).Value)
   If UCase(strg) Like UCase(TextBox1.Value) & "*" And dato0 >= dato1 And dato0 <= dato2 Then
       Me.ListBox1.AddItem b.Cells(i, 1)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = b.Cells(i, 2)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = b.Cells(i, 3)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = b.Cells(i, 4)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = b.Cells(i, 5)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = b.Cells(i, 6)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = b.Cells(i, 7)
   End If
Next i

End If


'Carga los datos de la cabecera en listbox
For ii = 0 To 7
UserForm1.ListBox1.List(0, ii) = Sheets("Hoja1").Cells(1, ii + 1)
Next ii

UserForm1.ListBox1.AddItem
UserForm1.ListBox1.AddItem
UserForm1.ListBox1.AddItem
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount - 1, 0) = "Total Importe"

For x = 0 To UserForm1.ListBox1.ListCount - 1
t = CDec(UserForm1.ListBox1.List(x, 6))
tot = tot + t
t = 0
Next x
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount - 1, 1) = Format(tot, " ""U$S"" #,##0.00 ")

UserForm1.ListBox1.AddItem
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount - 1, 0) = "Total de registros:"
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount - 1, 1) = UserForm1.ListBox1.ListCount - 5

Me.ListBox1.ColumnWidths = "170 pt;70 pt;50 pt;50 pt;50 pt;50 pt;50 pt"
End Sub

Private Sub CommandButton3_Click()
Unload UserForm1
End Sub

Private Sub CommandButton4_Click()
On Error Resume Next
nom = ActiveWorkbook.Name
pto = InStr(nom, ".")
nomarch = Left(nom, pto - 1)
myfile = ThisWorkbook.Path & "\" & nomarch & ".txt"
cara = ";" 'delimitador de campos
Open myfile For Output As #1
For x = 1 To UserForm1.ListBox1.ListCount - 5
C1 = ListBox1.List(x, 0)
C2 = CDate(ListBox1.List(x, 1))
C3 = ListBox1.List(x, 2)
C4 = ListBox1.List(x, 3)
C5 = ListBox1.List(x, 4)
C6 = ListBox1.List(x, 5)
C7 = CDec(ListBox1.List(x, 6))
Print #1, C1 & cara & C2 & cara & C3 & cara & C4 & cara & C5 & cara & C6 & cara & C7
Next x
Close
MsgBox "El reporte se exportó a TXT con éxito", vbCritical, "AVISO"
End Sub

Private Sub TextBox1_Change()
On Error Resume Next
Set b = Sheets("Hoja1")
uf = b.Range("A" & Rows.Count).End(xlUp).Row
If Trim(TextBox1.Value) = "" Then
   Me.ListBox1.RowSource = "Hoja1!A1:G" & uf
   Exit Sub
End If


b.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
dato1 = CDate(TextBox2)
dato2 = CDate(TextBox3)
'Adiciona un item al listbox reservado para la cabecera
UserForm1.ListBox1.AddItem


For i = 2 To uf
   strg = b.Cells(i, 1).Value
   If UCase(strg) Like UCase(TextBox1.Value) & "*" Then
       Me.ListBox1.AddItem b.Cells(i, 1)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = b.Cells(i, 2)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = b.Cells(i, 3)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = b.Cells(i, 4)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = b.Cells(i, 5)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = b.Cells(i, 6)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = b.Cells(i, 7)
   End If
Next i



'Carga los datos de la cabecera en listbox
For ii = 0 To 7
UserForm1.ListBox1.List(0, ii) = Sheets("Hoja1").Cells(1, ii + 1)
Next ii


UserForm1.ListBox1.AddItem
UserForm1.ListBox1.AddItem
UserForm1.ListBox1.AddItem
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount - 1, 0) = "Total Importe"

For x = 0 To UserForm1.ListBox1.ListCount - 1
t = CDec(UserForm1.ListBox1.List(x, 6))
tot = tot + t
t = 0
Next x
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount - 1, 1) = Format(tot, " ""U$S"" #,##0.00 ")

UserForm1.ListBox1.AddItem
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount - 1, 0) = "Total de registros:"
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount - 1, 1) = UserForm1.ListBox1.ListCount - 5


UserForm1.TextBox2 = Clear
UserForm1.TextBox3 = Clear

Me.ListBox1.ColumnWidths = "170 pt;70 pt;50 pt;50 pt;50 pt;50 pt;50 pt"
End Sub

Private Sub TextBox2_Change()
If Len(UserForm1.TextBox2) = 10 Then UserForm1.TextBox3.SetFocus
End Sub

Private Sub TextBox3_Change()
If Len(UserForm1.TextBox3) = 10 Then UserForm1.CommandButton2.SetFocus
End Sub

Private Sub UserForm_Initialize()
Dim fila As Long
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set b = Sheets("Hoja1")
uf = b.Range("A" & Rows.Count).End(xlUp).Row
uc = b.Cells(1, Columns.Count).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, "$") + 1, InStr(2, uc, "$") - 2)
With Me.ListBox1
    .ColumnCount = 7
    .ColumnWidths = "170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt"
    .RowSource = "Hoja1!A1:" & wc & uf
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
On Error GoTo Fin
If CloseMode <> 1 Then Cancel = True
Fin:
End Sub

Código que se inserta en un módulo

'**************https://programarexcel.com  **** https://youtube.com/programarexcel*********

#If VBA7 And Win64 Then

'Si es de 64 bits

Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr

Public Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr

Public Declare PtrSafe Function GetWindowLongPtr Lib "USER32" Alias "GetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr

Public Declare PtrSafe Function SetWindowLongPtr Lib "USER32" Alias "SetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr

Public Declare PtrSafe Function DrawMenuBar Lib "USER32" (ByVal hwnd As Long) As LongPtr

Public Declare PtrSafe Function RegOpenKeyA Lib "advapire32.dll" (ByVal hKey As LongPtr, ByVal lpSubKey As String, phkResult As LongPtr) As LongPtr

#Else

'Si es de 32 bits

Public 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

Public Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Public Declare Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Declare Function DrawMenuBar Lib "USER32" (ByVal hwnd As Long) As Long

Public Declare Function RegOpenKeyA Lib "advapire32.dll" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

#End If

Sub muestra1()

UserForm1.Show

End Sub

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛


Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Como Exportar Desde Excel y Guardar Archivo TXT Separado por Punto y Coma






En este ejemplo de macro se muestra Como Exportar de Excel a un Archivo TXT Delimitando los Campos con Punto y Coma, la macro de Excel al exportar al fichero TXT separa los campos exportados con punto y coma; en post siguientes se mostrará como delimitar o separar campos con coma, tabulación, barra, suscribe a nuestro canal de YouTube para que avise cuando se suba nuevo contenido.

Si estás trabajando con listbox quizás quieras aprender más sobre este objeto de VBA para Excel, en el link encontrarás muchos ejemplos que serán de utilidad relacionados con listbox de Excel.

Recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

Suscribe a nuestro canal para que YouTube te avise cuando se suba nuevo contenido al canal, en el vídeo encontrarás una explicación gráfica y detallada del ejemplo que se muestra en este post.






 


La macro contenida en el ejemplo que se puede descargar desde el link del final sin ninguna restricción, permite crear un fichero TXT con los datos de Excel o dicho de otra forma Exportar los datos de Excel al un archivo TXT.

Presionando el botón que se encuentra en la hoja de Excel se procede a crear el TXT, la macro en un primero momento determinar el nombre del archivo con la macro, ya que en el ejemplo el TXT creado llevará el mismo nombre que el fichero con la macro, pero con la extensión TXT, lo mencionado se hace con los siguientes códigos:

nom = ActiveWorkbook.Name
pto = InStr(nom, ".")
nomarch = Left(nom, pto - 1)
myfile = ThisWorkbook.Path & "\" & nomarch & ".txt"


⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Como utilizar el método Find para buscar datos en Excel


Como enviar mail con archivo Excel y PDF mediante Outlook con Excel

Como hacer un link o hiperlink a google maps con Excel

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Luego en la variable "cara" se establece el caracter que se usará para separar o delimitar los datos, se determina la última fila con datos y se procede hacer un bucle desde la primera fila de Excel que contiene los datos que se requieren exportar a TXT hasta la última fila con datos.

Se cargan en las variables C1 a C7 cual es el valor de la fila que recorrer el bulce en ese momento y la columna A, B, C, D, E, F y G; para exportar se concatenan todos los valores de las columnas con el carácter determinado para delimitar o separar los datos, en este caso es el punto y coma, lo mencionado se hace con los siguientes códigos.

For i = 2 To uf
C1 = Cells(i, 1)
C2 = Cells(i, 2)
C3 = Cells(i, 3)
C4 = Cells(i, 4)
C5 = Cells(i, 5)
C6 = Cells(i, 6)
C7 = Cells(i, 7)
Print #1, C1 & cara & C2 & cara & C3 & cara & C4 & cara & C5 & cara & C6 & cara & C7
Next i

Exportado todos los datos se cierra el archivo TXT y sale un mensaje avisando que los datos fueron exportados, terminando la macro llamada Como Exportar Excel y Guardar Arvhivo TXT Delimitado por Punto y Coma, seguidamente se encuentre el código completo y posteriormente el link de descarga.

Código que se inserta en un Módulo de VBA

'**************https://programarexcel.com  **** https://youtube.com/programarexcel*********



#If VBA7 And Win64 Then
'Si es de 64 bits
Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr
Public Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Public Declare PtrSafe Function GetWindowLongPtr Lib "USER32" Alias "GetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Public Declare PtrSafe Function SetWindowLongPtr Lib "USER32" Alias "SetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Public Declare PtrSafe Function DrawMenuBar Lib "USER32" (ByVal hwnd As Long) As LongPtr
Public Declare PtrSafe Function RegOpenKeyA Lib "advapire32.dll" (ByVal hKey As LongPtr, ByVal lpSubKey As String, phkResult As LongPtr) As LongPtr
#Else
'Si es de 32 bits
Public 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
Public Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function DrawMenuBar Lib "USER32" (ByVal hwnd As Long) As Long
Public Declare Function RegOpenKeyA Lib "advapire32.dll" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
#End If

Sub ExportaTXTDelimitadoPorPuntoyComa()
Dim i As Double
On Error Resume Next
Set a = Sheets("Hoja1")
nom = ActiveWorkbook.Name
pto = InStr(nom, ".")
nomarch = Left(nom, pto - 1)
myfile = ThisWorkbook.Path & "\" & nomarch & ".txt"
cara = ";" 
uf = a.Range("A" & Rows.Count).End(xlUp).Row

Open myfile For Output As #1
For i = 2 To uf
C1 = Cells(i, 1)
C2 = Cells(i, 2)
C3 = Cells(i, 3)
C4 = Cells(i, 4)
C5 = Cells(i, 5)
C6 = Cells(i, 6)
C7 = Cells(i, 7)
Print #1, C1 & cara & C2 & cara & C3 & cara & C4 & cara & C5 & cara & C6 & cara & C7
Next i
Close
MsgBox ("El archivo txt se creo con éxito"), vbInformation, "AVISO"
End Sub

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Como Exportar Desde Excel y Guardar Archivo TXT






La macro que se presenta en este post permite exportar de Excel a un Achivo TXT, recorre todas las filas del rango de datos que especifiquemos y va exportando los datos a TXT, anteriormente se había presentado una macro que guarda en TXT con formato Unicode UTF8, donde se usan mediante código los comandos de guardar de Excel, lo cual es válido también.

Recomiendo un excelente libro sobre Excel que te ayudará a ser más hábil en el manejo de Excel, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

En el vídeo encuentra una explicación más gráfica y detallada de la macro que se presenta en este post; Suscribe a nuestro canal para que YouTube te avise cuando se suba nuevo contenido al canal, en el vídeo encontrarás una explicación gráfica y detallada del ejemplo que se muestra en este post.






 


Al descargar y abrir el archivo de Excel donde se encuentra el ejemplo, abriendo el módulo con el Editor de VBA, se puede observar una primera codificación antes del sub, la cual es para generar compatibilidad entre versiones de Excel de 32 y 64 bits, no está relacionado con la exportación de datos a TXT.

Luego si viene la codificación para exportar a TXT, en un primer momento la macro la macro determina el nombre con el que guardará el archivo TXT, eso se hace con estas lineas de código

nom = ActiveWorkbook.Name
pto = InStr(nom, ".")
nomarch = Left(nom, pto - 1)
myfile = ThisWorkbook.Path & "\" & nomarch & ".txt"

En la variable nom se guarda el nombre del archivo actual con la macro, a dicho nombre se le extrae la extensión xlsm y se carga en la variable nomarch, por ultimo en la variable myfile se carga el path o dirección en el directorio del archivo que está integrado por el nombre del fichero TXT, que en este caso se llama igual que el archivo xlsm con la macro, pero con extensión TXT.


⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Como importar un archivo TXT separado por coma


Como insertar fotos al modificar una celda

Como hacer un link o hiperlink a google maps con Excel

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Luego se determina la última fila con datos, que está indicando la fila hasta la cual se deben exportar los datos contenidos en la hoja1 de Excel, con el siguiente código:

uf = a.Range("A" & Rows.Count).End(xlUp).Row

Luego se recorre las filas y se va exportando a excel, como se hace, en la fila que recorre el bucle en ese momento se determina columna por columna cual es el dato existente en la celda y se va concatenando y exportando a de Excel a TXT, luego se sigue con la otra fila y así sucesivamente hasta que se termine el bucle con la última fila con datos, el código es:

Open myfile For Output As #1
For i = 2 To uf
C1 = a.Cells(i, 1)
C2 = a.Cells(i, 2)
C3 = a.Cells(i, 3)
C4 = a.Cells(i, 4)
C5 = a.Cells(i, 5)
C6 = a.Cells(i, 6)
C7 = a.Cells(i, 7)
Print #1, C1 & C2 & C3 & C4 & C5 & C6 & C7
Next i

El ejemplo que hemos denominado Como Exportar Desde Excel y Guardar en Archivo TXT, se puede descargar desde el final del post, a continuación está el código contenido en dicho ejemplo de macro.


Código que se inserta en un módulo de VBA

'**************https://programarexcel.com  **** https://youtube.com/programarexcel*********



#If VBA7 And Win64 Then
'Si es de 64 bits
Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr
Public Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Public Declare PtrSafe Function GetWindowLongPtr Lib "USER32" Alias "GetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Public Declare PtrSafe Function SetWindowLongPtr Lib "USER32" Alias "SetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Public Declare PtrSafe Function DrawMenuBar Lib "USER32" (ByVal hwnd As Long) As LongPtr
Public Declare PtrSafe Function RegOpenKeyA Lib "advapire32.dll" (ByVal hKey As LongPtr, ByVal lpSubKey As String, phkResult As LongPtr) As LongPtr
#Else
'Si es de 32 bits
Public 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
Public Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function DrawMenuBar Lib "USER32" (ByVal hwnd As Long) As Long
Public Declare Function RegOpenKeyA Lib "advapire32.dll" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
#End If

Sub ExportaTXT()
Dim i As Double
On Error Resume Next
Set a = Sheets("Hoja1")
nom = ActiveWorkbook.Name
pto = InStr(nom, ".")
nomarch = Left(nom, pto - 1)
myfile = ThisWorkbook.Path & "\" & nomarch & ".txt"
uf = a.Range("A" & Rows.Count).End(xlUp).Row

Open myfile For Output As #1
For i = 2 To uf
C1 = a.Cells(i, 1)
C2 = a.Cells(i, 2)
C3 = a.Cells(i, 3)
C4 = a.Cells(i, 4)
C5 = a.Cells(i, 5)
C6 = a.Cells(i, 6)
C7 = a.Cells(i, 7)
Print #1, C1 & C2 & C3 & C4 & C5 & C6 & C7
Next i
Close
MsgBox ("El archivo txt se creo con éxito"), vbInformation, "AVISO"
End Sub


⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Como Copiar Varias Tablas Vinculadas de Excel a Word de Distintas Hojas






A pedido de un suscriptor de nuestro canal de YouTube se presenta este ejemplo de macro muestra como exportar las tablas de todas las hojas de Excel a Word en forma vinculadas, es decir la macro recorrerá todas las hojas del libro de Excel, determinará en forma automática el rango de cada unas de las tablas contenidas en cada una de las hojas, las copiará y pegara en Word.

Recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

Suscribe a nuestro canal para que YouTube te avise cuando se suba nuevo contenido al canal, en el vídeo encontrarás una explicación gráfica y detallada del ejemplo que se muestra en este post.






 


En el libro que se puede descargar desde el final, el cual es un fichero comprimido que contiene el archivo de Excel con la Macro y un archivo de Word que es usado como plantilla; al abrirlo se puede observar que el libro Excel cuenta con varias hojas, dentro de cada hoja existen diferentes tablas, estas tablas tiene como estructura común que se encuentran que todas empiezan en la columna A y que se encuentran separadas por dos filas vacías, es a los fines que la macro pueda determinar en forma automática el rango de cada una de las tablas las copie y pegue en Word.

La macro se ejecuta con el botón que se encuentra en la hoja1 del libro, al presionarla recorre cada una de las hojas del libro Excel buscando las tablas y copiando y pegando las miasmas a Word, el archivo de Word es una plantilla que simula un informe que contiene un marcador que le dice a la macro donde debe ir pegada cada tabla.

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Como sumar datos seleccionados en un listbox multiselect


Como insertar filas en hojas de Excel

Libro de Excel con link a todas las macros y tutoriales en YouTube con buscador







La macro recorre todas las hojas del libro Excel en busca de las tablas, para recorrer hojas se utiliza el siguiente código:

For Each hoja In Worksheets

Para que la macro determine en forma automática el rango de las tablas se detecta cual es la última fila hasta llegar a la fila vacía, por eso es necesario por lo menos una fila en blanco entre tabla y tabla, los siguientes códigos determinan cual es la ultima fila y última columna del rango de la tabla y lo copia:

uf = a.Range("A" & pf).End(xlDown).Row
pc = a.Range("A" & pf).Address
pwc = Mid(pc, InStr(pc, "$") + 1, InStr(2, pc, "$") - 2)

Se se observa el archivo de Word que se acompaña con el ejemplo y que se usa como plantilla, tiene marcado donde la macro debe pegar cada una de las tablas, en este ejemplo las tablas se enumeran de la uno en forma consecutiva empezando en la hoja uno, es por ello que si la tabla 5 por ejemplo se requiere en un determinado lugar de Word se debe escribir en la plantilla:

 [CAMPO_TABLA5]

La macro con el siguiente código busca el número de la tabla y la pega en forma vinculada, es decir si se modifica en Excel se modificará en Word, en el lugar indicado con el siguiente código:

ts = "[Campo_Tabla" & n & "]"
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=ts
While objWord.Selection.Find.Found = True
objWord.Selection.PasteExcelTable True, True, False
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=ts
Wend

Seguidamente se muestra el código completo incluido en todo el formulario que se proporciona con el ejemplo llamado Como Copiar las Tablas de Todas las Hojas de Excel a Word en forma Vinculada, luego del código se encuentre el link para proceder a la descarga del ejemplo el cual recomiendo como así también ver el vídeo para que sea más fácil entenderlo.


Código que se inserta en un módulo de VBA

'**************https://programarexcel.com  **** https://youtube.com/programarexcel*********



Sub ExportaTablasWordVinc()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim objWord As Word.Application, wdDoc As Word.Document, hoja As Worksheet
On Error Resume Next
Set a = Sheets(ActiveSheet.Name)
nom = ActiveWorkbook.Name
pto = InStr(nom, ".")
nomarch = Left(nom, pto - 1)
ruta = ThisWorkbook.Path & "\" & nomarch & ".docx"
Set objWord = CreateObject("Word.Application")
objWord.DisplayAlerts = wdAlertsNone
objWord.Visible = True
Set wdDoc = objWord.Documents.Open(ruta)
nomfic = nomarch & " " & Format(Date, "dd-mm-yyyy")
rutainf = ThisWorkbook.Path & "\" & nomfic & ".docx"
n = 1
'para cada hoja del libro
For Each hoja In Worksheets
Set a = Sheets(hoja.Name)
pf = 1
uff = a.Range("A" & Rows.Count).End(xlUp).Row


Do
uf = a.Range("A" & pf).End(xlDown).Row
pc = a.Range("A" & pf).Address
pwc = Mid(pc, InStr(pc, "$") + 1, InStr(2, pc, "$") - 2)

uf = uf
uc = a.Range("A" & pf).End(xlToRight).Address
wc = Mid(uc, InStr(uc, "$") + 1, InStr(2, uc, "$") - 2)

a.Range(pwc & pf & ":" & wc & uf).Copy

ts = "[Campo_Tabla" & n & "]"
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=ts
While objWord.Selection.Find.Found = True
objWord.Selection.PasteExcelTable True, True, False
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=ts
Wend

pf = uf + 3
n = n + 1
Loop While pf <= uff

wdDoc.SaveAs Filename:=rutainf, FileFormat:=wdFormatXMLDocument

Next 'proxima hoja
'wdDoc.Close
MsgBox ("Las " & n - 2 & " tablas se exportaron con éxito"), vbInformation, "AVISO"
'wdDoc.Quit
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends