Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1540to1544
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

Zwei Codes auf einem Modul-Tabellenblatt1?

Zwei Codes auf einem Modul-Tabellenblatt1?
24.02.2017 22:24:42
Peter
Moinsen,
Die Codes habe ich in das Modul Tabelle1 eingefügt, wo auch beide Codes laufen sollen.
Problem: einzeln laufen die Codes einwandfrei. Beide laufen auch wenn ein Code im Modul "Tabelle1" und der andere in "Tabelle2" enthalten ist. Dies ist aber nicht Sinn der Sache, denn die beiden Codes sollen einfach auf Tabellenblatt 1 funktionieren.
Sobald die Codes in einem allgemeinen Modul oder im Modul "dieseArbeitsmappe" eingefügt werden laufen sie garnicht mehr.
Der eine Code erlaubt eine Mehrfachdropdownauswahl und der andere erlaubt "Formularzellen", bei denen der Text beim anklicken verschwindet.
Ich Danke Allen für ihre Mühe und Hilfe diesbezüglich.
Beide Codes zusammen:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address(0, 0) = "A7" And Target.Value = "TEST" Then
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
Else
If [A7].Value = "" Then [A7].Value = "TEST"
End If
If Target.Address(0, 0) = "A14" And Target.Value = "TEST2" Then
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
Else
If [A14].Value = "" Then [A14].Value = "TEST2"
End If
End Sub

---------------------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)
'** Mehrfachauswahl über DropDown-Liste (Gültigkeitsprüfung)
'** Einfügen im Code-Container des betreffenden Arbeitsblattes
'** Dimensionierung der Variablen
Dim rngDV As Range
Dim wert_old As String
Dim wertnew As String
'** Errorhandling
On Error GoTo Errorhandling
'** Mehrfachauswahl im definierten Bereich (Bsp. A1:A100) durchführen
If Not Application.Intersect(Target, Range("A1:A100")) Is Nothing Then
'**Range definieren
Set rngDV = Target.SpecialCells(xlCellTypeAllValidation)
If rngDV Is Nothing Then GoTo Errorhandling
'** Prüfen, ob eine gültige Zelle ausgewählt wurde und Werte eintragen
If Not Application.Intersect(Target, rngDV) Is Nothing Then
Application.EnableEvents = False
wertnew = Target.Value
Application.Undo
wertold = Target.Value
Target.Value = wertnew
If wertold  "" Then
If wertnew  "" Then
Target.Value = wertold & ", " & wertnew
End If
End If
End If
Application.EnableEvents = True
End If
Errorhandling:
Application.EnableEvents = True
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
ungetestet, aber ...
24.02.2017 22:52:01
Matthias
Hallo
Sobald die Codes in einem allgemeinen Modul oder im Modul "dieseArbeitsmappe" eingefügt werden laufen sie garnicht mehr.
Da gehören sie ja auch nicht hin.
Sie gehören in des entsprechende Modul des Tabellenblattes
Gruß Matthias
Schreibe 2 Pgmm FÜR ein normales Modul und ...
24.02.2017 23:05:29
Luc:-?
…rufe die unter jeweils anderen definierten Bedingungen (oder jenachdem beide nacheinander) aus der Ereignis-Prozedur auf, Peter;
ansonsten, falls alle beide immer ausgeführt wdn sollen, kannst du auch auf die Ereignisse der Mappe und sogar die von Xl zurück­greifen (letztere müssten aber erst angelegt wdn!), so dass gleich 3 dieser Prozeduren zV stehen. Natürlich muss sie als Ereignis-Prozedur der Mappe eine etwas andere Form haben, weshalb man solche Prozeduren immer im entsprd Modul anlegen sollte, niemals einfach irgend­etwas komplett einkopieren!
Gruß, Luc :-?
Besser informiert mit …
Anzeige
Ohje, hab' ich mich verguckt und an 2x ...
25.02.2017 15:14:49
Luc:-?
…dasselbe gedacht, Peter;
2 unterschiedliche sollten natürlich fktionieren, wenn nicht, stören sie sich halt ggseitig (siehe fcs).
Luc :-?
AW: Zwei Codes auf einem Modul-Tabellenblatt1?
25.02.2017 06:58:49
fcs
Hallo Peter,
damit es ncht zu unerwünschten Rückkopplungen kommt wenn Zellen für Werteingaben selektiert werden, musst du nach meiner Einschätzung das Selection_Change-Makro anpassn.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Address(0, 0)
Case "A7"
Select Case Target.Value
Case "TEST"
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
Case ""
Target.Value = "TEST"
End Select
If Range("A14") = "" Then Range("A14") = "TEST2"
Case "A14"
Select Case Target.Value
Case "TEST2"
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
Case ""
Target.Value = "TEST2"
End Select
If Range("A7") = "" Then Range("A7") = "TEST"
End Select
End Sub
LG
Franz
Anzeige
AW: Zwei Codes auf einem Modul-Tabellenblatt1?
25.02.2017 10:52:43
Peter
Vielen Dank für die Hilfe und das angepasste Makro!
Leider habe ich aktuell keine Möglichkeit die Anpassungen an meinem üblichen Platz (wo das Makro funktionieren muss) auszuprobieren.
Nun stelle ich fest, dass die beiden Makros einwandfrei auf einem neuen Tabellenblatt zusammen funktionieren, sobald ich mit einem Mac-Laptop und einer neueren Excel-Version arbeite.
Kann es sein, dass die das nicht laufen der beiden Makros an Excel 2010 und einem Windows PC liegt?
AW: Zwei Codes auf einem Modul-Tabellenblatt1?
25.02.2017 12:38:12
fcs
Hallo Peter,
Kann es sein, dass die das nicht laufen der beiden Makros an Excel 2010 und einem Windows PC liegt?
Zum Testen unter Windows / Excel 2010 bräuchte ich eine Beispiel-Datei.
So wie du dein Worksheet_Selection_Change-Makro bisher aufgebaut hast werden imer beide Zellen mit "Test" bzw. "TEST2" ausgefüllt sobald due eine bliebige Zelle im Blatt anklickst. Keine Ahnung, ob du das so willst.
Bezüglich Arbeiten mit Excel-Makros auf Mac kann ich dir nicht viel sagen.
LG
Franz
Anzeige
evtl. zu kurz gegriffen
25.02.2017 14:10:48
Michael
Hi,
Franz' Antwort finde ich etwas zu kurz gegriffen: es gibt einige Schreibzugriffe, bei denen die Events nicht ausgeschaltet sind.
Hier eine überarbeitete Variante, die so funktioniert, wie ich es verstanden habe:
Option Explicit
Dim aus As Boolean
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Stop  ' das dann rauslöschen, wenn es läuft
If aus Then aus = False: Exit Sub
If Target.Column  1 Then Exit Sub
If Target.Count  1 Then Exit Sub
If Target.Row = 7 Then
Application.EnableEvents = False
If Target.Value = "TEST" Then
Target.Value = ""
Else
If Target.Value = "" Then Target.Value = "TEST"
End If
If Range("A14") = "" Then Range("A14") = "TEST2"
Application.EnableEvents = True
Else
If Target.Row = 14 Then
Application.EnableEvents = False
If Target.Value = "TEST2" Then
Target.Value = ""
Else
If Target.Value = "" Then Target.Value = "TEST2"
End If
If Range("A7") = "" Then Range("A7") = "TEST"
Application.EnableEvents = True
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wertold As String ' und wenn Zahl? warum nicht Variant?
Dim wertnew As String ' und wenn Zahl? warum nicht Variant?
Dim vt
Stop  ' das dann rauslöschen, wenn es läuft
If Target.Column  1 Then Exit Sub
If Target.Count  1 Then Exit Sub
If Target.Row > 100 Then Exit Sub
' Diskussion dazu u.a. in
' https://www.herber.de/forum/archiv/ _
696to700/
_
' 696053_VBA_Abfrage_ob_Gueltigkeitsregel_vorhanden.html
On Error Resume Next
vt = Target(1).Validation.Type
On Error GoTo 0
If Val(vt) = 0 Then MsgBox "keine Validation": Exit Sub
On Error GoTo Errorhandling
Application.EnableEvents = False
wertnew = Target.Value
Application.Undo
wertold = Target.Value
Target.Value = wertnew
If wertold  "" And wertnew  "" Then Target.Value = wertold & ", " & wertnew
aus = True
Errorhandling:
Application.EnableEvents = True
End Sub

Nur mit Option explicit merkt man, daß wert_old gedimt ist, aber wertold verwendet wird.
Die beiden stop sind dazu da, daß man mitverfolgen kann, wann welches Makro aktiviert wird.
Die globale Variable aus steuert, daß das erste Makro nicht direkt nach dem zweiten ausgeführt wird - sofern das erwünscht ist.
Schöne Grüße,
Michael
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige