2017-04-26 2 views
-1

Ich habe ein Mastersheet, das die Daten (von jedem Freitag) in einer Combobox enthält. In einem separaten Blatt (s) habe ich alle Termine in Zeilen angeordnet. Ich möchte, dass mein Mastersheet das Datum aus den Subsheets liest und den gesamten Inhalt für die passende Zeile kopiert. Derzeit habe ich versucht, das Systemdatum mit der Datumsspalte in den Subsheets abzugleichen. Aber das Problem ist, dass ich das Programm an keinem anderen Tag als Freitag laufen lassen kann. Ich möchte also die Option aus der Combobox auswählen und dann die Daten aus den Subsheets kopieren.Wie übertrage ich Daten von der Combobox zur Befehlsschaltfläche in Excel VBA?

Private Sub ComboBox1_Change() 
    With ComboBox1 
    .AddItem "Select Date" 
    .AddItem "21-Apr-17" 
    .AddItem "28-Apr-17" 
    .AddItem "5-May-17" 
    .AddItem "12-May-17" 
    .AddItem "19-May-17" 
    End With 
End Sub 

(Inhalt der Abgleichs Taste)

For Each studentID In master.Range("B4:B" & lr) 
    StrFile = Dir(path & "timeuti*" & studentID.Value & "*.xls*") 
    If Len(StrFile) > 0 Then 
    Set wbtime = Workbooks.Open(path & StrFile, , 1) 
    Set wstime = wbtime.Worksheets("Sheet1") 
    With wstime 
     Set finddate = .Range("A4", .Range("A4").End(xlDown)).Find(Date, lookat:=xlWhole) 
     If Not finddate Is Nothing Then 
      finddate.Offset(, 1).Resize(, 21).Copy studentID.Offset(, 1) 
     End If 
    End With 
    wbtime.Close 0 
End If 

Stammblatt: Mastersheet Subsheets: Subsheets

Auch ist es trotzdem, wo alle Inhalte der Combobox angezeigt werden, wenn das Stammblatt zu öffnen? Jedes Mal, wenn ich mich öffne, bekomme ich nur die Option zum Auswählen des Datums in der Combobox!

+0

Könnten Sie bitte etwas mehr erklären, was Sie kopieren und wo es einfügen möchten? In deiner Frage ist nicht klar genug was du machen willst. Es fühlt sich an, als ob Informationen fehlen. – Blenikos

+0

Ich habe eine Masterdatei, die die Makros ausführt. Ich erhalte ca. 50 Subdateien von meinen Freunden. Ich möchte, dass die Details aus den Subdateien in die Masterdatei kopiert werden. Die Masterdatei enthält eine Combobox mit allen Daten von Freitag. Die Subdateien, die ich von meinen Freunden erhalte, haben eine Spalte mit Terminen für Freitage. Was ich will ist, wenn ein Datum in der Masterfile-Combobox ausgewählt ist, sollte das Makro in alle Subdateien schauen und wenn das Datum übereinstimmt, sollte die gesamte Zeile in das Masterfile basierend auf der ID des Freundes kopiert werden. –

+0

Ok. Es ist jetzt klarer. Es stimmt jedoch nicht mit der Beschreibung in Ihrer Frage überein. Bitte bearbeite und repariere deine Frage! Fügen Sie auch hinzu, wo Ihr Problem in dem Code liegt, den Sie uns gegeben haben (Um ehrlich zu sein, sieht Ihr Code für mich in Ordnung aus). – Blenikos

Antwort

0

Sie müssen die Date-Funktion in der Suchfunktion durch den Wert der Combobox ersetzen.

Sie haben die Linie ändern

Set finddate = .Range("A4", .Range("A4").End(xlDown)).Find(Date, lookat:=xlWhole) 

und einige Änderungen im Code machen:

Dim selected_date as String 'A new variable to store your combobox selection 

'Store the selection so you don't have to check for every workbook you open 
selected_date = ActiveWorkbook.Worksheets(1).ComboBox1.Value 'Change the number to the sheet your combobox is 

    For Each studentID In master.Range("B4:B" & lr) 
     StrFile = Dir(path & "timeuti*" & studentID.Value & "*.xls*") 

     If Len(StrFile) > 0 Then 
     Set wbtime = Workbooks.Open(path & StrFile, , 1) 
     Set wstime = wbtime.Worksheets("Sheet1") 

     With wstime 

      'Add here your variable instead of Date 
      Set finddate = .Range("A4", .Range("A4").End(xlDown)). _ 
      Find(selected_date, lookat:=xlWhole) 

      If Not finddate Is Nothing Then 
       finddate.Offset(, 1).Resize(, 21).Copy studentID.Offset(, 1) 
      End If 
     End With 
     wbtime.Close 0 
     End If 

Wenn die Auswahl in der Combobox im gleichen Format wie die Datumsangaben in der Zelle von der ist andere Arbeitsmappen, die Sie öffnen und verwenden, finden Sie auf ihnen, dann sollte es funktionieren. Ansonsten überprüfe, ob sie das gleiche Format haben!

Wenn eines im Datumsformat ist und weil das andere ein String ist, müssen Sie das Format des Datums in einen String ändern, damit dies funktioniert.

+0

Ich erhalte hier einen Fehler: selected_date = Activeworkbook.ComboBox1.Value besagt, dass Objekt diese Eigenschaft oder Methode nicht unterstützt. –

+0

'Application.ScreenUpdating = False selected_date = ActiveWorkbook.ComboBox1.Value Legen Sie Master = ThisWorkbook.Sheets (" Sheet1 ") lr = Master.Bereich ("B4"). Ende (xlDown) .Row Pfad = ThisWorkbook.path & "\" 'Dies sind die restlichen Inhalte meines Codes vor für Schleife –

+0

Für den Fehler, meine schlechte, habe ich es jetzt behoben . Bitte überprüfe es nocheinmal. Fügen Sie auch den Rest Ihres Codes vor der for-Schleife in Ihre Frage ein !!! Es ist wirklich schwierig, Code in den Kommentaren zu lesen. – Blenikos

Verwandte Themen