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.

17
demandé sur Community 2012-06-08 17:34:07

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.

24
répondu Jon Crowell 2012-06-08 16:12:53

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
8
répondu assylias 2012-06-08 16:13:06

assylias et le chef de la restauration ont déjà donné à votre la raison pour laquelle l'erreur se produit.

Select tout

je 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)
3
répondu Siddharth Rout 2012-06-08 17:23:49

suppression de la portée sélectionnez avant que la copie ne fonctionne pour moi. Merci pour les messages.

0
répondu Pete 2014-11-20 15:58:34