Anzeige
Archiv - Navigation
1564to1568
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

Range - WBK_Sheet_Change - nicht bekannt

Range - WBK_Sheet_Change - nicht bekannt
22.06.2017 07:51:49
STeve
Schönen guten Morgen.
Steh wieder mal am Schlauch. Wer kann mir bitte helfen.
Über Userform wird ein neues Tabellenblatt Name: (ABC usw.) erstellt.
Dabei werden über Modul:
Modulkopf: (Allg.)(Deklarationen)
Public multibereich1_neu As Range
(Allg.)(ZeilenermittelnundinUnionzusammenfassen_neu)
Public Call ZeilenermittelnundinUnionzusammenfassen_neu
Bereichsnamen vergeben und eben in die Union - multibereich1_neu zusammengefasst - diese Sub dauert 45 Sekunden.
Wenn ich jetzt auf das Blatt (ABC usw.) arbeite sollte ja bei:
(Workbook) (Sheet_Change)
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Left(Sh.Name, 9) = "ABC usw." Then

If Not Intersect(Target, multibereich1_neu) Is Nothing Then
Call........
End If
der Rangebereich multibereich1_neu erkannt werden.
ABER: multibereich1_neu..... ist leer - außerhalb des Kontext -
Wo ist multibereich1_neu - wenn überhaupt - nach Beendigung der Sub (ZeilenermittelnundinUnionzusammenfassen_neu) gespeichert?
mfg STeve

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range - WBK_Sheet_Change - nicht bekannt
22.06.2017 07:56:26
Hajo_Zi
Du hast "multibereich1_neu " mit Public in einem Modul definiert?

AW: Range - WBK_Sheet_Change - nicht bekannt
22.06.2017 08:11:34
STeve
Hallo Hajo... Danke für die so schnelle Antwort/Frage.
In meiner Hilflosigkeit habe ich:
Public multibereich1_neu As Range...
a.) unter diese Arbeitsmappe (Allg)(Deklarationen)
und
b.) in den Modulkopf (Allg)(Deklarationen)des ...Public Sub ZeilenermittelnundinUnionzusammenfassen_neu
eingefügt.
mfg STeve
AW: Range - WBK_Sheet_Change - nicht bekannt
22.06.2017 08:22:08
Hajo_Zi
das ist falsch, das hatte ich auch nicht vorgeschlagen.
Da mein Vorschlag nicht interessiert bin ich dann raus.
Gruß Hajo
Anzeige
AW: Range - WBK_Sheet_Change - nicht bekannt
22.06.2017 08:34:15
STeve
Hallo Hajo.
Du hast eine Frage gestellt und die habe ich beantwortet - eben dass ich es zweimal eingefügt habe.
Du sagst das ist falsch........ok danke.
Was ist dein Vorschlag?
mfg Steve
Range - WBK_Sheet_Change - nicht bekannt
22.06.2017 08:44:25
STeve
?
AW: Range - WBK_Sheet_Change - nicht bekannt
22.06.2017 11:28:05
Mullit
Hallo,
Du mußt
Public multibereich1_neu As Range

nur einmal in einem Standardmodul deklarieren, nicht noch zusätzlich in der Public Sub ZeilenermittelnundinUnionzusammenfassen_neu ...
Gruß, Mullit
AW: Range - WBK_Sheet_Change - nicht bekannt
22.06.2017 15:38:49
STeve
Hallo Mullit... Bedanke mich vorab schon mal recht herzlich dass du dich meines Problemes angenommen hast.
Habe jetzt die RangeVariable und eben vier weitere:
Public multibereich1_neu As Range
Public multibereich2_neu As Range
Public Rechenzeile_neu As Range
Public JD_Zeile_neu As Range
nur mehr im Kopf des StandardModules
Public Sub ZeilenermittelnundinUnionzusammenfassen_neu ...
wo die vier großen RangeBereiche erstellt werden.
Lt. Überwachungsfenster sind sie nach Erstellung da.
Aber nach End Sub
wieder nicht mehr.
mfg
STeve
Anzeige
AW: Range - WBK_Sheet_Change - nicht bekannt
22.06.2017 15:47:08
Mullit
Hallo,
okidoki, also zunächst mal müsste die Deklaration in Deinem Std.-Modul so aussehen:
Option Explicit
Public multibereich1_neu As Range
Public multibereich2_neu As Range
Public Rechenzeile_neu As Range
Public JD_Zeile_neu As Range
Public Sub ZeilenermittelnundinUnionzusammenfassen_neu()
'// hier Dein bisher unbek. Code....
End Sub

Wenn das der Fall ist und immer noch was nicht hinhaut, wirst Du mal den Code der Public Sub ZeilenermittelnundinUnionzusammenfassen_neu zeigen , oder ein Bsp.mappe hochladen müssen....
Gruß, Mullit
Anzeige
Merci Mullit - deine Anstoß hat d. Erfolg gebracht
22.06.2017 16:18:28
STeve
Klasse Mullit.....DANKE !!!
durch deinen Tipp den Code mal hochzuladen ist mir aufgefallen, dass ich im Code nochmal jede RangeVar vor der UnionZusammenfassung mit
Dim multibereich1_neu As Range
eingetragen habe.
Alle vier auskommentiert und schon läuft die Maschine.
Sorry für deine Mühen und mein Unwissen. Hoffe du bleibst im Forum weiter so freundlich für uns ansprechbar.
LG STeve
Geht doch nicht :-((((
22.06.2017 16:47:58
STeve
Hallo Mullit.
Das Ding läuft mal und mal nicht?
Kann ich dir den Code hier doch mal einstellen?
LG STeve
AW: Geht doch nicht :-((((
22.06.2017 18:58:06
Mullit
Hallo Steve,
null Problemo, immer her damit...
Gruß, Mullit
Anzeige
AW: Geht doch nicht :-((((
22.06.2017 19:18:37
STeve
Hi Mullit......... Super dass du da mal reinschaust.
Option Explicit ganz oben - habe ich rausgenommen weil der dann stehen bleibt bei:
For Each wks In Worksheets - weil er wks nicht kennt? - Public wks As Range --- geht mal nicht!!
LG STeve
Hier der Code:
Public multibereich1_neu As Range
Public multibereich2_neu As Range
Public Rechenzeile_neu As Range
Public JD_Zeile_neu As Range
Public Sub ZeilenermittelnundinUnionzusammenfassen_neu()
Dim intAuszaehlung As Integer
intAuszaehlung = Sheets("Mitarbeiterverwaltung").Cells(Rows.Count, 1).End(xlUp).Offset(, 1). _
Value 'zählt die Anz.d.Bea. aus
Dim denletztenBeamtenNamen As Integer
denletztenBeamtenNamen = Sheets("Zeilenpositionen").Cells(intAuszaehlung, 3).Offset(, -1). _
Value 'zählt die Zeilenpos.d.letzt. Bea. aus
For Each wks In Worksheets
If Left(wks.Name, 9) = "DPL PI BH" Then
For intAuszaehlung = 21 To denletztenBeamtenNamen Step 8
Cells(intAuszaehlung, 1).Offset(-3, 2).Resize(, 32).Select   ' dann  _
werden offset die PlandienstStartzeilen selektiert
With Selection                                               ' es  _
wird ein indiv. BereichName vergeben
.Name = "PlanStartZeile_von_" & Cells(intAuszaehlung, 1)
End With
Next intAuszaehlung
For intAuszaehlung = 21 To denletztenBeamtenNamen Step 8
Cells(intAuszaehlung, 1).Offset(-1, 2).Resize(, 32).Select   ' dann  _
werden offset die PlandienstEndezeilen selektiert
With Selection                                               ' es  _
wird ein indiv. BereichName vergeben
.Name = "PlanEndeZeile_von_" & Cells(intAuszaehlung, 1)
End With
Next intAuszaehlung
For intAuszaehlung = 21 To denletztenBeamtenNamen Step 8
Cells(intAuszaehlung, 1).Offset(4, 2).Resize(, 32).Select   ' dann  _
werden offset die Rechenzeilen selektiert
With Selection                                               ' es  _
wird ein indiv. BereichName vergeben
.Name = "Rechenzeile_von_" & Cells(intAuszaehlung, 1)
End With
Next intAuszaehlung
For intAuszaehlung = 21 To denletztenBeamtenNamen Step 8
Cells(intAuszaehlung, 1).Offset(-2, 2).Resize(, 32).Select   ' dann  _
werden offset die JD_Zeile selektiert
With Selection                                               ' es  _
wird ein indiv. BereichName vergeben
.Name = "JD_Zeile_von_" & Cells(intAuszaehlung, 1)
End With
Next intAuszaehlung
Dim namName As Name
' Schleife über alle definierten Namen der aktiven Mappe
For Each namName In ActiveWorkbook.Names
' wenn der Bezug den Namen des aktiven Tabellenblattes enthält
If InStr(namName.RefersTo, ActiveSheet.Name) > 0 And Left(namName.Name, 14) = " _
PlanStartZeile" Then
' Variable ist noch leer
If multibereich1_neu Is Nothing Then
' der Variablen den Bezugsbereich des laufenden Namen zuweisen
Set multibereich1_neu = namName.RefersToRange
' Variable ist schon gefüllt
Else
' die Variable um den Bezugsbereich des laufenden Namen erweitern
Set multibereich1_neu = Union(multibereich1_neu, namName.RefersToRange)
End If
End If
' wenn der Bezug den Namen des aktiven Tabellenblattes enthält
If InStr(namName.RefersTo, ActiveSheet.Name) > 0 And Left(namName.Name, 13) = " _
PlanEndeZeile" Then
' Variable ist noch leer
If multibereich2_neu Is Nothing Then
' der Variablen den Bezugsbereich des laufenden Namen zuweisen
Set multibereich2_neu = namName.RefersToRange
' Variable ist schon gefüllt
Else
' die Variable um den Bezugsbereich des laufenden Namen erweitern
Set multibereich2_neu = Union(multibereich2_neu, namName.RefersToRange)
End If
End If
' wenn der Bezug den Namen des aktiven Tabellenblattes enthält
If InStr(namName.RefersTo, ActiveSheet.Name) > 0 And Left(namName.Name, 11) = " _
Rechenzeile" Then
' Variable ist noch leer
If Rechenzeile_neu Is Nothing Then
' der Variablen den Bezugsbereich des laufenden Namen zuweisen
Set Rechenzeile_neu = namName.RefersToRange
' Variable ist schon gefüllt
Else
' die Variable um den Bezugsbereich des laufenden Namen erweitern
Set Rechenzeile_neu = Union(Rechenzeile_neu, namName.RefersToRange)
End If
End If
' wenn der Bezug den Namen des aktiven Tabellenblattes enthält
If InStr(namName.RefersTo, ActiveSheet.Name) > 0 And Left(namName.Name, 8) = "JD_Zeile"  _
Then
' Variable ist noch leer
If JD_Zeile_neu Is Nothing Then
' der Variablen den Bezugsbereich des laufenden Namen zuweisen
Set JD_Zeile_neu = namName.RefersToRange
' Variable ist schon gefüllt
Else
' die Variable um den Bezugsbereich des laufenden Namen erweitern
Set JD_Zeile_neu = Union(JD_Zeile_neu, namName.RefersToRange)
End If
End If
Next namName
End If
Next wks
End Sub

Anzeige
AW: Geht doch nicht :-((((
22.06.2017 19:41:54
Mullit
Hallo,
Option Explicit bleibt schön stehen, stattdessen deklarierst Du die Variable besser richtig in Deiner Proc, Variablendeklarationen gehören dabei immer an den Anfang einer Prozedur:
Public Sub ZeilenermittelnundinUnionzusammenfassen_neu()
Dim wksSheet As Worksheet
Dim namName As Name
'...
End Sub

Gruß, Mullit
....noch was zur Info.
22.06.2017 20:51:48
STeve
Hallo Mullit.
Ok Danke........ habe ich so eingearbeitet.
Was mir jetzt aufgefallen ist :
wenn ich das Blatt "DPL PI BH" neu erstelle (über die Userform)
und die Ranges zugeordnet sind, dann funktioniert das Sheet_Change Ereignis und er kennt die RangeVariablen.
Aber wenn ich die Datei schließe und wieder öffne geht es nicht mehr. Vielleicht hilft dir das weiter.
In Erwartung dass du den/die Fehler findest verbleibe ich mfg und glg
STeve
Anzeige
AW: ....noch was zur Info.
22.06.2017 23:51:10
Mullit
Hallo Steve,
Aber wenn ich die Datei schließe und wieder öffne geht es nicht mehr. Vielleicht hilft dir das weiter.

allerdings, das hilft weiter, Variablen aller Art auch statische und globale, verlieren ihre Werte, wenn die Datei geschlossen wird, Du mußt sie nach dem Neuöffnen erneut einlesen...
Gruß, Mullit
DANKE an Mullit.....thats it
23.06.2017 08:56:36
Steve
Guten Morgen Mullit...........DANKE für deine nächtlichen Mühen. Dann ist mir einiges klarer.
Fazit:
Wenn die Rangebereiche also nicht direkt im Change oder Sheet_Change - Ereignis definiert sind (sondern in einem anderen Modul - weil sie eben ca. 45 Sekunden brauchen bis sie initialisiert sind)............dann muss man das beim Öffnen der Datei jedesmal neu einlesen.:-((((
Das wird die Benutzer der Datei nicht freuen.
Wünsche dir noch einen tollen Freitag und schönes WE.
mfg STeve
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige