Première affiche, donc s'il y a une mise en forme ou des directives que je n'ai pas respectées, merci de me le faire savoir afin que je puisse la corriger.
Je demande donc fondamentalement à l'utilisateur le répertoire de fichiers du fichier Excel, puis je configure certaines variables (définies à l'origine comme variables de projet, car elles étaient utilisées et modifiées à d'autres endroits). J'ai également ajouté les lignes pour définir ces variables sur rien (juste au cas où, je ne pense pas que cela devrait avoir de l'importance). J'ai ensuite défini ces variables dans le fichier Excel, le classeur et les feuilles auxquelles je souhaite 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
J'ai donc 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 aussi essayé le code avec la variable 'sourceSheet' complètement supprimée, au cas où cela remplacerait 'sourceSheetSum' pour une raison quelconque.
Je suis assez convaincu que le classeur Excel et les feuilles existent et sont appelés correctement, car j'ai exécuté un petit morceau de code pour parcourir toutes les feuilles du classeur et générer les noms, comme indiqué ci-dessous.
For j = 1 To sourceBook.Sheets.Count
Debug.Print (Sheets(j).name)
Next j
Avec la sortie de débogage de
Des mesures
Résumé d'analyse
Paramètres d'analyse
Alors, est-ce que quelqu'un a une idée de ce que cette erreur pourrait signifier, ou de la façon dont je pourrais éventuellement en apprendre davantage sur son erreur réelle?
EDIT: J’ai donc décidé d’ajouter un peu à la liste des noms de feuilles, ne sachant pas si cela aiderait 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 débogage imprime le résumé de l'analyse. Je sais donc que la feuille existe dans le classeur et qu'il ne devrait pas y avoir de problème de "faute de frappe" dans les noms.
Le code a toujours la même erreur à la même ligne cependant.
deusxmach1na: Je pense que tu voulais que je change
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'avais similaire à celle-là, puis que je l'ai changée depuis que j'ai lu cette variante est comme une fourre-tout, pas vraiment si solide sur quelle variante est.
Vous devez sélectionner la feuille avant de pouvoir sélectionner la plage.
J'ai simplifié l'exemple pour isoler le problème. Essaye ça:
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.
REMARQUE IMPORTANTE: L'utilisation de variantes est dangereuse et peut entraîner des bugs difficiles à éliminer. Utilisez-les uniquement si vous avez une raison très spécifique pour le faire.
Vous ne pouvez pas sélectionner une plage sans avoir au préalable sélectionné la feuille dans laquelle elle se trouve. Essayez de sélectionner d'abord la feuille et voyez si le problème persiste:
sourceSheetSum.Select
sourceSheetSum.Range("C3").Select
assylias et le chef de la restauration ont déjà expliqué pourquoi l’erreur se produisait.
Maintenant, en ce qui concerne ce que vous faites, d'après ce que je comprends, vous n'avez pas du tout besoin d'utiliser Select
Je suppose que vous faites cela à partir de VBA PowerPoint? Si oui, 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)
Supprimer la plage, sélectionnez avant que la copie ne fonctionne pour moi Merci pour les messages.