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

Wert in Zelle bei Änderung in Liste eintragen

Wert in Zelle bei Änderung in Liste eintragen
24.02.2007 14:55:03
Fritz_W
Hallo Forumsbesucher,
ich benötige noch einmal die Unterstützung aller VBA - Kenner.
Wie kann ich erreichen, dass der Zellwert in der Zelle J3 bei Änderung in die erste freie Zeile der Spalte C - beginnend jedoch erst ab Zeile 18 eingetragen wird und dies nur dann geschieht, wenn der gleiche Wert in der Spalte C ab Zeile 18 noch in keiner Zelle eingetragen ist.
Zur Verdeutlichung: In der Zelle J3 habe ich über eine Gültigkeitsprüfung geregelt, dass Eingaben entsprechend einer Liste möglich sind. Erfolgt nun ein erster Eintrag in J3 sollte dieser Zelleintrag in die Zelle C18 geschrieben werden. Beim nächsten Eintrag in J3 sollte dieser Zelleintrag - sofern nicht eben identisch mit dem vorherigen und deshalb in C18 enthaltenen Wert - dieser in die Zelle C19 geschrieben werden. In die Zelle C20 erfolgt dann der nächste Zelleintrag aus J3, sofern dieser nicht bereits in C18 oder C 19 steht.
Ich hoffe, das ich mein Anliegen für euch nachvollziehbar dargelegt habe und freue mich über jede Form von kompetenter Hilfe
mfg
Fritz

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

Betreff
Datum
Anwender
Anzeige
AW: Wert in Zelle bei Änderung in Liste eintragen
24.02.2007 17:48:14
Nassauer
Hallo,
funktioniert wie folgt (ungetesteter Code, könnte noch einen kleinen Bug haben):
Private Sub Worksheet_Change(ByVal Target As Range)
if target.address="$J$3" then
theVal=target.value
theRow=18
set theActRange = Range("C" & theRow)
found=false
do until theActRange.value="" or found
found=(theActRange.value=theVal)
theRow=theRow+1
set theActRange = Range("C" & theRow)
loop
if not found then theActRange.Value=theVal
end if
End Sub

Viele Grüße
Wolfgang
AW: Wert in Zelle bei Änderung in Liste eintragen
24.02.2007 19:00:01
Fritz_W
Hallo Wolfgang,
den Code hab ich getestet: Funktioniert einwandfrei, soweit in der Tabelle nicht bereits ein Worksheet_Change Ereignis enthalten ist.
In der betreffenden Tabelle ist jedoch bereits das unten aufgelistete Worksheet_Change Ereignis enthalten, so dass es unter diesen Voraussetzungen nicht läuft und ich bin insoweit natürlich vollkommen überfordert.
Kann man die beiden Codes aufeinander "abstimmen"? Würde mich freuen, wenn Du mir weiterhelfen könntest!
Vielen Dank und schöne Grüße
Fritz
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Cells(1, 3) = 1 And sngT = 0 Then
sngT = Timer
ElseIf Cells(1, 3) = 2 And sngT > 0 Then
If lngZ < 18 Then lngZ = 18
Cells(lngZ, 10) = Application.Round(Timer - sngT, 1)
lngZ = lngZ + 1
sngT = 0
ElseIf Target.Address = "$J$2" Then Range("J3").ClearContents
If Target.Address = "$J$3" Then
theVal = Target.Value
theRow = 18
End If
Application.EnableEvents = True
End Sub

Sub init()
lngZ = 18
sngT = 0
Application.EnableEvents = False
Range(Cells(18, 10), Cells(Rows.Count, 10)).ClearContents
Application.EnableEvents = True
End Sub

Anzeige
Code berichtigt!
24.02.2007 19:58:22
Fritz_W
Hallo Forumsbesucher,
ich hatte vergeblich versucht, Wolfgangs Code in den bereits vorhandenen "einzubauen", was für einen VBA-Unkundigen wohl nur schiefgehen kann. Deshalb hatte ich auch nicht den korrekten "bislang" in diesem Tabellenblatt enthaltenen Code beigefügt.
Bitte ausdrücklich um Entschuldigung und hoffe weiterhin auf eure Unterstützung.
Gruß
Fritz
Der bisher im Tabellenblatt enthaltene Code:
Option Explicit
Dim lngZ As Long, sngT As Single
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Cells(1, 3) = 1 And sngT = 0 Then
sngT = Timer
ElseIf Cells(1, 3) = 2 And sngT > 0 Then
If lngZ < 18 Then lngZ = 18
Cells(lngZ, 10) = Application.Round(Timer - sngT, 1)
lngZ = lngZ + 1
sngT = 0
ElseIf Target.Address = "$J$2" Then Range("J3").ClearContents
End If
Application.EnableEvents = True
End Sub

Sub init()
lngZ = 18
sngT = 0
Application.EnableEvents = False
Range(Cells(18, 10), Cells(Rows.Count, 10)).ClearContents
Application.EnableEvents = True
End Sub

Anzeige
AW: Code berichtigt!
24.02.2007 22:14:12
Nassauer
Hi Fritz,
so recht sehe ich nicht auf den ersten Blick, was dein bestehender Code da im Detail tut - dieser scheint jedenfalls globale Variable zu verwenden, was den Verdacht nahelegt, dass hier noch andere Codes im Einsatz sind. Wenn du meinen Code unter dem bestehenden einfügst, klappts dann nicht?
Wenn neiin, dann befürchte ich, dass sich das mal jemand ansehen sollte, der den bestehenden Code kennt.
Viele Grüße
Wolfgang
AW: Code berichtigt!
25.02.2007 10:18:04
Fritz_W
Hallo Wolfgang,
vielen Dank für die erneute Hilfe.
Vielleicht helfen diese Informationen weiter:
Wenn ich deinen Code - wie vorgeschlagen - an den bisherigen - anfüge, bricht das Makro mit dem Hinweis auf fehlende Variablendefinition (Variable theVal nicht definiert) ab.
Ich habe daraufhin die iim Tabellenblatt bereits definierte Variablendefinition aufgehoben (als Kommentar ausgewiesen, siehe unten). Daraufhin erfolgt zwar kein Abbruch mehr, jedoch funktioniert dein Code nicht mehr in gewünschter Weise, da immer nur ein Eintrag in die Zelle C18 erfolgt, ein bereits bestehender Zellwert in dieser Zelle jeweils überschrieben wird. Als weitere Folge funktioniert zudem das bisherige Ereignismakro in dieser Tabelle überhaupt nicht mehr.
Sollte man das nicht ändern können, muss ich wohl einen völlig anderen Lösungsansatz wählen. Auf den Einsatz des bisherigen Makros kann ich in dieser Tabelle nicht verzichten.
Dabei wäre ich dann aber wohl auch auf Hilfe in diesem Forum angewiesen.
Schöne Grüße und nochmaligen Dank
Fritz
Anzeige
AW: Code berichtigt!
25.02.2007 12:08:52
Nassauer
Hallo Fritz,
aufgrund der neuen Informationen müsste es mit folgender Methode (neuer Code und alter Code zusammengefügt, alle neuen Teile mit '********* .... dargestellt) klappen.
Viele Grüße
Wolfgang
Private Sub Worksheet_Change(ByVal Target As Range)
‘************** neue Variablendeklaration ---- > Start
Dim theVal as String, theActRange as Range, theRow as Integer, found as Boolean
‘************** neue Variablendeklaration ---- > Ende
Application.EnableEvents = False
If Cells(1, 3) = 1 And sngT = 0 Then
sngT = Timer
ElseIf Cells(1, 3) = 2 And sngT > 0 Then
If lngZ < 18 Then lngZ = 18
Cells(lngZ, 10) = Application.Round(Timer - sngT, 1)
lngZ = lngZ + 1
sngT = 0
ElseIf Target.Address = "$J$2" Then Range("J3").ClearContents
End If
Application.EnableEvents = True
‘************** neuer Code ---- > Start
if target.address="$J$3" then
theVal=target.value
theRow=18
set theActRange = Range("C" & theRow)
found=false
do until theActRange.value="" or found
found=(theActRange.value=theVal)
theRow=theRow+1
set theActRange = Range("C" & theRow)
loop
if not found then theActRange.Value=theVal
end if
‘************** neuer Code ---- > Ende
End Sub

Anzeige
AW: Code berichtigt!
25.02.2007 12:13:10
Nassauer
Hi Fritz - kleine Änderung an der Variablendeklaration - nimm den Code hier, kannst 1:1 reinkopieren und neuen + alten dadurch ersetzen:
Private Sub Worksheet_Change(ByVal Target As Range)
‘************** neue Variablendeklaration ---- > Start
Dim theVal as String, theActRange as Range, theRow as LONG, found as Boolean
‘************** neue Variablendeklaration ---- > Ende
Application.EnableEvents = False
If Cells(1, 3) = 1 And sngT = 0 Then
sngT = Timer
ElseIf Cells(1, 3) = 2 And sngT > 0 Then
If lngZ < 18 Then lngZ = 18
Cells(lngZ, 10) = Application.Round(Timer - sngT, 1)
lngZ = lngZ + 1
sngT = 0
ElseIf Target.Address = "$J$2" Then Range("J3").ClearContents
End If
Application.EnableEvents = True
‘************** neuer Code ---- > Start
if target.address="$J$3" then
theVal=target.value
theRow=18
set theActRange = Range("C" & theRow)
found=false
do until theActRange.value="" or found
found=(theActRange.value=theVal)
theRow=theRow+1
set theActRange = Range("C" & theRow)
loop
if not found then theActRange.Value=theVal
end if
‘************** neuer Code ---- > Ende
End Sub

Anzeige
AW: Code berichtigt!
25.02.2007 14:55:19
Fritz_W
Hallo Wolfgang,
danke für die viele Arbeit, die du für mich investiert hast.
Gruß
Fritz

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige