Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
560to564
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
560to564
560to564
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Rahmen versetzen

Rahmen versetzen
04.02.2005 08:30:48
walter
Guten Morgen Zusammen,
habe folgende Makros, natürlich mit Unterstützung des Forums.
Makro:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("M17")) Is Nothing Then
If Range("M17") = "" Then
'A1_Rahmen_zurück
A1_Rahmen_Tageszulassung_versetzen
Else
A1_Rahmen_Tageszulassung_zurück
'A1_Rahmen_versetzen
End If
End If
End Sub

Habe aber auch einen2. Rahmen den ich versetzen möchte, jetzt kommt die
Fehlermeldung: "Mehrdeutiger Name Worksheet_Change",
was ja stimmt.
Wie krige ich das hin das ich einen 2. Rahmen setzen kann etc.
Das 1. Rahmen geschehen läuft einwandfrei ?
Gruß Walter mb

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Rahmen versetzen
Galenzo
WorkSheet_Change findest du im Klassenmodul des jeweiligen Tabellenblattes!
DORTHIN gehört der Code.
Also nicht etwa in einem separaten Modul selber schreiben!
AW: Rahmen versetzen
04.02.2005 09:50:25
walter
Hallo Galenzo,
habe beide im Mappen-Modul, so wie Du meinst.
Gruß Walter
lies meine AW, Walter!!! -- owT
Luc
hatte diese Kenntnis vorausgesetzt !? -- owT
Luc
AW: Rahmen versetzen
Luc
Hallo Walter,
da musst du natürlich natürlich noch ein weiteres normales Makropaar wie das hier gerufene (CALL) Al_Rahmen_Tageszulassung_versetzen/_zurück haben, das den 2.Rahmen steuert. Das Makro, das du hier mitgeschickt hast, ist eine Ereignisprozedur (Eventhandler) für das Ereignis "Arbeitsblatt wird geändert". Und das ist eins nicht 2 oder mehr Ereignisse! Du musst hier halt auch noch das 2.Makropaar aufrufen. Da dieses aber sicher kaum anders aufgebaut sein muss als das erste, kannst du die Behandlung des 2.Rahmens auch in das vorhandene Makropaar (das du nicht mitgeschickt hast!) einbauen. Der Eventhandler selber ist also gar nicht sonderlich relevant, auf das Steuerungsmakro für den Rahmen kommt es eher an - Ausnahme: der im Handler angegebene Range (Target). Den könntest du aber an das Steuerungsmakro als Argument weiterreichen. Im Handler musst du nur noch den Bereich des 2.Rahmens vorsehen:
If Range("M17") = "" Or/And Range("xxx") = "" Then
Wie diese Bedingung genau aussehen muss, musst du selbst entscheiden. Gleiches gilt für deine weitere Vorgehensweise - 2.Makropaar oder Targetübergabe an Steuerungsmakros...
Call A1_Rahmen_Tageszulassung_versetzen(Target)
Call A1_Rahmen_Tageszulassung_zurück(Target)
Da der 2.Rahmen sicher anders heißt, wär's sicher sinnvoll, das Makropaar anders zu benennen. Aber wie gesagt, du kannst auch einfach das Makropaar duplizieren, umbenennen, an 2.Rahmen anpassen und im Handler die If-Verzweigung duplizieren (nochmal dasselbe für das 2.Ziel (Target).
Wenn du dann später mal weiter bist in VBA, wirst du selber sehen wie du das alles eleganter gestalten kannst.
Gruß Luc
PS: Events sind tückisch. Wenn du sowas verwendest, musst du dir die Abläufe gut überlegen (vor allem, wenn du noch andere Handler verwendest). Es können ganze Eventkaskaden ausgelöst wdn, Makros x-mal hintereinandet oder ineinander geschachtelt (immer, wenn ein Ereignis eintritt, wird sofort ein evtl vorhandener Handler gestartet, egal, ob gerade ein anderes Makro abgearbeitet wird) aufgerufen werden etc.
Anzeige
Anbei ALLE Makros
04.02.2005 10:09:57
walter
Hallo ... (leider hattest Du deinen Namen vergessen),
hier die Makros:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("U39")) Is Nothing Then
If Range("U39") = "" Then
A1_Rahmen_versetzen
Else
A1_Rahmen_zurück
End If
End If
End Sub

Sub A1_Rahmen_versetzen()
'--------- jetzt weiß ---------------------------
Worksheets("Kulanzblatt-VK").Select
Range("A10").Select
Worksheets("Kulanzblatt-VK").Unprotect ("wwpa")
ActiveSheet.Shapes("Text Box 127").Select
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 9
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
Range("I40").Select
End Sub
Sub A1_Rahmen_zurück()
Worksheets("Kulanzblatt-VK").Select
Range("A10").Select
Worksheets("Kulanzblatt-VK").Unprotect ("wwpa")
ActiveSheet.Shapes("Text Box 127").Select
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
Range("I40").Select
End Sub
'-------- Rahmen für Tageszulassung setzen ------------------------------------

Private Sub Worksheetw_Change(ByVal Target As Range)
If Not Intersect(Target, Range("M17")) Is Nothing Then
If Range("M17") = "" Then
A1_Rahmen_Tageszulassung_versetzen
Else
A1_Rahmen_Tageszulassung_zurück
End If
End If
End Sub

Sub A1_Rahmen_Tageszulassung_versetzen()
'--------- jetzt schwarz --------------------------
Worksheets("Kulanzblatt-VK").Select
Range("M17").Select
Worksheets("Kulanzblatt-VK").Unprotect ("wwpa")
ActiveSheet.Shapes("Text Box 131").Select
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 8
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
Range("M17").Select
Range("M17").Select
End Sub
Sub A1_Rahmen_Tageszulassung_zurück()
'--------- jetzt weiß ---------------------------
Worksheets("Kulanzblatt-VK").Select
Range("M17").Select
Worksheets("Kulanzblatt-VK").Unprotect ("wwpa")
Sub A2_Rahmen_weiß()
ActiveSheet.Shapes("Text Box 131").Select
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 9
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
Range("M17").Select
End Sub
Gruß Walter
Anzeige
AW: Anbei ALLE Makros
Galenzo
Private Sub Worksheetw_Change(ByVal Target As Range) ?!!
Worksheet_Change ist eine Ereignisprozedur und ist wiegesagt im Modul des jeweiligen Tabellenblattes zu finden !!
Also:
Sub A1_Rahmen_Tageszulassung_zurück()
Sub A1_Rahmen_Tageszulassung_versetzen()
in ein "Modul"
und die erste - also EINE (!) WorkSheet_Change im Modul "Tabelle1" - wenn dein Tabelle 1 so heißt. Private Sub Worksheet_Change(ByVal Target As Range)
AW: Anbei ALLE Makros - Lösung
Luc
Der Einfachheit halber... das geht nur so! Und nur da, wo's Galenzo gesagt hat. Nur die gerufenen 4 Makros gehören in das normale Modulblatt. Und dann lies bitte, bitte in der onLineHilfe nach - Ereignisprozedur(en)!!! Wir können keine Verantwortung übernehmen!

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("M17")) Is Nothing Then
If Range("M17") = "" Then
A1_Rahmen_Tageszulassung_versetzen
Else
A1_Rahmen_Tageszulassung_zurück
End If
Exit Sub
End If
If Not Intersect(Target, Range("U39")) Is Nothing Then
If Range("U39") = "" Then
A1_Rahmen_versetzen
Else
A1_Rahmen_zurück
End If
End If
End Sub

Gruß Luc
PS: Mein Name stand über dem PS. Deshalb heißt es ja PostScriptum.
Anzeige
Hatte ja schon...
04.02.2005 11:52:06
walter
Hallo Luc,
wie schon von mir beschrieben, ich habe das genau so duchgeführt bzw.
geändert.
Nochmals herzlichen Dank für die Unterstützung.
Gruß Walter
Gott, hatt'ich glatt übersehen - ok! - owT
Luc
Danke geklappt !!!
04.02.2005 10:26:33
walter
Hallo Luc,
Danke für deine ausführliche Beschreibung.
Habe angewandt und funktioniert !
Gruß Walter mb

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige