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

jagga007

Grünschnabel
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.

Code:
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.

Code:
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
 
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)
 
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 :)
 
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 ;-)
 
Es wird für jeden Tag ein Tabellenblatt erstellt und der Code ist für das jeweilige geöffnete Tabellenblatt gültig.

Gruß
jagga007
 
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
 
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
 
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:
Visual Basic:
Dim mysheet as worksheet

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

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

Neue Beiträge

Zurück