Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1560to1564
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

Laufzeitfehler 1004 - Intersect - _Global

Laufzeitfehler 1004 - Intersect - _Global
13.06.2017 10:37:15
Steve
Hallo liebe Leute.
Versuche ein
WorksSheet_Change Ereignis in ein
Workbook_SheetChange - Ereignis einzutragen damit es auf die neu erstellten - mit variablen - Blattnamen zum Einsatz kommt
Das Sheet wird über Userform neu erstellt. Bei der Erstellung aber kommt die Fehlermeldung.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim objRange As Range, objCell As Range
Dim lngRow As Long
If Sh.Name "DPL PI BH " & FormularStarteingabeMaske.ComboMonat.Value & " " & FormularStarteingabeMaske.ComboJahr.Value Then
Set objRange = Intersect(Target, Range("E18:AI441")) - hier kommt folgende Fehlermeldung : Laufzeitfehler '1004':
Die Methode 'Intersect' für das Objekt '_Global' ist fehlgeschlagen.

Info: in Target scheint die Jahreszahl (z.B. 2018) auf welche über Userform (FormularstareingabeMaske. ComboJahr) eingetragen wurde.
Wer kann mir weiterhelfen.
Besten Dank und mfg
STeve

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 1004 - Intersect - _Global
13.06.2017 10:56:01
Werner
Hallo Steve,
hilft dir das weiter?
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim objRange As Range
Set objRange = ActiveSheet.Range("E18:AI441")
If Not Intersect(Target, objRange) Is Nothing Then
MsgBox objRange.Address
End If
End Sub
Gruß Werner
AW: Laufzeitfehler 1004 - Intersect - _Global
13.06.2017 11:12:07
EtoPHG
Hallo Steve,
Wieder einmal eine unvollständige Referezierung! Das muss heissen:
Set objRange = Intersect(Target, sh.Range("E18:AI441")) 

DANKE Werner und EtoPHG
13.06.2017 12:04:24
Steve
Klasse Leute...Danke an Werner und EtoPGHG
Super schnelle Antwort.
Hat sofort gefunzt..sh.Range.......kleine Ursache - Riesenwirkung.
Plage mich schon seit drei Stunden rum.
Schönen Tag noch.
mfg STeve
Anzeige
Gerne u. Danke für die Rückmeldung. o.w.T.
13.06.2017 12:10:39
Werner
Bitte nochmal um Ratschlag
13.06.2017 15:13:51
Steve
Hallo ich nochmal:
Frage: wieso geht das Programm hier rein ::::::
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Hier werden die Blätter angesprochen wo der Code laufen soll
If Sh.Name "DPL PI BH " & FormularStarteingabeMaske.ComboMonat.Value & " " & FormularStarteingabeMaske.ComboJahr.Value Then
obwohl ich auf einem anderen Blatt bin:?
MsgBox Sh.Name ' zeigt an dass ich auf dem Blatt Mitarbeiterverwaltung bin.
Dim objRange As Range, objCell As Range
Dim lngRow As Long
Dim und eine Schleife.........
....
.. ....
und hier im Code bleibt er stehen:
Set objRange = Intersect(Target, Sh.Range("E18:AI" & EndZeilefürsZählwerk)) 'von Etophg
mit der Meldung:
Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler
Bearbeite mit einer Userform das Blatt
Mitarbeiterverwaltung....
das Blatt
"DPL PI BH " & FormularStarteingabeMaske.ComboMonat.Value & " " & FormularStarteingabeMaske.ComboJahr.Value
gibt es noch gar nicht?
Bitte um Hilfe
Danke und lg STeve
Anzeige
AW: Bitte nochmal um Ratschlag
13.06.2017 15:57:59
EtoPHG
Hallo Steve,
Das ist alles Gebastel und Stochern im Nebel.
Wir sollten mal den gesamten Code der Routine sehen. Und Angaben darüber haben, was du überhaupt mit deinem Code beabsichtigst.
In deinem neuen Post, sind übrigens schon wieder falsch referenzierte Objekte, die zu einem Fehler führen können, z.B. Rows.Count.
Also ganzer (Code Tag verwenden!) oder noch besser eine Beispielmappe!
Gruess Hansueli
AW: Bitte nochmal um Ratschlag
13.06.2017 16:21:06
Steve
Hallo EtoPHG - geschätzter Hansueli.
Das Problem ist dass ich mir da ein Riiiiiesenprojekt vorgenommen habe, inzwischen ist alles so verzwickt und unübersichtlich dass ich nach 6 Monaten (recht und schlecht) coden und stöpseln nicht mehr raus komme.
Jedesmal Beispieldateien extrahieren und einstellen dann in meine große Datei einarbeiten ist sehr mühsam und für mich auch schwer.
Die ganze Datei will ich aber nicht öffentlich einstellen.
Eine Möglichkeit wäre wenn ich meine Emailadresse hier einstelle und du nimmst darüber mit mir Kontakt auf.
Ich würde dir die Datei anonymisiert übermitteln.
Du würdest sicher einige Fehler finden und mir sicher gewaltig helfen.
Ich weiß dass das nicht Forum like ist.
mfg STeve
Anzeige
Workbook_Change - auf nur 1 Blatt begrenzen
13.06.2017 21:12:05
STeve
Hallo miteiander.
Habe in der Arbeitsmappe ein Workbook_SheetChange Ereignis.
Dies soll nur auf einem der 8 Blätter laufen.
Nach langem Probieren habe ich es bis jetzt nur so geschafft:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name "Mitarbeiterverwaltung" Then ' aber es gibt noch 7 andere da soll es auch nicht laufen
If Sh.Name "DPL PI BH " & FormularStarteingabeMaske.ComboMonat.Value & " " & FormularStarteingabeMaske.ComboJahr.Value Then ' nur auf diesem Blatt soll das Ereignis funkt.
Mit
If Not Sh.Name Is "DPL PI BH usw................. gehts nicht
Mit der Bitte um eure Ideen und Unterstützung.
Danke und lg
STeve
Anzeige
Workbook_Change - auf nur 1 Blatt begrenzen
13.06.2017 21:13:48
STeve
auf offen gestellt.
AW: Workbook_Change - auf nur 1 Blatt begrenzen
14.06.2017 02:58:18
fcs
Hallo Steve,
Du kannst hier bei nur einem Blatt den Blatt-Namen auf "=" prüfen und kommst mit einer IF-Prüfung aus.
LG
Franz
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If LCase(Sh.Name) = LCase("DPL PI BH " & FormularStarteingabeMaske.ComboMonat.Value & " " _
& FormularStarteingabeMaske.ComboJahr.Value) Then
'ab hier dann dein Code für das Blatt
Else
'do nothing
End If
'Testzeile
MsgBox "In Blatt """ & Sh.Name & """ wurde eine Zelle geändert!" & vbLf & vbLf _
& "Formularauwahl: Blatt " & "DPL PI BH " _
& FormularStarteingabeMaske.ComboMonat.Value & " " _
& FormularStarteingabeMaske.ComboJahr.Value, _
vbOKOnly, "Test-Workbook_SheetChange"
End Sub

Alternative ösung mit Select Case
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Select Case LCase(Sh.Name)
Case LCase("DPL PI BH " & FormularStarteingabeMaske.ComboMonat.Value & " " _
& FormularStarteingabeMaske.ComboJahr.Value)
'ab hier dann dein Code für das Blatt
Case Else
'do nothing
End Select
'Testzeile
MsgBox "In Blatt """ & Sh.Name & """ wurde eine Zelle geändert!" & vbLf & vbLf _
& "Formularauwahl: Blatt " & "DPL PI BH " _
& FormularStarteingabeMaske.ComboMonat.Value & " " _
& FormularStarteingabeMaske.ComboJahr.Value, _
vbOKOnly, "Test-Workbook_SheetChange"
End Sub

Anzeige
Danke fcs....altes Problem aber bleibt....
14.06.2017 08:33:23
STeve
Danke an fcs.
Habe deine (zweite) Select Case Variante eingebaut.
Wenn ich über die Userform das Blatt "Mitarbeiterverwaltung" jetzt bearbeite - klappt es. DANKE........
aber wenn ich dann das neue Blatt - eben auch über die Userform - mit dem Namen:
"DPL PI BH " & FormularStarteingabeMaske.ComboMonat.Value & " " _
& FormularStarteingabeMaske.ComboJahr.Value

erstellen lasse zeigt er bei:
Set objRange = Intersect(Target, Sh.Range("E18:AI" & EndZeilefürsZählwerk))
die Fehlermeldung: Anwendungs- oder objektdefinierter Fehler an?
Hier der Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Select Case LCase(Sh.Name)
Case LCase("DPL PI BH " & FormularStarteingabeMaske.ComboMonat.Value & " " _
& FormularStarteingabeMaske.ComboJahr.Value)
Dim objRange As Range, objCell As Range
Dim lngRow As Long
Dim x As Integer
Dim EndZeilefürsZählwerk As Integer ' in dieser Schleife sucht er das Wort "soll" unter dem  _
letzten Mitarbeiter und zählt die Zeilen aus
For x = 1 To Range("A65536").End(xlUp).Row - 1
If ActiveSheet.Cells(x, 1) = "soll" Then
EndZeilefürsZählwerk = x - 1 ' von diesem Wert wird eine Zeile  _
abgezogen dann zählt es die letzte Zeile des letzten Mitarbeiters
End If
Next x
Set objRange = Intersect(Target, Sh.Range("E18:AI" & EndZeilefürsZählwerk)) '  _
Hilfe/Tipp von EtoPHG ... Sh.Range - verwenden
If Not objRange Is Nothing Then
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
For Each objCell In objRange.Columns
For lngRow = EndZeilefürsZählwerk + 2 To Cells(Rows.Count, 3).End(xlUp).Row ' ist  _
die Zeile wo der erste Begriff (DF usw) anfängt
Cells(lngRow, objCell.Column).Value = count_values(Cells(lngRow, 3).Text,  _
objCell.Column)
Next
Call change_color(objCell.Column)
Next
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
ElseIf Not Intersect(Target, Sh.Range("A" & EndZeilefürsZählwerk + 2 & ":A" & Cells( _
Rows.Count, 1).End(xlUp).Row)) Is Nothing Then 'von Matthias
'  ElseIf Not Intersect(Target, Sh.Range(Cells(EndZeilefürsZählwerk + 2, 1), Cells(Rows. _
Count, 1))) Is Nothing Then  'Alternative von Matthias
Dim LastCol As Integer, i As Long
With ActiveSheet
LastCol = .Cells(Target.Row, .Columns.Count).End(xlToLeft).Column - 2 ' es wird die  _
Spaltenanzahl ausgezählt wo die Begriffe gezählt werden sollen
End With
For i = 5 To LastCol   ' beginnend bei 5 also Spalte E
Call change_color(i)  ' führe das Modul - weiter unten - Wechsle Farbe aus
Next i
End If
Set objRange = Nothing
Case Else
'do nothing
End Select
End Sub

Was ist da falsch?
Bedanke mich für eure Mühen und Unterstützung, Hilfe und Tipps.
mfg und LG
STeve
Anzeige
AW: Danke fcs....altes Problem aber bleibt....
14.06.2017 10:53:21
EtoPHG
Hallo Steve,
Du begreifst anscheinend immer noch nicht, was dein Code macht, bzw. was vollständiges Referenzieren heisst. Ich bin mir nahezu sicher, dass die Variable EndZeilefürsZählwerk nach diesem Codeteil:
    For x = 1 To Range("A65536").End(xlUp).Row - 1
If ActiveSheet.Cells(x, 1) = "soll" Then
EndZeilefürsZählwerk = x - 1 ' von diesem Wert wird eine Zeile...
End If
Next x
eine 0 enthält und zu dem Fehler führt. Warum, weil du hier eine ganz anderes Blatt, nämlich das Aktive referenzierst, das nicht mit Case Blatt zu tun hat!
Ehrlich: Ich würde den ganzen Code entsorgen, und auf dem Select Case - Konstrukt neu beginnen.
Gruess Hansueli
Anzeige
EtoPHG - du hast natürlich recht....
14.06.2017 11:19:16
STeve
Hallo Hansueli... Danke für deinen Tipp. Ja du hast recht - es befindet sich die Null in der Variable und deshalb dürfte es stocken.
Werde mir was anderes einfallen lassen damit die Variable zu diesem Zeitpunkt schon befüllt ist.
Werde den Code umbauen. Dir noch einen schönen Tag.
PS: VBA begreifen - ;-)) das wäre irgendwann mein Ziel. lg STeve
AW: EtoPHG - du hast natürlich recht....
15.06.2017 04:08:05
fcs
Hallo Steve,
habe die gleiche Vermutung wie Hansueli.
Abhilfe:
A) in dem Makro, das das neue Blatt erstellt vorübergehend die Ereignismakros deaktivieren.
oder
B) in dem Makro, das das neue Blatt erstellt das neue Blatt erst ganz zum Schluss umbenennen wenn die Zeile mit "soll" in Spalte A schon vorhanden ist.
oder
C) vor der Problemzeile die Prüfung einbauen
If EndZeilefürsZählwerk 
Gruß
Franz
Anzeige
fcs - Franz - DANKE
15.06.2017 19:36:16
STeve
Hi fcs- Franz. DANKE für deine tatkräftige Unterstützung.
Gute Tipps.
A.) habe ich gefunden wie geht. Super Idee.
B.) Frage: wie kann ich das neue Blatt nach Erstellung und es nicht gleich benenne - - - wie hier:
Dim ws As Worksheet
Set ws = Sheets.Add
ws.Name = "DPL PI BH " & FormularStart...bla bla bla............
ansprechen?: jetzt mach ich es - eh klar - so
With Sheets(ws.Name)
C.)Einfach und gut an sowas hab ich auch nicht gedacht. Super.
mfg und dir noch einen schönen Tag.
Hab bemerkt du bist ein "Nachtarbeiter".....:-)))
STeve
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige