Que significado tiene del siguiente código

Tengo un código de una macro pero no logro descifrar, me podrían ayudar el paso a paso que hace el código

Sub Generar_CSV()
On Error GoTo ControlErr
    Dim NumeroDeFila As Integer
    Application.ScreenUpdating = True
    Range("B16").Select
    'Obtener la fila que contiene el ultimo dato
    Selection.End(xlDown).Select
    NumeroDeFila = ActiveCell.Row
    'Seleccionamos todo el rango de datos para copiarlos en una hoja nueva
    'ActiveSheet.Range(Cells(16, 34), Cells(NumeroDeFila, 35)).Select
    ActiveSheet.Range(Cells(15, 36), Cells(NumeroDeFila, 36)).Select
    Selection.Copy
    Range("B16").Select
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveWorkbook.SaveAs Filename:="C:\users\" & NombreUsuarioMaquina & "\Desktop\Pedido_" & Format(Date, "dd-mm-yyyy") & ".csv", _
        FileFormat:=xlCSV, CreateBackup:=False
    ActiveWindow.Close
Exit_controlErr:
    Exit Sub
ControlErr:
    If Err.Number = 1004 Then
        MsgBox "El archivo no ha sido guardado", vbInformation, "NO se guardo el archivo"
    Else
        MsgBox Err.Description, vbCritical, "Error # " & Err.Number
    End If
    Resume Exit_controlErr
End Sub

1 Respuesta

Respuesta

.26.01.17

Buenos días, Andrés

Aquí va el código de nuevo, donde completé las explicaciones que solicitabas:

Sub Generar_CSV()
On Error GoTo ControlErr
    Dim NumeroDeFila As Integer
    Application.ScreenUpdating = True
    Range("B16").Select
    'Obtener la fila que contiene el ultimo dato
    Selection.End(xlDown).Select
    NumeroDeFila = ActiveCell.Row
    'Seleccionamos todo el rango de datos para copiarlos en una hoja nueva
    'ActiveSheet.Range(Cells(16, 34), Cells(NumeroDeFila, 35)).Select
    ActiveSheet.Range(Cells(15, 36), Cells(NumeroDeFila, 36)).Select
    Selection.Copy
    Range("B16").Select
'ABRE UN LIBRO NUEVO
    Workbooks.Add
'PEGA LO COPIADO ANTERIORMENTE
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
'GUARDA EL NUEVOA ARCHIVO EN FORMATO csv, TEXTO SEPARADO CON COMAS
    ActiveWorkbook.SaveAs Filename:="C:\users\" & NombreUsuarioMaquina & "\Desktop\Pedido_" & Format(Date, "dd-mm-yyyy") & ".csv", _
        FileFormat:=xlCSV, CreateBackup:=False
'CIERRA EL LIBRO
    ActiveWindow.Close
'ESTA ES UNA REFERENCIA A DONDE CONTINUAR LUEGO DE MOSTRAR EL MENSAJE DE ERRO
Exit_controlErr:
    Exit Sub
'ESTA ES UNA REFERENCIA A DONDE CONTINUAR QUE SE ENVIA DESDE ALGUNA PARTE DEL CODIGO PRECEDENTE
'NO VEO EN EL CODIGO ANTERIOR NINGUNA REFERENCIA A ELLA.
ControlErr:
'MUESTRA MENSAJE SI SE PRODUJO UN ERROR
    'SI EL ERROR NO PERMITIO GUARDAR
    If Err.Number = 1004 Then
        MsgBox "El archivo no ha sido guardado", vbInformation, "NO se guardo el archivo"
    'OTRO TIPO DE ERROR, MUESTRA LA DESCRIPCION Y NUMERO DE ERROR.
    Else
        MsgBox Err.Description, vbCritical, "Error # " & Err.Number
    End If
    'REMITE A LA REFERNCIA DE SALIDA
    Resume Exit_controlErr
End Sub

Si te hubiese quedado algo sin entender, indícamelo y completo la explicación.

Saludos

Fernando

.

Hola tengo unas inquietudes cuando el abre el nuevo libro de excel el me dice guardar el archivo eso lo entiendo lo que no logro identificar cual es el código que trae las celdas B y C de la hoja de cotización y lo pega en el nuevo archivo quisiera que no solo traiga esas celdas si no que me traiga más celdas con mucho más información le agradezco que me muestra donde y como lo puedo modificar

.

Hola, Andrés

En realidad las sentencias que indican qué copiar es la siguiente:

ActiveSheet.Range(Cells(15, 36), Cells(NumeroDeFila, 36)).Select
    Selection. Copy

Se podría haber escrito en una sola linea asi:

ActiveSheet. Range(Cells(15, 36), Cells(NumeroDeFila, 36)). Copy

Cells(15,36) es la celda "AJ15" y la celda hasta donde copiar viene dada por la última celda ocupada en el rango que inicia en "B16" dato que se aloja en la variable NumeroDeFila, como te explique donde dice:

Obtener la fila que contiene el ultimo dato

No sé de dónde sacaste ese código y si esas son las celdas que quieres copiar y pegar en el libro nuevo, pero así como está la rutina copia el rango que te indiqué desde AJ15.

Saludos

Fer

.

Buen día

Ya entendí como funciona el codigo; tengo una inquietud si sera posible que me la despeje; según el código el crea un nuevo libro y lo guarda con nombre de la fecha del sistema; y va generando archivos 1 diario; la pregunta es que si yo puedo darle a la operación una orden de que busque un archivo con un nombre en especifico lo abra le genere una copia y copie la información que en este caso es la que me explicaste anteriormente; básicamente es que cuando le de correr al código el me abra el archivo que guardo en mi computador y me copie la información y me guarde como copia y el original siempre este hay pero sin datos...

gracias...

.

Buenas, Andrés

Faltarían dos cosas:

1.- Si te he respondido a tu consulta original, deberías calificar mi aporte.

2.- La segunda es el criterio del nombre del archivo a abrir. ¿Es uno solo o varios?

Saludos

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas