Anzeige
Archiv - Navigation
1816to1820
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

On Error Handling

On Error Handling
07.03.2021 14:17:55
JoS
Ich habe mir eine Matrix in Sheets(2) gemacht aus Gerät und Kanal. Daraus bastel ich mir dann einen Index und suche auf Sheet(1) (Export vom Messgerät) nach dem Index. Es gibt aber nicht alle Kombinationen der Matrix Sheet(1) ich habe ein on error gotto nodata gemacht, aber match gibt trotzdem ein Fehler aus wenn er nichts findet. Leider schaffe ich es nicht.
Dim Index As String
Dim xIndex As Integer
Dim yIndex As Integer
Dim c
Dim IndexRange
Dim DatenAnz As Long
Dim Ergebnis
Dim rng As Range
Dim Grenzwert As Integer
wb.Sheets(2).Activate
For yIndex = 8 To 13 'der erste Sensor ist in Zeile 8
For xIndex = 2 To 6  'Spalten in der die Gerätenamen stehen
Index = wb.Sheets(2).Cells(7, xIndex) & wb.Sheets(2).Cells(yIndex, 1)
Set IndexRange = Nothing 'Falls kein Index gefunden wird hat inexrange diesen Wert
With wb.Worksheets(strSheet)
Set rng = .Range(.Cells(1, 1), .Cells(1, col))
On Error GoTo noData:
c = WorksheetFunction.Match(Index, rng, 0)
End With
DatenAnz = wb.Sheets(2).Range("D3") * 60 / wb.Sheets(2).Range("C2") * 24 ' Ausrechnen  _
der zu Berücksichtigen Datenrange
wb.Sheets(1).Activate
With ThisWorkbook.Worksheets(1)
Set IndexRange = .Range(.Cells((lEintrag - DatenAnz), c), .Cells(lEintrag, c)) ' _
Definition des Auszuwertenden Bereichs
End With
noData:
With ThisWorkbook.Worksheets(2)
.Activate
Grenzwert = .Cells((yIndex + 23), xIndex)
'Debug.Print IndexRange.Address
If IndexRange Is Nothing Then
Ergebnis = "Keine Daten"
Else
Ergebnis = WorksheetFunction.CountIf(IndexRange, "


10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: On Error Handling
07.03.2021 14:27:54
Beverly
Hi,
ist die Variable rng belegt? Vielleicht solltest du das vorher noch prüfen:
        With wb.Worksheets(strSheet)
Set rng = .Range(.Cells(1, 1), .Cells(1, col))
If Not rng Is Nothing Then
c = WorksheetFunction.Match(Index, rng, 0)
Else
MsgBox "Nicht gefunden"
Exit Sub
End If
End With



AW: On Error Handling
07.03.2021 15:40:49
JoS
Die variable ist schon belegt, aber da ich einfach mittels einer Matrix mir meine Variablen zusammenbastle und es nicht alle Variablen in der zu suchenden Tabelle gibt, kommt eben ein Fehler, aber er soll die Variablen die er findet einfach überspringen. Eine Msgbox mit Exit würde nicht funktionieren.

Anzeige
AW: On Error Handling
07.03.2021 17:55:36
Beverly
Hi,
Zitat: "Eine Msgbox mit Exit würde nicht funktionieren."
Das war mir schon klar, ich hatte jedoch angenommen, dass du das Prinzip enstpechend auf deinen Code anwenden kannst... ;-)



AW: On Error Handling
07.03.2021 14:29:42
onur
WIR wohl auch nicht ohne die (Beispiels-) Datei?
Wie sollen wir denn dein Makro testen OHNE das Blatt dazu?

AW: On Error Handling
07.03.2021 14:31:27
Nepumuk
Hallo,
teste mal:
Public Sub Test()
    
    Dim Index As String
    Dim xIndex As Long
    Dim yIndex As Long
    Dim c
    Dim IndexRange As Range
    Dim DatenAnz As Long
    Dim Ergebnis
    Dim rng As Range
    Dim Grenzwert As Long
    
    wb.Sheets(2).Activate
    For yIndex = 8 To 13 'der erste Sensor ist in Zeile 8
        
        For xIndex = 2 To 6 'Spalten in der die Gerätenamen stehen
            Index = wb.Sheets(2).Cells(7, xIndex) & wb.Sheets(2).Cells(yIndex, 1)
            Set IndexRange = Nothing 'Falls kein Index gefunden wird hat inexrange diesen Wert
            
            With wb.Worksheets(strSheet)
                Set rng = .Range(.Cells(1, 1), .Cells(1, col))
            End With
            
            c = Application.Match(Index, rng, 0)
            
            If Not IsError(c) Then
                
                DatenAnz = wb.Sheets(2).Range("D3") * 60 / wb.Sheets(2).Range("C2") * 24 ' Ausrechnen _
                    der zu Berücksichtigen Datenrange

                
                wb.Sheets(1).Activate
                With ThisWorkbook.Worksheets(1)
                    Set IndexRange = .Range(.Cells((lEintrag - DatenAnz), c), .Cells(lEintrag, c)) ' _
                        Definition des Auszuwertenden Bereichs

                End With
            End If
            
            With ThisWorkbook.Worksheets(2)
                ' .Activate
                Grenzwert = .Cells((yIndex + 23), xIndex)
                'Debug.Print IndexRange.Address
                If IndexRange Is Nothing Then
                    Ergebnis = "Keine Daten"
                Else
                    Ergebnis = WorksheetFunction.CountIf(IndexRange, "<" & Grenzwert) 'Grenzwerte stehen 23 _
                        Zeilen weiter unten

                End If
                .Cells(yIndex, xIndex) = Ergebnis
                
                Debug.Print Index, IndexRange.Address, Grenzwert, Ergebnis, lEintrag - DatenAnz
                
            End With
        Next
    Next
    
    'Start und EndDatum Eintragen
    wb.Sheets(2).Range("D4") = wb.Sheets(1).Cells((lEintrag - DatenAnz), 1) 'Start
    wb.Sheets(2).Range("D5") = wb.Sheets(1).Cells((lEintrag), 1) 'Ende
    
    Application.ScreenUpdating = True
    Application.Alerts = True
End Sub

Gruß
Nepumuk

Anzeige
AW: On Error Handling
07.03.2021 15:37:27
JoS
Vielen Dank an alle Helfer,
@Nepumuk,
dein Vorschlag schien vielversprechend auszusehen, aber leider gibt es trotzdem den Fehler:
"die match eigenschaft des worksheet function kann nicht zugeordnet werden"
Falls es weiter hilft,
hier die Exceldateien, Aufgrund der 300kb Beschränkung musste ich die Auszuwertende Datei stark kürzen und in eine xslx umwandeln. Ist normal .csv
Die in der offensichtlich das Makro ist.
https://www.herber.de/bbs/user/144537.xlsm
Die Datei aus dem Gerät die geladen werden soll wenn man auf auswerten klickt.
https://www.herber.de/bbs/user/144538.xlsx

Anzeige
AW: On Error Handling
07.03.2021 16:06:03
Nepumuk
Hallo,
du hast immer noch WorksheetFunktion.Match an Stelle von Application.Match in deinem Code.
Weiter kann ich dir nicht helfen da ich nicht weiß was du da vor hast.
Gruß
Nepumuk

Vielen Dank! Hatte ich übersehen
07.03.2021 17:23:18
JoS
Hallo Nepumuk,
entschuldige, hatte nicht genau geschaut, passt alles! Vielen Dank
was ist der Unterschied zwischen diesen beiden Funktionen?

AW: Vielen Dank! Hatte ich übersehen
07.03.2021 17:29:53
Nepumuk
Hallo,
na die eine löst einen Laufzeitfehler aus die andere liefert den Fehler an die Variable zurück.
Gruß
Nepumuk

AW: Vielen Dank! Hatte ich übersehen
07.03.2021 19:02:47
JoS
ok

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige