Microsoft Excel

Herbers Excel/VBA-Archiv

Wenn Zelle 'NV' enthält, dann führe Befehl nochmal

Betrifft: Wenn Zelle 'NV' enthält, dann führe Befehl nochmal von: Peter
Geschrieben am: 08.08.2014 12:31:16

Hallo zusammen,

nächster Schritt.
ich lasse meine Daten per Webaktualisierung einlesen.
Nun kann es vorkommen, daß die Daten nicht richtig oder vollständig eingelesen werden. Dann taucht in beispielsweise Zelle s2 ein Fehler "#NV" auf.
Ich möchte nun, daß für diesen Fall, die Daten nochmals aktualisiert werden, BEVOR kopiert werden soll.

kann man dies mit dieser Befehlszeile irgendwie lösen?

If IsError(Worksheets("Tabelle1").Cells("S2")) = "#NV" Then...?

Grüße
Peter

Sub kopieren0809()

    With ActiveWorkbook
        ActiveWorkbook.RefreshAll
        .Worksheets("08-09").Range("d1:e30").Copy
        .Worksheets("08-09").Range("g1").PasteSpecial Paste:=xlValues
        
    End With

End Sub

  

Betrifft: AW: Wenn Zelle 'NV' enthält, dann führe Befehl nochmal von: Daniel
Geschrieben am: 08.08.2014 12:46:31

Hi

kannst du so prüfen und so oft ausführen, bis die Werte da sind:

dim rng as Range

Do
    ActiveWorkbook.RefreshAll 
    On Error Resume Next
       Set rng = Range(...).SpecialCells(xlcelltypeformulas, 16)
    On Error Goto 0
Loop until rng is Nothing
hier dann dein Copy-Paste
ob die Werte einer Webabfrage als Formel oder als Festwert gelten, müsstest du mal prüfen, da bin ich mir jetzt nicht sicher.
Bei Formeln ist der Code: SpecialCells(xlcelltypeformulas, 16)
Bei Festwerten brauchst du: SpecialCells(xlcelltypeconstants, 16)


Gruß Daniel


  

Betrifft: AW: Wenn Zelle 'NV' enthält, dann führe Befehl nochmal von: Peter
Geschrieben am: 08.08.2014 13:00:19

Muß der Code dann so aussehen?

Sub kopieren0917300()

Dim rng As Range

    With ActiveWorkbook
    Do
       ActiveWorkbook.RefreshAll
       On Error Resume Next
       Set rng = Range("09-1730").SpecialCells(xlCellTypeFormulas, 16)
    On Error GoTo 0
    Loop Until rng Is Nothing
    
        .Worksheets("09-1730").Range("d1:e30").Copy
        .Worksheets("09-1730").Range("g1").PasteSpecial Paste:=xlValues
        ActiveWorkbook.Save
        
    End With

End Sub
------

xlCellTypeFormulas, 16

steht die 16 für diesen spieziellen Fehler "#NV" ?


  

Betrifft: AW: Wenn Zelle 'NV' enthält, dann führe Befehl nochmal von: Daniel
Geschrieben am: 08.08.2014 13:06:26

Hi
das 16 steht für "Fehlerwert" und schließt alle Fehler mit ein (#NV, #Wert, #Div/0, #Zahl)

in den SpecialCells kannst du unterscheiden zwischen Zahl(1), Text(2), Wahrheitswert(4) und Fehlerwerten(16).
Kombinationen der Typen ergeben sich durch Additon der Zahlen (3 = Zahlen und Texte)

xlcelltypeformulas / xlcelltypeconstants unterscheidet zwischen Formel oder Festwert.
leider lässt sich das nicht kombinieren.

Code sieht gut aus, Testen kann ich es leider nicht, weil ich mich mit Webabfragen nicht auskenne.
aber, wenn du schon die WITH-Klammer mit dem ActiveWorkbook aufmachst, warum dann "ActiveWorkbook.RefreshAll" und nicht einfach nur ".RefreshAll" ???


Gruß Daniel


  

Betrifft: AW: Wenn Zelle 'NV' enthält, dann führe Befehl nochmal von: Peter
Geschrieben am: 08.08.2014 13:09:53

Hallo Daniel,

vielen Dank für Deine zahlreichen Ideen.:-) Muß sagen, das Forum hier gefällt mir ausgesprochen gut!!!

Mit dem Refreshall ohne Workbook...naja ich kannte das noch nicht und verstehe nur langsam die Zusammenhänge, was wann welcher Befehl bedeutet.
Naja...Schritt für Schritt.

Viele Grüße

Peter


  

Betrifft: AW: Wenn Zelle 'NV' enthält, dann führe Befehl nochmal von: Daniel
Geschrieben am: 08.08.2014 13:15:41

Du verwechselts da was!
natürlich steht das Workbook vor .RefreshAll.
Aber du hast doch die WITH-Klammer und dann verfährst du beim RefreshAll genaus wie nachher beim Kopieren und einfügen.

gruß Daniel


 

Beiträge aus den Excel-Beispielen zum Thema "Wenn Zelle 'NV' enthält, dann führe Befehl nochmal"