Tengo un código. En el cual, si ingreso la ruta de un libro de Excel en una celda y hago clic en un botón, el libro se abrirá y los datos del libro actual de B2 se copiarán y pegarán en el libro recién abierto. El código funciona bien. Pero el problema es que el código falla y a veces arroja un error. ¿Cuál es el problema que no puedo entender? Si el código no está bien, nunca se ejecutará perfectamente. Pero en mi caso, a veces se ejecuta bien y, a veces, arroja un error. Por favor ayuda. Aquí está el error -
Error al seleccionar el método de clase de rango
Y aquí está el código...
Private Sub CommandButton1_Click()
Dim pathCell As String
pathCell = Range("locationPath").Value
Dim wbTarget As Workbook 'workbook where the data is to be pasted
Dim wbThis As Workbook 'workbook from where the data is to be copied
'set to the current active workbook (the source book)
Set wbThis = ActiveWorkbook
'copy the range from source book
wbThis.Worksheets(1).Range("B1").Copy
'open a workbook that has same name as the sheet name
Set wbTarget = Workbooks.Open(pathCell)
'Select the target cell
wbTarget.Worksheets(2).Range("B1").Select
'paste the data on the target book
wbTarget.Worksheets(2).Range("B1").PasteSpecial Paste:=xlPasteAll
'clear any thing on clipboard to maximize available memory
Application.CutCopyMode = False
Worksheets(1).Activate
End Sub
¡Cualquier ayuda sería apreciada!
Respuesta1
Supongo que está fallando en esta línea ya que es la única que contiene.Select
'Select the target cell
wbTarget.Worksheets(2).Range("B1").Select
Esa línea fallará con el error mostrado si, en el momento de ejecutarla,
Worksheets(2)
no es la hoja activa. Debe seleccionar la hoja de trabajo y el rango en líneas de código separadas. Probablemente esa sea la razón por la que su macro solo genera errores de forma intermitente. Probablemente a veces salga de esa hoja de trabajo antes de cerrar el libro, pero no en otras ocasiones.Sin embargo, eso no parece tener ningún propósito en lo que respecta a la operación Pegar, y su pegado debería funcionar igual de bien si elimina la línea.
- La siguiente línea de código califica completamente la celda de destino.
'paste the data on the target book
wbTarget.Worksheets(2).Range("B1").PasteSpecial Paste:=xlPasteAll
Si, por alguna razón, es absolutamente necesario que esa celda esté seleccionada cuando se complete la macro, primero seleccione la hoja de trabajo; luego seleccione la celda.
Ver tambiénCómo evitar el uso de Seleccionar en Excel VBA en nuestro sitio hermano stackoverflow.