VBA erreur 1004 - méthode select de la classe range a échoué
première affiche, donc s'il y a un formatage, ou des lignes directrices que je n'ai pas respecté, s'il vous plaît laissez-moi savoir afin que je puisse le corriger.
donc je demande essentiellement à l'utilisateur le répertoire de fichier du fichier excel, puis je configure quelques variables (à l'origine définies au public comme variables de projet, puisque celles-ci étaient utilisées et changées à d'autres endroits). J'ai également ajouté les lignes pour définir ces variables à rien (juste au cas où, je ne pense pas que cela devrait avoir d'importance). J'ai ensuite mis ces variables pour le fichier excel, classeur, et feuilles que je veux accéder.
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
donc j'ai créé deux variables de feuille différentes 'sourceSheets' et 'sourceSheetsSum', le code fonctionne si j'utilise 'sourceSheets', mais l'erreur 1004 se produit si j'utilise 'sourceSheetsSum'. J'ai également essayé le code avec la variable 'sourceSheet' complètement supprimé, dans le cas où il était supérieur 'sourceSheetSum' pour une raison quelconque.
je suis assez confiant que le classeur excel et feuilles d'exister et sont appelés correctement, puisque j'ai couru un morceau rapide de code pour boucler toutes les feuilles dans le cahier de travail et la sortie les noms, montrés ci-dessous.
For j = 1 To sourceBook.Sheets.Count
Debug.Print (Sheets(j).name)
Next j
Avec la sortie de débogage de
Mesures
Résumé De L'Analyse
Paramètres D'Analyse
Donc, quelqu'un a une idée de ce que cette erreur pourrait signifier, ou comment je peux peut-être trouver plus sur ce que l'erreur en fait est?
modifier: Donc j'ai décidé d'ajouter un peu à la liste des noms de feuille, Pas sûr si cela aidera du tout.
For j = 1 To sourceBook.Sheets.Count
listSheet(j) = Sheets(j).name
Next j
Debug.Print (listSheet(2))
Set sourceSheetSum = sourceBook.Sheets(listSheet(2))
le résumé d'analyse de débogage imprime, donc je sais que la feuille existe dans le classeur, et il ne devrait pas y avoir de problèmes avec une 'typo' dans les noms.
Le code a toujours la même erreur au même ligne.
deusxmach1na: je pense que tu voulais me changer
Dim sourceXL As Variant
Dim sourceBook As Variant
Dim sourceSheet As Variant
Dim sourceSheetSum As Variant
Set sourceSheet = sourceBook.Sheets("Measurements")
Dim sourceXL As Excel.Application
Dim sourceBook As Excel.Workbook
Dim sourceSheet As Worksheet
Dim sourceSheetSum As Worksheet
Set sourceSheet = sourceBook.Worksheets("Measurements")
mais cela ne change pas l'erreur, je me souviens que je l'ai eu semblable à cela, et puis l'a changé puisque j'ai lu que la variante est comme une prise tout, pas réellement que solide sur ce que la variante est.
4 réponses
Vous devez sélectionner la feuille avant de vous pouvez sélectionner la plage.
j'ai simplifié l'exemple d'isoler le problème. Essayez ceci:
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
remplacez Sheet1 et Sheet2 par vos noms de feuille.
NOTE IMPORTANTE: L'utilisation de variantes est dangereuse et peut conduire à des bugs difficiles à tuer. Utiliser seulement si vous avez une très bonne raison de le faire.
Vous ne pouvez pas sélectionner une plage sans avoir au préalable sélectionné la feuille. Essayez de sélectionner la feuille d'abord et voir si vous obtenez toujours le problème:
sourceSheetSum.Select
sourceSheetSum.Range("C3").Select
assylias et le chef de la restauration ont déjà donné à votre la raison pour laquelle l'erreur se produit.
Select toutje suppose que vous faites cela de VBA PowerPoint? Si oui, alors votre code sera réécrit comme
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)
suppression de la portée sélectionnez avant que la copie ne fonctionne pour moi. Merci pour les messages.