Macro para copiar datos de una tabla a otra desde un botón

Estoy armando una herramienta que me tome los datos de una tabla excel partiendo de un id y me los coloque en un formato también diseñado en una hoja de excel para poder modificarlos y guardarlos en la misma posición según el id.

Cuando le doy clic al botón para guardar los cambios, me muestra error 1004. Error en el metodo select de la clase Range

El código es el siguiente:

Sub Guardar_Modificacion()
'
' guardar registros editados Macro2
'

'

Dim Fila As String

Fila = Hoja3.Range("E1").Value

Fila = Application.WorksheetFunction.Match(Hoja11.Range("E8").Value, Hoja2.Range("A:A"), 0)

If Hoja11.Range("H8").Value <> "" Then

MsgBox Hoja11.Range("H8").Value, vbInformation, "Intransacion"

Else

Hoja11.Range("E8:E25").Select
Selection.Copy
Sheets("Transacciones").Select
Range("A" + LTrim(Fila)).Select   ' ACÁ ME GENERA EL ERROR 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True

End If

End sub

3 respuestas

Respuesta
2

Ya probé tu macro y no me genera error.

Pero veo lo siguiente:

  • La variable fila la declaraste como String. No declares la variable, en VBA no es necesario que declares las variables.
  • El resultado en la variable fila es un número, no debes declararla como String, más bien la debes declarar como Double.
  • Como el resultado es un número, entonces tampoco es necesario que pongas LTrim(fila).
  • Y por último, no utilices el mas (+) para concatenar, ya que VBA lo puede considerar como suma y no como concatenar, mejor utilizar el &

Entonces quedaría así:

Sub Guardar_Modificacion()
    ' guardar registros editados Macro2
    Dim fila As Double
    fila = Application.WorksheetFunction.Match(Hoja11.Range("E8").Value, Hoja2.Range("A:A"), 0)
    If Hoja11.Range("H8").Value <> "" Then
        MsgBox Hoja11.Range("H8").Value, vbInformation, "Intransacion"
    Else
        Hoja11.Range("E8:E25").Select
        Selection.Copy
        Sheets("Transacciones").Select
        Range("A" & fila).Select   ' ACÁ ME GENERA EL ERROR
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=True
    End If
End Sub

Cuando realices la prueba, asegura que el dato de Hoja11.Range("E8"), exista en la Hoja2.


Prueba y me comentas.

Muchas gracias amigo por el apoyo pero me sigue dando el mismo error... te comento: mi idea es que tengo dos hojas que funcionan como formulario. una para ingresar registros y la otra para llamar un registro desde el ID, hacer las correcciones que considere necesarias y luego guardar los cambios con el mismo lugar de acuerdo al ID. para eso utilicé Range("A" + LTrim(Fila)).Select

es dedir, que me toma los datos del hoja Hoja11.Range("E8:E25").Select, lo copie y me lleve a la otra hoja y me ubique la posición del registro y me pegue los valores... 

el formulario para ingresar usa algo igual pero con la diferencia que en vez de remplazar datos me ingrese un nueva fila el registro nuevo. ya lo había hecho en una oportunidad y funcionaba pero ahora no se que será 

Pero probaste con el código que yo te envié.

Debes probar con el código que yo te envié.

Me dices qué error te genera y en cuál línea se detiene.

Si amigo mio... 

Copie y pegue el código y me muestra el mismo error: Se ha producido un error '1004'  erro en el Método Select de la clase Range

en la misma línea de código:   Range("A" & fila).Select   ' ACÁ ME GENERA EL ERROR

Habrá que revisar tu hoja, si tienes la hoja protegida o celdas combinadas.

¿Qué versión de excel tienes?

Envíame tu archivo junto con mi macro para revisar tu archivo.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Erick Echeverria

Tengo la versión de Office 2013... dejame armar el archivo para enviártelo amigo muchas gracias

¿Tienes alguna otra macro en el archivo?

El archivo que me envíes, también debe tener el problema de la macro.

De preferencia envíame el archivo con el cual estás trabajando, de esa forma podré revisar el error directamente en el origen. Pero como tú consideres.

Respuesta
1

Pon esto en la línea en vez de la línea que ya tiene

Fila = Val(WorksheetFunction.Match(Hoja11.Range("E8").Value, Hoja2.Range("A:A"), 0))

Y esto en en la otra línea

Range("A" & Fila).Select   ' ACÁ ME GENERA EL ERROR 

Muchas gracias amigo,

Pero te comento que me sigue dando el mismo error, esto si que es raro de verdad...

Esta difícil decirte que es si no pones una pantalla del error y la línea que da ese error, copie tu macro y le hice los cambios que mencione y funciono.

Allí te envío el código de la macro

Sub Guardar_Modificacion()
' guardar registros editados Macro2
Dim fila As Double
fila = Application.WorksheetFunction.Match(Hoja11.Range("E8").Value, Hoja2.Range("A:A"), 0)
If Hoja11.Range("H8").Value <> "" Then
MsgBox Hoja11.Range("H8").Value, vbInformation, "Intransacion"
Else
Hoja11.Range("E8:E25").Select
Selection.Copy
Sheets("Transacciones").Select
Range("A" & fila).Select ' ACÁ ME GENERA EL ERROR
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True


End If

End Sub

Pues mira en mi maquina corre bien solo le hice algunos cambios como quitarle líneas que están de más, posiblemente no tienes ningún dato en el rango a copiar o la variable fila se hace igual a 0 haciendo que la parte donde se vaya a pegar quede aso range(A0), lo cual en Excel no existe y te mandaría un error en la línea amarilla, esto lo puedes ver en el panel VBA en solo menu ver - locales como ves en esta pantalla la variable fila vale 1

Respuesta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas