web-dev-qa-db-fra.com

Erreur d'indicateur hors limites dans ce script Excel VBA

Je voudrais copier les données d'un fichier CSV dans une feuille de calcul Excel. Il y a 11 fichiers .csv. Jusqu'ici j'ai ceci (c'est une version modifiée d'un post précédent):

Sub importData()   
  Dim filenum(0 To 10) As Long
  filenum(0) = 052
  filenum(1) = 060
  filenum(2) = 064
  filenum(3) = 068
  filenum(4) = 070
  filenum(5) = 072
  filenum(6) = 074
  filenum(7) = 076
  filenum(8) = 178
  filenum(9) = 180
  filenum(10) = 182

  Dim sh1 As Worksheet
  On Error GoTo my_handler

  For lngPosition = LBound(filenum) To UBound(filenum)
    'Windows(filenum(lngPosition) & ".csv").Activate
    Workbooks.Add(filenum(lngPosition) & ".csv").Activate
Range("A1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy
    Windows("30_graphs_w_Macro.xlsm").Activate
    Set sh1 = Worksheets(filenum(lngPosition)).Activate
    Range("A69").Paste
    Range("A69").Select

  Next lngPositionlngPositionlngPosition

my_handler:
  MsgBox "All done."
  Exit Sub
End Sub

Ce code me donne une erreur en dehors de la plage en indice sur la ligne: 

Set sh1 = Worksheets(filenum(lngPosition)).Activate
2
user2883071

Définissez sh1 = Worksheets (filenum (lngPosition)). Activer

Vous obtenez une erreur Subscript out of range error car il ne peut pas trouver cette feuille de travail.

Veuillez également ... veuillez ... ne pas utiliser svp .Select/.Activate/Selection/ActiveCell Vous voudrez peut-être voir Comment éviter d'utiliser Select in Excel VBA Macros .

3
Siddharth Rout

Cela semble un peu mieux que votre version précédente, mais débarrassez-vous de cela. Activez cette ligne et voyez si vous obtenez toujours cette erreur.

Dim sh1 As Worksheet
set sh1 = Workbooks.Add(filenum(lngPosition) & ".csv")

Crée un objet de feuille de calcul. Ce n'est que lorsque vous créez cet objet que vous souhaitez commencer à l'utiliser. Une fois que vous avez cet objet, vous pouvez effectuer les opérations suivantes:

sh1.Range("A69").Paste
sh1.Range("A69").Select

Le sh1. indique explicitement à Excel avec lequel vous souhaitez travailler ... sinon, si vous commencez à sélectionner d'autres feuilles de calcul pendant l'exécution de ce code, vous risquez de coller des données au mauvais endroit.

0
DanK