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