Microsoft Excel

Herbers Excel/VBA-Archiv

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

VBA schaut zu weit voraus

Betrifft: VBA schaut zu weit voraus von: A.Appel
Geschrieben am: 08.10.2014 09:37:40

Hallo,

ich habe folgenden Code im Rahmen einer Zellenüberwachung:

If Not Application.Intersect(target, Range("G:G")) Is Nothing And Not Range("M1").Value = "" Then

zwischen = ActiveSheet.Range("K1").Value + ActiveSheet.Range("O1").Value
Set wksData = Worksheets("Daten " & zwischen & "MA")
Application.EnableEvents = False

Jetzt läuft er mir jedesmal auf Fehler13 Typen unverträglich, schubst man ihn dann weiter geht alles problemlos.

Ich vermute nach dem Debugger, dass er zu Beginn sagt, dass das Worksheet mit dem Wert zwischen = 0 nicht existiert und geht daher auf Fehler. Wie bringe ich ihn dazu nicht in einen Fehler zu laufen und "abzuwarten" bis zwischen gesetzt ist?

Per Errorhandling abzufangen und ihn einfach weitermachen zu lassen ist irgendwie nicht besonders elegant.

Grüße
Andreas

  

Betrifft: AW: VBA schaut zu weit voraus von: Ewald
Geschrieben am: 08.10.2014 10:37:34

Hallo,

zeige mal ein Beispiel

was steht in K1 und O1

wie ist "zwischen" definiert

was soll dann bei "set wksdata" stehen

wie ist wksdata definiert

Gruß Ewald


  

Betrifft: AW: VBA schaut zu weit voraus von: A.Appel
Geschrieben am: 08.10.2014 10:49:06

Hallo Ewald,

K1 = 1
O1 = 0,1

zwischen ist als Double definiert
wksData als Worksheet

Wenn ich nach dem Fehler auf Einzelschritt weitermache setzt er auch alles richtig, zwischen trägt 1,1 und wks Data wird demzufolge dann "Daten 1,1MA" und die Berechnungen laufen korrekt.

Grüße


  

Betrifft: AW: VBA schaut zu weit voraus von: fcs
Geschrieben am: 08.10.2014 11:19:58

Hallo Andreas,

der Typfehler 13 deutet darauf hin, dass in K1 oder O1 kein nummerischer Inhalt steht. Dies führt dann bei der Addition zum Typ-Fehler.

Du musst noch entsprechende Prüfungen für die beiden Zellen einbauen.
Zusätzlich ist es ratsam entsprechende Fehler-Prüfungen einzubauen, die das Makro kontrolliert beenden mit passenden Fehlermeldungen.

Die Meldungen zu den Zellen K1 und O1 kannst du ja weglassen, wenn sie zu sehr nerven.

evtl. stimmt ja auch die Logik deiner Eingaben noch nicht zu 100%.

Gruß
Franz

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim zwischen As Double
  Dim wksData As Worksheet
  On Error GoTo Fehler
  If Not Application.Intersect(Target, Range("G:G")) Is Nothing And Not Range("M1").Value = ""  _
Then
    With ActiveSheet.Range("K1")
      If IsNumeric(.Value) And .Value > 0 Then
        zwischen = .Value
        With ActiveSheet.Range("O1")
          If IsNumeric(.Value) And .Value > 0 Then
              zwischen = zwischen + .Value
              Set wksData = Worksheets("Daten " & zwischen & "MA")
              Application.EnableEvents = False
                  '...
                  'weiterer Code
                  '..
              Application.EnableEvents = True
          Else
              'unzulässige Werte
              MsgBox "unzulässiger Wert in  Zelle O1"
          End If
        End With
      Else
        'unzulässige Werte
        MsgBox "unzulässiger Wert in  Zelle K1"
      End If
    End With
  End If
Fehler:
  With Err
    Select Case .Number
      Case 0 'alles OK
      Case 9 'Index-Fehler
        MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & vbLf _
          & "Blatt mit Name """ & "Daten " & zwischen & "MA""" & " existiert nicht"
      Case 13 ' Typ-Fehler
        MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & vbLf _
          & "Inhalte in K1 und O1 nicht kompatibel für Adddition"
      Case Else
        MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
    End Select
  End With
  Application.EnableEvents = True
End Sub



  

Betrifft: AW: VBA schaut zu weit voraus von: Ewald
Geschrieben am: 08.10.2014 11:35:13

Hallo,

deklariere "zwischen" als String falls die Zahlen Text sein können.

Gruß Ewald


  

Betrifft: AW: VBA schaut zu weit voraus von: A.Appel
Geschrieben am: 08.10.2014 11:40:14

Hi Franz,

so einfach kann die Welt sein...:D

Ich trage die beiden Zellen per VBA ein...die 0,1 hat er mir aber nicht mehr als Zahl formatiert, ist mir aber gar nicht aufgefallen. Kaum ändert man das Zahlenformat schon funktionierts ;)

Muss ich ihn nur als Zahl definiert eintragen lassen.

Errorhandling will ich über das gesamte Worksheet hinweg noch aktivieren, da andere User damit arbeiten sollen. Bisher läufts aber ohne Fehler :)

Danke nochmal!

Grüße
Andreas