Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Match Funktion spinnt (?)


Betrifft: Match Funktion spinnt (?) von: Simon
Geschrieben am: 28.09.2019 17:35:06

Hallo ihr,

ich bin mal wieder mit meinem Latein am Ende, denn Excel scheint schon wieder zu tun was es will...

Folgendes Problem:

Ich habe eine Tagesübersicht, die mir aus einer Urlaubsdatei (Mit den Sheets Januar-Dezember) den Urlaub auslesen soll. Hierzu kann man in eine Textbox das Datum einfügen, VBA sucht dann den Match mit dem Datum, geht in der Spalte runter und sucht dann Eintragungen.

Soweit, sogut. Jetzt das komische/verrückte. Der Code hängt sich manchmal auf und ich war am verzweifeln warum. Nach viel Trial and Error scheint es so, dass es daran hängt wie man die Urlaubsdatei speichert. Wenn das letzte offene Blatt Oktober ist, geht z.b. keine Abfrage für September und ich hab ehrlich keine Ahnung warum, denn laut Code müsste er alle durchforsten:

D
im i As Long
  Dim a As Variant
   For i = 1 To 12
    a = Application.Match(CLng(DateValue(TextBox1)), Workbooks(wkbName).Worksheets(i).Rows(2),  _
0)
      If IsNumeric(a) Then
Ich habe auch schon versucht über das Datum nur den Monat auszulesen und dann "i" diesem Wert zuzuweisen, aber das Ergebnis ist das gleiche. Immer wenn man die Urlaubsdatei speichert und dabei das letzte Sheet als Ansicht da ist, gehen einige Monate nicht.

Vielleicht habt ihr eine Idee!

LG und Dank euch!

  

Betrifft: AW: Match Funktion spinnt (?) von: MatthiasG
Geschrieben am: 28.09.2019 19:09:48

Hallo Simon,

ohne dass ich jetzt ins Detail eingestigen bin:
Hast du schon WorksheetFunction.Match() ausprobiert?

Gruß Matthias


  

Betrifft: AW: Match Funktion spinnt (?) von: onur
Geschrieben am: 28.09.2019 19:59:27

poste mal die Dateien.


  

Betrifft: AW: Match Funktion spinnt (?) von: Simon
Geschrieben am: 29.09.2019 00:37:12

Hallo ihr zwei,

@ Matthias: Nein mit der habe ich leider keine Erfahrung. Aber diese gibt mir dich nur wieder wo im Array sich der Treffer befindet oder? In meinem Fall brauche ich ja aber eine konkrete Zelle als Rückmeldung. Aber wie gesagt, falls ich das falsch verstanden habe, bitte verzeih mir!

@onur: Ich kann zumindest die Urlaubsdatei posten, wenn dir das hilft? Das Problem ist, dass in der anderen Datei einige Internas enthalten sind. Die kann ich zwar versuchen zu entfernen, aber das kann etwas dauern!

Liebe Grüße und vielen Dank euch beiden schon mal!

Einen Grund warum das je nach Speicherzustand der Urlaubsdatei funktioniert oder nicht könnt ihr euch aber auch nicht erklären oder?


  

Betrifft: AW: Match Funktion spinnt (?) von: Daniel
Geschrieben am: 29.09.2019 00:51:50

ne, da müsste man schon die Datei sehen
Sind alle Blätter für die Monate vorhanden und in Reihenfolge?
Gibt es in der Datei noch mehr Blätter als die Monatsblätter?
Stehen die Datumswerte korrekt wie benötigt in den Zellen?
Da du für jeden Monat ein eigenes Blatt hast, würde ich beispielsweise in die Spaltenüberschriften kein Datum mehr schreiben, sondern nur noch 1-31 für die Tage.

ich würde mich fragen, warum hier überhaupt mit Application.Match über alle Tabellenblätter gehen?
das Blatt sollte sich aus dem Datum direkt berechnen lassen.
die Spaltennummer sollte sich aus dem Tag direkt berechnen lassen, wenn in den Monatsblättern jeder Tag einmal aufgeführt wird, für jeden Tag die gleiche Anzahl an Spalten verwendet wird und die Tage aufsteigend sortiert sind (das ist aber in 99% aller Kalender der Fall)
Gruß Daniel


  

Betrifft: AW: Match Funktion spinnt (?) von: Simon
Geschrieben am: 29.09.2019 11:50:33

Hallo Daniel,

es kann natürlich so einfach sein....Danke für den Gedankenanstoß. Ich habe mich so auf einen Code verrannt, dass ich gar nicht daran gedacht habe, dass ich die Zelle ja direkt zuweisen kann.

Das Problem ist zumindest schon mal gelöst.

Dafür ist ein neues aufgetreten:

Kurze Erklärung zum nachfolgenden Code:

Er durchsucht jetzt anhand der Zieldatumszelle ("m" bei Sheets ist der richtige Monat, "t" ist der Tag +1, weil das Datum bei A2 beginnt und bis AF2 aufhört) die Spalte runter nach dem Urlaubskürzel "u". Bei Fund nimmt er den Wert der Zelle in Spalte 1 aus der Ergebnisreihe, denn da steht der Name und trägt ihn in die Tagesübersicht ein. Dann sollte er eigentlich weitersuchen, was er bisher auch gemacht hat :/

  
 For d = 1 To 41
   Set Ergebnis = Workbooks(wkbName).Sheets(m).Columns(t + 1).Find("u", Lookat:=xlWhole)
   If Not Ergebnis Is Nothing Then
    ErstesErgebnis = Ergebnis.Address
   Do
     Set Urlaub = Workbooks(wkbName).Sheets(m).Cells(Ergebnis.Row, 1)
   With Tabelle1
         Z = 3
nochmalUrlaub:
            If .Cells(58, Z) = "" Then
                .Cells(58, Z) = Urlaub.Value
                
                Else
                 Z = Z + 1
                 GoTo nochmalUrlaub
            End If
        
    End With
    
    Set Ergebnis = Cells(2, t + 1).EntireColumn.FindNext(Ergebnis)

    Loop While ErstesErgebnis <> Ergebnis.Address
            Exit For
        End If
    Next 
d
Den ersten Namen findet er auch, trägt ihn ein, aber dann bricht er ab.
Bisher ging die Loopschleife einwandfrei, jetzt spuckt er mir im letzen Teil
    Loop While ErstesErgebnis <> Ergebnis.Address
plötzlich Laufzeitfehler 91 aus.
Ich habe Ergebnis übringens als Range definiert.

Vielleicht sieht einer von euch auf einen Blick wo es bei mir hängt :/


Danke euch allen schon mal!


  

Betrifft: AW: Match Funktion spinnt (?) von: Daniel
Geschrieben am: 29.09.2019 12:39:45

Zellbezüge (Range, Cells, Columns, Rows) ohne worksheetangabe davor beziehen sich immer auf das gerade aktive Tabellenblatt in der gerade aktiven Datei.
Überprüfe mal deinen Code diesbezühlich.

Der Fehler kommt, weil bei dir in der FindNext-Funktion der Durchsuchte Bereich und Startzelle der Suche (Parameter After) auf unterschiedlichen Blättern in unterschiedlichen Dateien liegen.

Gruß Daniel


  

Betrifft: AW: Match Funktion spinnt (?) von: Simon
Geschrieben am: 29.09.2019 13:29:18

Klappt, danke ihr seid die besten!


Beiträge aus dem Excel-Forum zum Thema "Match Funktion spinnt (?)"