# die Methode 'intersect' für das Objekt ' _Application' ist fehlgeschlagen



## jagga007 (7. Juli 2013)

Hallo Forum,

ich ein Problem beim Wechsel in meinen Tabellen.

Wenn ich in eine Zelle markiere und die Bearbeitungsleiste mit der Maus anklicke und dann in ein anderes Tabellenblatt springe bekomme ich folgende Fehlermeldung.


```
die Methode 'intersect' für das Objekt ' _Application' ist fehlgeschlagen
```

Der Fehler liegt in meinen Set zuweisungen einmal in Zeile 8,9 und Zeile 59 im folgenden Modulcode.


```
Public Sub EingabeZeiten(ByVal Target As Range)
Dim rngRange As Range
Dim rngCell As Range
Dim intHour As Integer
Dim intMinute As Integer
Dim blnWrongInput As Boolean

Set rngRange = Application.Intersect(Target, Range("A25:E25,A27:E27,A30:E32," & _
   "A41:E41,A43:E43,A45:E45,A47:E47"))

' Beginn Eingabe der Zeiten ##########
If Not rngRange Is Nothing Then

   ' Verhindern, dass beim Löschen die UserForm aufgerufen wird
   On Error Resume Next
   If rngRange = "" Then
      Application.EnableEvents = True
      Exit Sub
   End If
   On Error GoTo 0
  
   ' Bildschirmaktualisierung und Ereignisse ausschalten
   With Application
      .EnableEvents = False
      .ScreenUpdating = False
   End With
         
   ' Eingaben innerhalb >>und<< außerhalb des Gültigkeitsbereichs
   ' werden rückgängig gemacht
   For Each rngCell In Target
      If Intersect(rngCell, rngRange) Is Nothing Then
         Application.Undo
         Target(1, 1).Select
         GoTo Errorhandler
      End If
   Next
      
   ' Prüfung der Eingabewerte
   For Each rngCell In Target
      
      If rngCell = "" Or Not IsNumeric(rngCell) _
         Or Len(rngCell) > 4 Or rngCell > 2400 Then
         blnWrongInput = True
         Target(1, 1) = Empty
         GoTo Errorhandler
      End If
      
      ' Berechnung der Uhrzeit
      intHour = rngCell \ 100
      intMinute = rngCell - intHour * 100
      
      ' Uhrzeit in Zelle schreiben
      rngCell = TimeSerial(intHour, intMinute, 0)
      ' rngCell.NumberFormat = "[hh]:mm" funktioniert nur wenn Zellen formatieren im Blattschutz zugelassen wird
   Next rngCell
   
Else
   '##############################################
   Set rngRange = Application.Intersect(Target, Range("V17"))
   Application.EnableEvents = False          ' deaktiviert die Ereignisanzeige
   Application.ScreenUpdating = False        ' deaktiviert die Bildschirmanzeige und verhindert so das die Einzelschritte eines Codes am Bildschirm wahrgenommen werden können
   ' Zelle km
   With Target(1, 1)
      If .Address(0, 0) = "V17" Then
         ActiveSheet.Unprotect Password:="Passw"

         If .Value = "" Then
            .Value = "km"
            .Font.Color = &H9B9B9B
         Else
            .Font.Color = 0
            .NumberFormat = "0 ""km"""
         End If
         
         ActiveSheet.Protect Password:="Passw"
      End If
      Application.EnableEvents = True          ' deaktiviert die Ereignisanzeige
      Application.ScreenUpdating = True        ' deaktiviert die Bildschirmanzeige und verhindert so das die Einzelschritte eines Codes am Bildschirm wahrgenommen werden können
   End With
   '##############################################
End If

Errorhandler:
   ' Bildschirmaktualisierung und Ereignisse einschalten
   With Application
      .EnableEvents = True
      .ScreenUpdating = True
   End With
   
   If blnWrongInput Then
      Target.Select
      'Target.NumberFormat = "0;-0;;@"
      msg_std.Show
   End If
   ' Ende Eingabe der Zeiten ##########

End Sub
```

Es funktioniert eigentlich soweit alles Super, bis ein zwei ander Mängel noch aber die Frage möchte ich gerne in neuen Treads stellen.

Wenn nun jemand eine Lösung hätte wäre das Super den das Projekt hab für meine Arbeit erstellt und benutzen auch ander Kollegen und die Probleme sind dann nicht gerade schön. Da meine Kollegen null Kenntisse von VBA haben.


Gruß
jagga007


----------



## Zvoni (8. Juli 2013)

Was mir seltsam vorkommt, ist dass du target byval übergibst im funktionsaufruf. Damit übergibst du ja eine kopie des targets und nicht die adresse der ziel-range. Ich schau mir den rest später an, wenn ich zeit hab.
Ist jetzt das einzige, was mir auf anhieb ins auge gestochen ist.
(Sorry wegen der kleinschreibung -netiquette- aber ich bin gerade auf dem ipad)


----------



## Yaslaw (8. Juli 2013)

Wie Zvoni schon schrieb. ByVal ist nicht gut um Objekte zu übergeben. Verwende stattdessen ByRef.

@Zvoni: Unter anderem hab ich darum kein iPad, da das teure Ding nicht man Grossbuchstaben hinzukriegen scheint


----------



## Zvoni (8. Juli 2013)

Ohne es jetzt testen zu können:


> Wenn ich in eine Zelle markiere und die Bearbeitungsleiste mit der Maus anklicke und dann in ein anderes Tabellenblatt springe bekomme ich folgende Fehlermeldung.



Du benutzt in deinem Intersect als 2. Argument ein unqualifiziertes Range-Objekt


> Set rngRange = Application.Intersect(Target, *Range("A25:E25,A27:E27,A30:E32," & _
> "A41:E41,A43:E43,A45:E45,A47:E47")*)



Zu welchem Tabellenblatt soll das Range-Objekt gehören? Ich hab so eine Vermutung, dass da wieder eins dieser unsäglichen ActiveIrgendwas-Objekte (Workbook, Sheet, Unterhose usw.) zum Zuge kommt.

@Yaslaw
Man kann auch auf dem iPad ganz normal mit Gross- und Kleinschreibung tippen, nur bricht man sich dabei die Finger, da man alles mit einer Hand machen muss ;-)


----------



## jagga007 (8. Juli 2013)

Es wird für jeden Tag ein Tabellenblatt erstellt und der Code ist für das jeweilige geöffnete Tabellenblatt gültig.

Gruß
jagga007


----------



## Zvoni (9. Juli 2013)

Und du bist dir sicher, dass Target auch vom aktuellen Blatt kommt?


----------



## jagga007 (11. Juli 2013)

Ja eigentlich schon. Aber wenn du schon so fragst, wirst du das wohl anders sehen. Kannst du mir dann vielleicht auch die Erleuchtung bringen.

Gruß
jagga007


----------



## Zvoni (11. Juli 2013)

Siehe meine erste antwort bzgl. Byval/byref


----------



## jagga007 (11. Juli 2013)

Du schreibst ich benutze im Intersect als 2. Argument ein unqualifiziertes Range-Objekt. Wie schreibt man es denn richtig, dass dieser Fehler nicht auftritt?

Gruß
jagga007


----------



## Zvoni (12. Juli 2013)

Eine qualifizierung ist z.b.

Worksheets(1).Range("A1")

Du gibst den eigentümer des objekts mit an.
In deinem fall, sofern target wirklich ein gültiges objekt ist, würd ich es we folgt versuchen:

```
Dim mysheet as worksheet

Set mysheet=target.worksheet 'oder target.parent - ausprobieren

...... Blabla.intersect(target, mysheet.range(blalalbla).....
```


----------



## Zvoni (12. Juli 2013)

Ich bin ein trottel!
Grmpf.... Ich habe eben bzw. Im ganzen thread gegen eins meiner gebote verstossen: wenn nicht sicher, dann zuerst nachschauen!

Schau dir mal post 1 und 2 hier an: 
http://www.ozgrid.com/forum/showthread.php?t=77793

Richtig, du musst die ranges einzeln angeben bzw. Per union arbeiten


----------



## jagga007 (19. Juli 2013)

Hat ein bisschen gedauert Sorry.

die Fehlermeldung
Methode 'intersect' für das Objekt ' _Application' ist fehlgeschlagen ist mit Deiner Hilfe nun weg,


aber in den Zellen wo Zahlen eingegeben werden die mit Set definiert, bekomme ich nun folgende Fehlermeldung.

Laufzeitfehler '1004':
*Die Select-Methode des Range-Objektes konnte nicht ausgeführt werden*

Hast du hierfür auch einen Tipp die Datei hast ja schon wie du bereits geantwortet hast.


Vielen Dank für Deine Hilfe.


Gruß
jagga007


----------

