tiempo solucionar run producido por objeto metodo macro error ejecucion definido como clase aplicacion vb.net excel-vba excel-2010 powerpoint-vba vba

vb.net - solucionar - Error de VBA 1004-el método de selección de la clase de rango falló



run time error 1004 excel macro (4)

Assylias y Head of Catering ya le han dado la razón por la que se está produciendo el error.

Ahora, con respecto a lo que está haciendo, por lo que entiendo, no necesita utilizar Select en absoluto

Supongo que estás haciendo esto desde VBA PowerPoint? Si es así, entonces su código será reescrito como

Dim sourceXL As Object, sourceBook As Object Dim sourceSheet As Object, sourceSheetSum As Object Dim lRow As Long Dim measName As Variant, partName As Variant Dim filepath As String filepath = CStr(FileDialog) ''~~> Establish an EXCEL application object On Error Resume Next Set sourceXL = GetObject(, "Excel.Application") ''~~> If not found then create new instance If Err.Number <> 0 Then Set sourceXL = CreateObject("Excel.Application") End If Err.Clear On Error GoTo 0 Set sourceBook = sourceXL.Workbooks.Open(filepath) Set sourceSheet = sourceBook.Sheets("Measurements") Set sourceSheetSum = sourceBook.Sheets("Analysis Summary") lRow = sourceSheetSum.Range("C" & sourceSheetSum.Rows.Count).End(xlUp).Row measName = sourceSheetSum.Range("C3:C" & lRow) lRow = sourceSheetSum.Range("D" & sourceSheetSum.Rows.Count).End(xlUp).Row partName = sourceSheetSum.Range("D3:D" & lRow)

Póster por primera vez, así que si hay algún formato o directrices a las que no haya cumplido, hágamelo saber para poder solucionarlo.

Básicamente, le estoy pidiendo al usuario el directorio de archivos del archivo de Excel, luego configuro algunas variables (originalmente establecidas en público como variables de proyecto, ya que éstas se estaban usando y cambiando en otros lugares). También he agregado las líneas para establecer estas variables a nada (por si acaso, no creo que deba importar). Luego configuro estas variables para el archivo de Excel, el libro de trabajo y las hojas a las que quiero acceder.

Dim filepath as String filePath = CStr(fileDialog) ''ask file dir, set to string Dim sourceXL As Variant ''these three were orig project variables Dim sourceBook As Variant Dim sourceSheet As Variant Dim sourceSheetSum As Variant Set sourceXL = Nothing ''set to nothing in case...? Set sourceBook = Nothing Set sourceSheet = Nothing Set sourceSheetSum = Nothing Set sourceXL = Excel.Application ''set to the paths needed Set sourceBook = sourceXL.Workbooks.Open(filePath) Set sourceSheet = sourceBook.Sheets("Measurements") Set sourceSheetSum = sourceBook.Sheets("Analysis Summary") Dim measName As Variant ''create variable to access later Dim partName As Variant sourceSheetSum.Range("C3").Select ''THIS IS THE PROBLEM LINE measName = sourceSheetSum.Range(Selection, Selection.End(xlDown)).Value sourceSheetSum.Range("D3").Select partName = sourceSheetSum.Range(Selection, Selection.End(xlDown)).Value

Así que creé dos variables de hoja diferentes ''sourceSheets'' y ''sourceSheetsSum'', el código funciona si uso ''sourceSheets'', pero el error 1004 se produce si uso ''sourceSheetsSum''. También probé el código con la variable ''sourceSheet'' eliminada por completo, en caso de que se haya anulado ''sourceSheetSum'' por alguna razón.

Estoy bastante seguro de que el libro de Excel y las hojas existen y se están llamando correctamente, ya que ejecuté un poco de código rápido para recorrer todas las hojas del libro y mostrar los nombres, como se muestra a continuación.

For j = 1 To sourceBook.Sheets.Count Debug.Print (Sheets(j).name) Next j

Con la salida de depuración de

Mediciones
Resumen del análisis
Ajustes de análisis

Entonces, ¿alguien tiene alguna idea de lo que podría significar este error, o cómo puedo encontrar más información sobre lo que realmente es el error?

EDITAR: Así que decidí agregar un poco a la lista de los nombres de las hojas, sin estar seguro de que sirva de nada.

For j = 1 To sourceBook.Sheets.Count listSheet(j) = Sheets(j).name Next j Debug.Print (listSheet(2)) Set sourceSheetSum = sourceBook.Sheets(listSheet(2))

La depuración imprime el Resumen de análisis, por lo que sé que la hoja existe en el libro de trabajo, y no debería haber ningún problema con un "error tipográfico" en los nombres.
Sin embargo, el código todavía tiene el mismo error en la misma línea.

deusxmach1na: creo que querías que cambiara

Dim sourceXL As Variant Dim sourceBook As Variant Dim sourceSheet As Variant Dim sourceSheetSum As Variant Set sourceSheet = sourceBook.Sheets("Measurements")

A

Dim sourceXL As Excel.Application Dim sourceBook As Excel.Workbook Dim sourceSheet As Worksheet Dim sourceSheetSum As Worksheet Set sourceSheet = sourceBook.Worksheets("Measurements")

Pero esto no cambia el error, recuerdo que lo tuve similar a eso, y luego lo cambié ya que leí que la variante es como una captura de todos, no realmente tan sólida en qué variante es.


Debe seleccionar la hoja antes de poder seleccionar el rango.

He simplificado el ejemplo para aislar el problema. Prueba esto:

Option Explicit Sub RangeError() Dim sourceBook As Workbook Dim sourceSheet As Worksheet Dim sourceSheetSum As Worksheet Set sourceBook = ActiveWorkbook Set sourceSheet = sourceBook.Sheets("Sheet1") Set sourceSheetSum = sourceBook.Sheets("Sheet2") sourceSheetSum.Select sourceSheetSum.Range("C3").Select ''THIS IS THE PROBLEM LINE End Sub

Reemplace Sheet1 y Sheet2 con sus nombres de hoja.

NOTA IMPORTANTE: el uso de Variantes es peligroso y puede provocar errores difíciles de eliminar. Úsalos solo si tienes una razón muy específica para hacerlo.


Eliminar el rango de selección antes de que la copia funcionara para mí. Gracias por los mensajes.


No puede seleccionar un rango sin haber seleccionado primero la hoja en la que está. Intente seleccionar la hoja primero y ver si todavía tiene el problema:

sourceSheetSum.Select sourceSheetSum.Range("C3").Select