Registriert seit: 16.04.2014
Hallo Forumsfreunde,
ich stehe gerade mal wieder auf dem Schlauch.
In einer VBA-Schleife lasse ich mir von einer Mappe in eine andere Mappe Werte eintragen.
Mit
SW = WorksheetFunction.VLookup(wert, Range("A:Z"), 9, 0)
klappt das auch einwandfrei.
nun bin ich auf dem Weg der Verbesserung des Codes und habe einen "Wert" geändert, sodass er nicht mehr mit dem Wert der anderen Mappe übereinstimmt.
Folge: Der Code blockiert bei SW (SW wird als leer im Code angezeigt) müsste aber #NV sein.
In diesem Falle sollte nur die Zelle rot werden. Wie fange ich nun am besten dieses blöde #NV ab.
Vielen Dank für eure Hilfe
Es ist nicht genug, zu wissen. Man muss es auch anwenden. Es ist nicht genug, zu wollen. Man muss es auch tun.
Registriert seit: 16.08.2020
Version(en): 2019 64bit
19.08.2022, 09:50
(Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2022, 09:52 von Egon12.)
sorry falsch gedacht.
Registriert seit: 11.04.2014
Version(en): Office 365
Hallo Heinz,
magst du mal deinen aktuellen Stand hochladen? Dann braucht man das nicht nachbauen, in der Zeit kann man schon einen Lösungsvorschlag entwickeln.
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Registriert seit: 16.04.2014
Hallo Klaus-Dieter.
kann ich machen: Hier der Code bisher:
Sub werteHolen()
Dim Wb As Workbook, i As Integer Dim vntAndereMappennamen() As Variant Dim Alt As String Dim Neu As String
'Festlegen des Namens des ST smartsheets Neu = ThisWorkbook.Name
' Überprüfen der Anzahl der offenen Arbeitsmappen Anzahl = Workbooks.Count 'Überprüfen ob nur 1 oder mehr als 2 Smartsheets offen sind If Workbooks.Count = 1 Then MsgBox "Keine andere Mappe offen!": Exit Sub
If Workbooks.Count > 2 Then MsgBox "Bitte alle Mappen bis auf die 2 Smartsheets schließen" Exit Sub End If
ReDim vntAndereMappennamen(1 To Workbooks.Count - 1)
'feststellen des anderen Smartscheetsnamen und in die K10 des Pricescheets schreiben Range("K10").Value = "" For Each Wb In Workbooks Alt = Wb.Name If Wb.Name <> Neu Then Range("K10").Value = Alt End If Next Wb Alt = Range("K10").Value ' Prüfen der Version Windows(Alt).Activate VersionAlt = Worksheets("coversheet").Range("H23").Value DatumAlt = DateValue(Right(VersionAlt, 10)) Windows(Neu).Activate Versionneu = Worksheets("coversheet").Range("H23").Value DatumNeu = DateValue(Right(Versionneu, 10)) If DatumNeu < DatumAlt Then MsgBox ("Falsche Mappe soll bearbeitet werden") Exit Sub End If Windows(Alt).Activate 'Bestimmen der Menge der Einträge auf dem Pricesheet 'in Spalte K für die Schleife des Sverweises.
Sheets("pricesheet").Select k = Cells(Rows.Count, 1).End(xlUp).Row
'Schleife zum Holen der neuen Preise For i = 15 To 21 'k wert = Range("A" & i + 1).Value Windows(Neu).Activate, WertNeu = Range("A" & i + 1).Value Worksheets("Pricesheet").Select
'Abfangen eines nicht vorhandenen Entrags If wert = WertNeu Then 'Hier habe ich mir mal den alten Wert und den Vergleichswert geholt, wenn die gleich sind Sverweis, sonst Färben, das Klappt so 'SVERWEIS für den neuen Preis SW = WorksheetFunction.VLookup(wert, Range("A:Z"), 9, 0) Windows(Alt).Activate Sheets("pricesheet").Select Range("I" & i + 1).Value = SW Else Windows(Alt).Activate Sheets("pricesheet").Select Range("I" & i + 1).Select Selection.Interior.Color = 255 End If Next i
'Anzahl der Lots Windows(Alt).Activate Sheets("Coversheet").Select Lots = WorksheetFunction.CountA(Range("E6:E56")) + 5 For L = 6 To Lots ' Lot = Sheets("Coversheet").Range("E" & 6).Value Sheets("pricesheet").Range("I3").Value = L - 5 ' Korrektur Next L
End Sub
Danke für dein Interesse an meinem Problem
Es ist nicht genug, zu wissen. Man muss es auch anwenden. Es ist nicht genug, zu wollen. Man muss es auch tun.
Registriert seit: 11.04.2014
Version(en): Office 365
Hallo Heinz,
vielen Dank, ich hatte mehr an die Datei gedacht.
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Registriert seit: 04.11.2014
Version(en): Office 365 Beta
Hi Heinz, Zitat:Folge: Der Code blockiert bei SW (SW wird als leer im Code angezeigt) müsste aber #NV sein. SW = WorksheetFunction.VLookup(wert, Range("A:Z"), 9, 0) Das glaube ich nicht, denn der Code müsste abfliegen und sich der Debugger zu Wort melden, wenn der Suchbegriff denn tatsächlich nicht vorhanden ist, da Du keine Fehlerbehandlung drin hast. Fazit: Zeig doch mal bitte ein konkretes Beispiel (in einer kleinen Beispieldatei), so wie es Klaus-Dieter bereits angeregt hat.
Registriert seit: 16.04.2014
Hallo Boris,
du hast recht, es kommt auch der Debugger und meldet mir die Zeile SW = gelb.
Eben diese Fehlerroutine suche ich.
Meine Krücke mit dem Vergleich der Werte Zeilenweise funktioniert auch
Es ist nicht genug, zu wissen. Man muss es auch anwenden. Es ist nicht genug, zu wollen. Man muss es auch tun.
Registriert seit: 04.11.2014
Version(en): Office 365 Beta
Hi Heinz,
quick & dirty z.B.:
On Error Resume Next SW = WorksheetFunction.VLookup(wert, Range("A:Z"), 9, 0) On Error GoTo 0
Andernfalls z.B. zunächst den Suchbegriff wert mit der Find-Methode (oder auch WorksheetFunction.CountIf) suchen und den SVERWEIS nur bei einem Treffer ausführen.
Registriert seit: 11.04.2014
Version(en): Office 365
19.08.2022, 14:49
(Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2022, 14:51 von Klaus-Dieter.)
Hallo Heinz, magst du das mal testen?: Code: 'Bestimmen der Menge der Einträge auf dem Pricesheet 'in Spalte K für die Schleife des Sverweises.
k = Sheets("pricesheet").Cells(Rows.Count, 1).End(xlUp).Row
'Schleife zum Holen der neuen Preise For i = 15 To 21 'k wert = Range("A" & i + 1).Value WertNeu = Windows(Neu).Worksheets("Pricesheet").Range("A" & i + 1).Value
'Abfangen eines nicht vorhandenen Entrags If wert = WertNeu Then 'SVERWEIS für den neuen Preis SW = WorksheetFunction.VLookup(wert, Range("A:Z"), 9, 0) If Len(SW) > 0 Then Windows(Alt).Sheets("pricesheet").Range("I" & i + 1).Value = SW Else Windows(Alt).Sheets("pricesheet").Range("I" & i + 1).Interior.Color = 255 Z = Z + 1 End If Next i
Habe gleich mal versucht, den Quelltext zu optimieren. (Entfall von Activate und Select)
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Registriert seit: 16.04.2014
Hallo Klaus-Dieter,
ich habe es jetzt auf diese Weise gelöst:
'Abfangen des #NV-Ergebnisses und SVERWEIS für den neuen Preis
Ergebnis = IsError(Application.VLookup(wert, Range("A:Z"), 9, 0)) 'Wenn es kein Fehler ist: If Ergebnis = "Falsch" Then SW = Application.VLookup(wert, Range("A:Z"), 9, 0) 'Eintragen des neuen Preises Windows(Alt).Activate Sheets("pricesheet").Select Range("I" & i + 1).Value = SW 'Bei Fehler Zelle Rot färben Else Windows(Alt).Activate Sheets("pricesheet").Range("I" & i + 1).Interior.Color = 255 Z = Z + 1 End If 'Weiter in der Schleife Next i
Mit deiner Zusammenfassung Windows(Alt).Sheets("pricesheet").Range("I" & i + 1).Value = SW mault bei mir VBA immer. Dann lass ich es halt auf mehreren Zeilen.
Danke
Es ist nicht genug, zu wissen. Man muss es auch anwenden. Es ist nicht genug, zu wollen. Man muss es auch tun.
|