visual variable valor una refrescar para objetos objeto lista hoja ejemplo crear codigos codigo clase celda asignar vb.net vba excel-vba

vb.net - variable - refrescar hoja excel vba



Seleccionar el método de clase de rango fallido a través de VBA (3)

Este es el código con el que estoy trabajando actualmente, y estoy obteniendo este problema. Soy un novato en Excel y no puedo entender qué sucede.

Private Sub cmdRecord_Click() Sheets("BxWsn Simulation").Range("Result").Select //This is the line with the problem, as excel told me. Selection.Copy Sheets("Reslt Record").Select Sheets("Reslt Record").Range("A5000").End(xlUp).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("CuCon Simulator").Select Application.CutCopyMode = False Range("Improvement").Select End Sub

El error es Seleccionar el método de la clase de rango falló a través de VBA, Error 1004. ¿Alguna idea?

Gracias.

Editar:

Así que acabo de cambiar el código a

Sheets("BxWsn Simulation").Select Range("Result").Select

Creo que esto es a lo que te refieres al hacerlo activo? Sin embargo, sigo obteniendo el error del Método ''Rango'' del objeto ''_Worksheet'', error 1004


La respuesta correcta a estas preguntas en particular es "no seleccionar". A veces tienes que seleccionar o activar, pero el 99% de las veces no. Si tu código se ve como

Select something Do something to the selection Select something else Do something to the selection

Probablemente necesites refactorizar y considerar no seleccionar.

El error, el "Rango" de método del objeto "_Worksheet" falló, el error 1004, que está obteniendo es porque la hoja con el botón no tiene un rango llamado "Resultado". La mayoría de las propiedades (tal vez todas) que devuelven un objeto tienen un objeto principal predeterminado. En este caso, está usando la propiedad Range para devolver un objeto Range. Como no califica la propiedad Range, Excel usa el valor predeterminado.

El objeto principal predeterminado puede ser diferente en función de las circunstancias. Si su código estaba en un módulo estándar, entonces el ActiveSheet sería el predeterminado Parent y Excel trataría de resolver ActiveSheet.Range ("Result"). Su código está en el módulo de clase de una hoja (la hoja con el botón). Cuando la referencia no calificada se usa allí, el padre por defecto es la hoja que se adjunta a ese módulo. En este caso, son iguales porque la hoja debe estar activa para hacer clic en el botón, pero ese no es siempre el caso.

Cuando Excel da el error que incluye texto como ''_Object'' (el tuyo dice ''_Worksheet'') siempre se está refiriendo al objeto Parent por defecto, el guión bajo lo delata. En general, la forma de corregir eso es calificar la referencia al ser explícito sobre el padre. Pero en el caso de seleccionar y activar cuando no es necesario, es mejor refactorizar el código.

Esta es una forma de escribir su código sin seleccionarlo ni activarlo.

Private Sub cmdRecord_Click() Dim shSource As Worksheet Dim shDest As Worksheet Dim rNext As Range ''Me refers to the sheet whose class module you''re in ''Me.Parent refers to the workbook Set shSource = Me.Parent.Worksheets("BxWsn Simulation") Set shDest = Me.Parent.Worksheets("Reslt Record") Set rNext = shDest.Cells(shDest.Rows.Count, 1).End(xlUp).Offset(1, 0) shSource.Range("Result").Copy rNext.PasteSpecial xlPasteFormulasAndNumberFormats Application.CutCopyMode = False End Sub

Cuando estoy en un módulo de clase, como el módulo de clase de la hoja en el que estás trabajando, siempre trato de hacer las cosas en términos de esa clase. Entonces uso Me.Parent en lugar de ActiveWorkbook. Hace que el código sea más portátil y evita problemas inesperados cuando las cosas cambian.

Estoy seguro de que el código que tienes ahora se ejecuta en milisegundos, por lo que es posible que no te importe, pero evitar seleccionar definitivamente acelerará tu código y no tienes que configurar ScreenUpdating. Eso puede volverse importante a medida que su código crezca o en una situación diferente.


Esto funcionó para mí.

RowCounter = Sheets(3).UsedRange.Rows.Count + 1 Sheets(1).Rows(rowNum).EntireRow.Copy Sheets(3).Activate Sheets(3).Cells(RowCounter, 1).Select Sheets(3).Paste Sheets(1).Activate


Creo que tienes el mismo problema aquí.
La hoja debe estar activa antes de que pueda seleccionar un rango en ella.

Además, no omita el calificador del nombre de la hoja:

Sheets("BxWsn Simulation").Select Sheets("BxWsn Simulation").Range("Result").Select

O,

With Sheets("BxWsn Simulation") .Select .Range("Result").Select End WIth

que es lo mismo