Problem mit S-Verweis
01.02.2014 16:46:43
Maiwe2106
Ich habe ein Problem mit meinem VBA SVerweis und bin im Forum leider nicht fündig geworden.
Die Formel für den SVerweis wird richtig eingefügt, jedoch findet er den Wert nicht.
Zunächst der Quellcode:
[\code]
'Es werden die Zeiten des Ofenstillstands in das Tabellenblatt "Ofenstillstand" aufgenommen
Sheets("Ofenstillstand").Activate
'Es werden die alten Inhalte gelöscht und die Tabellenköpfe neu geschrieben
ActiveSheet.UsedRange.Clear
Range("A1").Value = "Zeit"
Range("B1").Value = "Beginn?"
Range("C1").Value = "Ende?"
Range("D1").Value = "Ofenstilltand wegen Störung?"
Range("F1").Value = "Startzeit:"
Range("G1").NumberFormat = "d/m/yy h:mm;@"
Range("H1").Value = "Endzeit:"
Range("I1").NumberFormat = "d/m/yy h:mm;@"
'Es wird die Start- und Endzeit eingefügt
Range("G1").FormulaR1C1 = "=DG_ErgWfs_aufbereitet!R[1]C"
Range("I1").FormulaR1C1 = _
"=DG_ErgWfs_aufbereitet!R[" + Format(letzteZeile_DG_ErgWfs_aufbereitet_Filter - 1) + "]C[-1]"
'Es wird errechnet bis zur wievielten Zeile die Formeln eingefügt werden müssen
Dim anzahl_z As Long 'anzahl der Minuten im Betrachtungsbereich
anzahl_z = ((Range("I1") - Range("G1")) * 24 * 60)
'Einfügen aller Zeiten (minütlicher Abstand) und Formatieren
Dim lauf1 As Date 'Laufvariable die mintülich hochzählt
lauf1 = Range("G1")
Range("A2").Value = lauf1
Range("A3").Value = lauf1 + "00:01:00"
Range("A2:A3").AutoFill Destination:=Range(Cells(2, 1), Cells(anzahl_z + 10, 1)), Type:=xlFillSeries
Range("A:A").NumberFormat = "d/m/yy h:mm;@"
'Einfügen der Formeln, um festzustellen, ob ein Zeitpunkt ein Störbeginn oder ein Störende ist
'Es wird zum letzten Zeitpunkt "WAHR" für einen Störbeginn eingetragen, da die Schleife sonst mit einem Fehler beendet wird
'Das hat keinerlei Auswirkungen auf die Berechnung
Dim letzteZeile_Ofenstillstand As Long
letzteZeile_Ofenstillstand = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row
Range(Cells(2, 2), Cells(letzteZeile_Ofenstillstand, 2)).FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-1],DG_ErgWfs_aufbereitet!C[5],1,FALSE))=TRUE,"""",TRUE)"
Range(Cells(2, 3), Cells(letzteZeile_Ofenstillstand, 3)).FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-2],DG_ErgWfs_aufbereitet!C[5],1,FALSE))=TRUE,"""",TRUE)"
Cells(letzteZeile_Ofenstillstand, 2).Value = True
'Es wird geprüft, wann eine Störung beginnt bzw. endet und ein entsprechender Wert in Spalte "liegt Störung vor?" geschrieben
Range("B2").Activate
'Errechnen der Anzahl der Störungen aus Zeilenanzahl in "Störbericht_aufbereitet"
Dim Anz_Störungen As Long
Anz_Störungen = letzteZeile_DG_ErgWfs_aufbereitet_Filter - 1
Dim lauf2 As Long 'Laufvariable für die Schleife
Dim zeilenindex_SpalteA As Long
Dim zeilenindex_SpalteB As Long
For lauf2 = 1 To Anz_Störungen
zeilenindex_SpalteA = ActiveCell.Row
Range(Cells(zeilenindex_SpalteA, 3), Cells(letzteZeile_Ofenstillstand, 3)).Select
Selection.Find(True, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _
SearchFormat:=False).Activate
zeilenindex_SpalteB = ActiveCell.Row
Range(Cells(zeilenindex_SpalteA, 4), Cells(zeilenindex_SpalteB, 4)).Value = True
Range(Cells(zeilenindex_SpalteB - 1, 2), Cells(letzteZeile_Ofenstillstand, 2)).Select
Selection.Find(True, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
Next lauf2
[\code]
Nun zur Erklärung:
- in der Tabelle wird fortlaufend die Zeit im minütlichen Abstand (ausgehend von einem Startwert) in die erste Spalte geschrieben
- Dieser Startwert wird aus dem Tabellenblatt "DG_ErgWfs_aufbereitet" entnommen
- jetzt soll mit einem Konstrukt aus Wenn, Istfehler und SVerweis der Wert "Wahr" in die Spalte B geschrieben werden, insofern der Wert in dem Tabellenblatt gefunden wurde
- Leider gibt mir der SVerweis kein korrektes Ergebnis
- Erst sobald ich einen Suchwert markiere, in das Bearbeigungsfeld klicke und den Wert noch mal manuell mit Enter bestätige, funktioniert der S-Verweis
- Ich habe das Vorgehen mal mit einem Makro-Rekorder aufgezeichnet und er gibt mir:
ActiveCell.FormulaR1C1 = "1/6/2014 7:20"
Range("A29").Select
Vielleicht könnt ihr mir ja weiter helfen.
Vielen Dank