2011-01-14 8 views
2

Mein Problem ist, dass ich einige Excel-Dateien mit VBA (für Excel 2007) öffnen und die Daten extrahieren muss. Alle Dateien, die ich öffnen möchte, heißen "Gewinn für Januar.xlsx", "Gewinn für Februar.xlsx" und so weiter, nur der Monatsname ändert sich, also denke ich, dass ich eine Datei mit dem Namen "Gewinn für *" öffnen möchte. . Es gibt eine andere Datei im Ordner "total revenue.xlsx", die ich nicht öffnen möchte.Wie öffne ich bestimmte Excel-Ordner in einer Datei mit einem gemeinsamen Namen mit vba

Wenn möglich, brauche ich den Code, um die Daten aus den Dateien im Ordner zu extrahieren, wo auch immer der Ordner sein mag, weil ich diesen Code an meine Kollegen sende, um sie in ihren eigenen Ordnern zu speichern, die die gleichen Dateinamenformate haben usw. aber verschiedene Wege.

Ich habe den Code, um die Daten zu extrahieren, die funktioniert, aber es importiert entweder alle Daten im Ordner oder gar keine!

Jede Hilfe hier wäre sehr geschätzt, da ich ein Praktikant versuche, seinen Fuß in die Tür zu bekommen, und das wäre eine ziemlich große Pause für mich!

Weitere Informationen

Bisher habe ich den Code unten (Ich habe nicht die dim ist enthalten, weil ich fühlte sie unnötig sein?), Die ich von anderen Websites gezogen haben. Ich finde auch, dass beim Versuch, alle Dateien in dem Ordner zu öffnen, es sich öffnet! Wenn jemand vorschlagen könnte, dies zu verbessern, wäre ich sehr dankbar. Ich habe VBA schon lange nicht mehr benutzt und finde diese Aufgabe ziemlich schwierig!

Das Fehlerfeld, das auftaucht, sagt manchmal, dass ich ein 'Objekt' für die Variable sfilename benötige, und ich bin nicht sicher, wie man das macht, ohne einen anderen Teil des Codes zu vermasseln.

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 

Antwort

0

Was verwenden Sie im Moment? Für jede Datei im Ordner?

Möglichkeiten umfassen

  • Filesystem
  • Dir
  • Für i = 1 bis 12
    MONTH (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

So fa r Ich habe den Code unten (ich habe die Dims nicht aufgenommen, weil ich dachte, sie könnten unnötig sein?), die ich von anderen Websites gezogen habe. Ich finde auch, dass beim Versuch, alle Dateien in dem Ordner zu öffnen, es sich öffnet! Wenn jemand vorschlagen könnte, dies zu verbessern, wäre ich sehr dankbar. Ich habe VBA schon lange nicht mehr benutzt und finde diese Aufgabe ziemlich schwierig!

Das Fehlerfeld, das auftaucht, sagt manchmal, dass ich ein 'Objekt' für die Variable sfilename benötige, und ich bin nicht sicher, wie man das macht, ohne einen anderen Teil des Codes zu vermasseln.

Vielen Dank und freundlichen Grüßen, Mark

Unterimportdaten()

ChDir Thisworkbook.Pfad

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

Hallo Mark In SO, ist dieser Bereich für Antworten reserviert ist. Ich werde Ihren Beitrag bearbeiten, um diesen Abschnitt einzuschließen, und Sie können anfordern, dass dieser gelöscht wird. Okay? :) – Fionnuala

+0

Ich habe ein paar Anmerkungen zu meiner Antwort hinzugefügt. – Fionnuala

Verwandte Themen