2011-01-14 4 views
2

Mon problème est que j'ai besoin d'ouvrir des fichiers Excel en utilisant VBA (pour Excel 2007) et extraire les données. Tous les fichiers que je veux ouvrir sont appelés "profit for January.xlsx", "profit for February.xlsx", et ainsi de suite avec seulement le changement de nom du mois, donc je pense que je veux ouvrir un fichier appelé "profit for *" . Il y a un autre fichier dans le dossier appelé "total revenue.xlsx" que je ne veux pas ouvrir.Comment ouvrir certains dossiers Excel dans un fichier avec un nom commun en utilisant vba

Si possible, j'ai besoin du code pour extraire les données des fichiers dans le dossier, quel que soit le dossier car j'envoie ce code à mes collègues pour les mettre dans leurs propres dossiers, qui ont les mêmes formats etc, mais des chemins différents.

J'ai le code pour extraire les données, qui fonctionne, mais il importe toutes les données dans le dossier ou pas du tout!

Toute aide sur ce serait très apprécié car je suis un stagiaire qui essaie de mettre le pied dans la porte, et ce serait une grosse pause pour moi!

Informations complémentaires

Jusqu'à présent, j'ai le code ci-dessous (je ne l'ai pas compris les années sombres parce que je sentais qu'ils peuvent être inutiles?), Que j'ai tiré d'autres sites Web. Je trouve également que, en essayant d'ouvrir tous les fichiers dans le dossier, il essaie de s'ouvrir lui-même! Si quelqu'un pouvait suggérer comment améliorer cela, je serais très reconnaissant. Je n'utilise pas VBA depuis très longtemps, et j'ai trouvé cette tâche assez difficile! La case d'erreur qui s'affiche parfois dit que j'ai besoin d'un 'objet' pour la variable sfilename, et je ne suis pas sûr de savoir comment faire cela sans endommager une autre partie du code.

sub import data() 

ChDir ThisWorkbook.Path 

    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set sfolder = objFSO.GetFolder(ThisWorkbook.Path) 

    For Each sfilename In sfolder.Files 

     If sfilename <> "Total Revenue.xlsx" Then 

      Workbooks.Open Filename:= _ 
       sfilename        *'open the file* 

      Set sfilename = ActiveWorkbook *'set the file name as sfilename, so the single piece of code will work with the copy-loop* 

      b = Sheets.Count        *'for the data-import loop* 

      Call ImportData         *'call in the loop* 
      sfilename.Close         *'close the file* 

     End If 

    Next 

end sub 

Répondre

0

Qu'est-ce que vous utilisez en ce moment? Pour chaque fichier dans le dossier?

Les possibilités incluent

  • FileSystemObject
  • Dir
  • Pour i = 1 à 12
    MONTHNAME (i)

EDIT

Sub import_data() 

    sPath = ThisWorkbook.Path 
    sTemplate = "\profit for qqq.xls" 

    For i = 1 To 12 
     sFileName = Replace(sTemplate, "qqq", MonthName(i)) 

     ''Just checking 
     If Dir(sPath & sFileName) <> "" Then 
      Workbooks.Open Filename:= _ 
       sPath & sFileName 
       'open the file* 

      Set sFileName = ActiveWorkbook 
      'set the file name as sfilename, so the single 
      'piece of code will work with the copy-loop* 

      b = Sheets.Count 
      '*'for the data-import loop* 

      ''Call ImportData 
      '*'call in the loop* 
      sFileName.Close 
      '*'close the file* 
     End If 
    Next 

End Sub 
0

Alors fa J'ai le code ci-dessous (je n'ai pas inclus les dims parce que je sentais qu'ils peuvent être inutiles?), que j'ai tirés d'autres sites. Je trouve également que, en essayant d'ouvrir tous les fichiers dans le dossier, il essaie de s'ouvrir lui-même! Si quelqu'un pouvait suggérer comment améliorer cela, je serais très reconnaissant. Je n'utilise pas VBA depuis très longtemps, et j'ai trouvé cette tâche assez difficile! La case d'erreur qui s'affiche parfois dit que j'ai besoin d'un 'objet' pour la variable sfilename, et je ne suis pas sûr de savoir comment faire cela sans endommager une autre partie du code.

Un grand merci et Sincères salutations, Mark

données sous d'importation()

ChDir ThisWorkbook.Chemin

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set sfolder = objFSO.GetFolder(ThisWorkbook.Path) 

For Each sfilename In sfolder.Files 

    If sfilename <> "Total Revenue.xlsx" Then 

     Workbooks.Open Filename:= _ 
      sfilename        *'open the file* 

     Set sfilename = ActiveWorkbook *'set the file name as sfilename, so the single piece of code will work with the copy-loop* 

     b = Sheets.Count        *'for the data-import loop* 

     Call ImportData         *'call in the loop* 
     sfilename.Close         *'close the file* 

    End If 

Next 

end sub

+0

Salut Mark En SO, cette zone est réservée aux réponses. Je vais modifier votre message pour inclure cette section et vous pouvez demander que cela soit supprimé. D'accord? :) – Fionnuala

+0

J'ai ajouté quelques notes à ma réponse. – Fionnuala

Questions connexes