Para dante - Cambiar el lugar donde se guardara el archivo con un nombre especifico

Estimado

Halle este código para generar un TXT desde una hoja de excel. La verdad es muy buena pero necesito cambiarle algunas cosas.

Primero necesito que se guarde en la siguiente ruta C:carpetaX/carpetaY

El código actual lo guarda en la carpeta documentos.

Cuando se guarde necesito que se guarde con un nombre especifico que se tendría que optener de la hoja IMP de la celdas A1.

Lo otro es al generar el TXT que el formato de números esta si 2200,50 pero necesito cambiarlo a 2200.50, es decir, en ves de coma tendría que estar el punto.

Private Sub CommandButton2_Click()

Const DELIMITER As String = "|" 'or "|", vbTab, etc.
Dim myRecord As Range
Dim myField As Range
Dim nFileNum As Long
Dim sOut As String

Sheets("LVTXT").Activate

nFileNum = FreeFile
Open Left(ActiveWorkbook.Name, InStr(1, ActiveWorkbook.Name, ".", vbTextCompare)) & "txt" For Output As #nFileNum
For Each myRecord In Range("A1:A" & _
Range("A" & Rows.Count).End(xlUp).Row)
With myRecord
For Each myField In Range(.Cells(1), _
Cells(.Row, Columns.Count).End(xlToLeft))
sOut = sOut & DELIMITER & myField.Text
Next myField
Print #nFileNum, Mid(sOut, 2)
sOut = Empty
End With
Next myRecord
Close #nFileNum
MsgBox "El archivo TXT del libro de Ventas del período solicitado a sido Generado Correctamente"
End Sub

Gracias

1 respuesta

Respuesta
1

Te regreso la macro con los cambios. Cambia "C:\trabajo\varios\" por tus carpetas.

Revisa lo del formato del número, si te sigue poniendo la coma, entonces tenemos que reemplazarla por punto.

Private Sub CommandButton2_Click()
'Act.Por.Dante Amor
    Const DELIMITER As String = "|" 'or "|", vbTab, etc.
    Dim myRecord As Range
    Dim myField As Range
    Dim nFileNum As Long
    Dim sOut As String
    '
    Sheets("LVTXT").Activate
    ruta = "C:\trabajo\varios\"
    nombre = Left(ActiveWorkbook.Name, InStr(1, ActiveWorkbook.Name, ".", vbTextCompare))
    '
    nFileNum = FreeFile
    Open ruta & nombre & "txt" For Output As #nFileNum
    For Each myRecord In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
        With myRecord
            For Each myField In Range(.Cells(1), _
                Cells(.Row, Columns.Count).End(xlToLeft))
                sOut = sOut & DELIMITER & Format(myField.Text, "#.00")
            Next myField
            Print #nFileNum, Mid(sOut, 2)
            sOut = Empty
        End With
    Next myRecord
    Close #nFileNum
    MsgBox "El archivo TXT del libro de Ventas del período solicitado a sido Generado Correctamente"
End Sub

Saludos.Dante Amor

No olvides valorar la respuesta.

El cambio lo Hace muy bien pero tengo un problema.

Veras la hoja de donde se genera el TXT tiene 17 columnas de la A a la Q. No todos tienen que tener el formato de 2000.50. Algunos contienen datos de fecha y otros son texto. Las columnas de la I a la P son las que contienen los datos numéricos que necesito que estén en el formato 2000.50.

Con la macro actual me convierte todo a numero incluso las fechas.

También el nombre del archivo TXT sigue guardándose con el nombre del archivo de excel.

Cuando se guarde necesito que se guarde con un nombre especifico que se tendría que optener de la hoja IMP de la celdas A1.

Gracias

Perdona, no vi la parte de poner el nombre tomándolo de la celda A1, pero ya están los cambios.

Private Sub CommandButton2_Click()
'Act.Por.Dante Amor
    Const DELIMITER As String = "|" 'or "|", vbTab, etc.
    Dim myRecord As Range
    Dim myField As Range
    Dim nFileNum As Long
    Dim sOut As String
    '
    Sheets("LVTXT").Activate
    ruta = "C:\trabajo\varios\"
    nombre = Sheets("IMP").[A1]
    '
    nFileNum = FreeFile
    Open ruta & nombre & ".txt" For Output As #nFileNum
    For Each myRecord In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
        With myRecord
            For Each myField In Range(.Cells(1), Cells(.Row, Columns.Count).End(xlToLeft))
                If myField.Column >= 9 And myField.Column <= 16 Then
                    sOut = sOut & DELIMITER & Format(myField.Text, "#.00")
                Else
                    sOut = sOut & DELIMITER & myField.Text
                End If
            Next myField
            Print #nFileNum, Mid(sOut, 2)
            sOut = Empty
        End With
    Next myRecord
    Close #nFileNum
    MsgBox "El archivo TXT del libro de Ventas del período solicitado a sido Generado Correctamente"
End Sub

Gracias.

Pero ahora el TXT muestra 2562,56 cuando coloco "." y cuando lo cambio a "," no me muestra los decimales.

 sOut = sOut & DELIMITER & Format(myField.Text, "#.00")

Y cómo tienes en tu configuración regional el separador de decimales con punto "." o con coma ","

También dime como tienes la configuración

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas