Primo poster, quindi se c'è qualche formattazione o linee guida a cui non sono riuscito ad aderire, per favore fatemelo sapere in modo che possa sistemarlo.Errore VBA 1004 - selezionare il metodo della classe intervallo non riuscito
Quindi, in pratica, sto chiedendo all'utente la directory dei file del file excel, quindi ho impostato alcune variabili (originariamente impostate su public come variabili di progetto, poiché queste venivano utilizzate e modificate in altri luoghi). Ho anche aggiunto le righe per impostare queste variabili su nulla (nel caso, non penso che dovrebbe essere importante). Quindi imposto queste variabili al file excel, alla cartella di lavoro e ai fogli a cui voglio accedere.
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
Così ho creato due differenti variabili Foglio 'sourceSheets' e 'sourceSheetsSum', il codice funziona se io uso 'sourceSheets', ma l'errore 1004 si verifica se io uso 'sourceSheetsSum'. Ho anche provato il codice con la variabile 'sourceSheet' rimossa completamente, nel caso in cui per qualche motivo sostituisse 'sourceSheetSum'.
Sono abbastanza fiducioso che la cartella di lavoro e i fogli Excel esistono e vengono chiamati correttamente, poiché ho eseguito un rapido bit di codice per scorrere tutti i fogli della cartella di lavoro e generare i nomi, riportati di seguito.
For j = 1 To sourceBook.Sheets.Count
Debug.Print (Sheets(j).name)
Next j
Con l'output di debug di
Misure
Analisi Riepilogo impostazioni
Analysis
Così, qualcuno ha qualche idea che cosa questo errore potrebbe significare, o come posso possibilmente andare a trovare di più su ciò che l'errore è in realtà?
MODIFICA: Così ho deciso di aggiungere un po 'alla lista dei nomi dei fogli, non sono sicuro se sarà di aiuto.
For j = 1 To sourceBook.Sheets.Count
listSheet(j) = Sheets(j).name
Next j
Debug.Print (listSheet(2))
Set sourceSheetSum = sourceBook.Sheets(listSheet(2))
Il debug di stampe Analisi Sintesi, quindi so che il foglio esiste nella cartella di lavoro e non ci dovrebbero essere problemi con un 'errore di battitura' nei nomi.
Il codice ha ancora lo stesso errore sulla stessa linea.
deusxmach1na: Penso che si voleva me di cambiare
Dim sourceXL As Variant
Dim sourceBook As Variant
Dim sourceSheet As Variant
Dim sourceSheetSum As Variant
Set sourceSheet = sourceBook.Sheets("Measurements")
Per
Dim sourceXL As Excel.Application
Dim sourceBook As Excel.Workbook
Dim sourceSheet As Worksheet
Dim sourceSheetSum As Worksheet
Set sourceSheet = sourceBook.Worksheets("Measurements")
Ma questo non cambia l'errore, mi ricordo che ho avuto è simile a quello, e poi cambiato da quando Ho letto che la variante è come un catch all, non in realtà così solida su quale sia la variante.
Vorrei attenuare i fogli specificatamente come fogli di lavoro e vedere cosa succede. 'Dim sourceSheetSum as Worksheet 'In realtà, si potrebbe voler attenuare tutto con più specificità. – deusxmach1na