Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1300to1304
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
Werte eintragen / Auslesen UF VBA
07.03.2013 10:56:41
Alex
Hallo Leute,
bei Eintrag in einer verbundenen Zelle (aus A2 und B2) schreibt folgendes Makro:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sheet As Worksheet
Dim strPath As String, strSearch As String
strSearch = "Training"
strPath = ThisWorkbook.Path
strPath = Left(strPath, InStr(1, strPath, strSearch) + Len(strSearch))
Dim sUser As String
Dim rZelle As Range
Application.EnableEvents = False
sUser = Environ$("USERNAME")
Set rZelle = Target.Offset(0, 17)
'Sverweisformel
With rZelle
.Formula = "=VLookup(" & sUser & ",'" & _
strPath & "Basisdaten\[Basis.xls]Tabelle1'!K5:N200, 2, False) & "","" & "" "" &  _
VLookup(" & sUser & ",'" & _
strPath & "Basisdaten\[Basis.xls]Tabelle1'!K5:N200, 3, False)"
.Formula = .Value & " Ort " & Date
End With
ActiveSheet.EnableAutoFilter = True
Application.EnableEvents = True
End Sub
17 Spalten nach rechts versetzt den Namen des Eintragenden.
Mit diesem Makro:
Sub Bearbeiteranzeigen()
UserForm1.TextBox1.Text = Cells(ActiveCell.Row, ActiveCell.Column + 17).Value
UserForm1.Show
End Sub wird dann eine UF aufgerufen und der Wert angezeigt.
Das Problem:
Beim Eintragen des Wertes wird von Zellteil B2 ausgegangen und 17 Spalten weiter nach rechts (Spalte S) eingetragen,
beim Auslesen des Wertes per UF wird von Zellteil A2 ausgegangen und der Wert 17 Spalten weiter rechts (Spalte R) angezeigt. Da steht natürlich dann nix drin.
Ich habe schon versucht beide Codeteile anzupassen / anzugleichen:
UserForm1.TextBox1.Text = Cells(ActiveCell.Row,ActiveCell.Column + 17).Value
ersetzen durch
Target.Offset(0, 17)
und
Set rZelle = Target.Offset(0, 17)
ersetzen durch
Cells(ActiveCell.Row, ActiveCell.Column + 17).Value
Beides ohne Erfolg.
Weiß jemand rat?
Eine Erläuterungsdatei kann ich leider nicht anhängen, weil ich auf Arbeit bin(wird geblockt).
Vielen Dank und Gruß
Alex

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
verbundene Zellen ...
07.03.2013 13:07:13
Klaus
Hi Alex,
müssen die Zellen denn unbedingt verbunden sein? Lös den Zellenverbund, schon bist du das Problem los. Optisch kannst du das ganze mit A2:B2 horizontal "Über Auswahl zentrieren" Formatieren, dann siehts wieder genauso aus wie vorher.
Grüße,
Klaus M.vdT.
Gegner-von-Verbundenen-Zellen seit anno 2005

geht leider nicht...
07.03.2013 14:11:19
Alex
hallo Klaus,
ich weiß, keine verbundenen Zellen, aber das ist ja nur der Eingabebereich. Der Zielblbereich ist nicht verbunden. Ich kann es leider nicht anders machen, ist ein Festgelegtes Formular.
Mich wunddert nur, dass die beiden Schriftsätze so unterschiedlich reagieren und ich es nicht hinbekomme, die Codeschnipsel anzugleichen (die Makros funzen dann nicht).
Cells(ActiveCell.Row, ActiveCell.Column + 17) geht bei Worksheet change nicht
und Target.Offset(0, 17) geht bei Bearbeiteranz() nicht. das muss doch möglich sein. Ich übersehe hier nur eine Kleinigkeit!
Danke für deine Hilfe.
Alex

Anzeige
AW: geht leider nicht...
07.03.2013 14:34:15
Klaus
Hi,
dann "unmerge" die Zellen doch per Makro.
Grüße,
Klaus M.vdT.

geht nicht Klaus! Ich wünschte...
07.03.2013 14:55:19
Alex
... ich könnte ein Beispiel einstellen... dann wär's klarer.
Aber die Frage ist doch, was unterscheidet die beiden "Ausdrucksweisen" außer des "Offensichtlichen".
Das muss doch gehen... zumind. eines von Beiden für beide Codes.
Danke nochmal,
Gruß
Alex

Luc:-? wo bist du?
07.03.2013 15:59:07
Klaus
Hallo Alex,
in der Vergangenheit hatte ich hier im Forum bestimmt ein dutzend Threads, in denen ich gebetsmühlenartig geschrieben habe: "Verzichtet auf verbundene Zellen, die machen nur Ärger". Jedesmal kam dann Luc:-? in den Thread geschneit, hat mich für meine Vorurteile gescholten und das Problem unter Beibehaltung der verbund-Zellen mal eben gelöst. Vielleicht klappt das ja auch hier.
Also:
Verzichte IMMER auf verbundene Zellen! Die sind NIE zu etwas nütze!
Grüße,
Klaus M.vdT.
Luc, dein Auftritt?

Anzeige
Warum dann nicht nur dafür +18? Gruß owT
07.03.2013 22:37:18
Luc:-?
:-?

...jetzt mit Beispiel... dann wird es klarer...
08.03.2013 16:38:17
Alex
Hallo Luc und Klaus,
da ich jetzt zu Hause bin, kann ich euch mal ein Beispiel schicken. Dann wird mein Problem klarer.
In Tab. Red befinden sich die 3 Codes: "Private Sub Worksheet_Change(ByVal Target As Range)
", "Sub Bearbeiteranzeigen()" und "Private Sub Worksheet_SelectionChange".
In allen drei Codes müsste nur der gleiche Ausdruck (entweder "Target.Offset(0, 17)" oder "Cells(ActiveCell.Row, ActiveCell.Column + 17)") verwendet werden, um das Problem zu lösen. Bei "Private Sub Worksheet_SelectionChange" funktionieren beide.
Bei den anderen beiden Codes funktioniert jeweils nur ein Ausdruck.
https://www.herber.de/bbs/user/84251.xls
Danke für eure Hilfe,
Gruß
Alex

Anzeige
Hilfe! LUC:-? ? Kannst du noch mal schauen? owT
09.03.2013 15:19:06
Alex
.

Tja, geschaut hab' ich, aber ob ich dir ...
10.03.2013 00:08:26
Luc:-?
…dabei helfen will, Alex,
muss ich mir doch sehr überlegen… :-]
Wahrscheinlich hast du nicht den Einfluss, an der Vorgabe etwas zu ändern, aber dem, der das verbrochen hat, kann man gut und gern bescheinigen, dass er wohl ursprünglich nicht das notwendige Maß an Überlegung walten lassen und damit Nutzern/Aus­wertern unnötiger­weise die Arbeit schwer gemacht hat. :->
Der von dir festgestellte Effekt ist darin begründet, dass Target mal eine und mal 2 Zellen umfasst. Das Offset erfolgt dabei stets ab der letzten Zelle dieses Bereichs. Mit der ActiveCell wird aber stets die erste Zelle eines Auswahl­zell­bereichs, die hier entweder mit der Zelle oder der Haupt­zelle des Zell­verbunds identisch ist, ange­sprochen.
Die ganze Tabelle und ihr „Schatten“ wurden so hingedrechselt, dass der Versatz um 17 Zellen unbedingt erforderlich ist (nebenbei, wie konntest du nur annehmen, dass die bloße Erklärung ohne die Tabelle zu zeigen, die kritischen Geister eines XlFach­Forums davon - und von der evtl Notwendig­keit von VbZellen - so ohne Weiteres überzeugen würde? ), nur eben immer an der jeweils letzten Auswahl­Zelle orientiert.
Ich kann verstehen, dass deine Box stets leer bleibt → bei mir nämlich auch! Aber das mag ja in 1.Linie daran liegen, dass in allen Zellen deiner Schatten­tabelle, die ja hier immer angesprochen wird, auch absolut nichts steht („ein Schelm, wer Arges dabei denkt!“)… :->
Also fragt sich der geneigte Betrachter der vorhanden Subpro­zeduren, wie da wohl irgendwelche Angaben hinein­gelangen, und, falls das manuell geschieht, warum steht da nix?! Man könnte gar glatt an der Funktion der Tabelle verzweifeln — wo wird denn nun was und von wem wann eingetragen? Was erscheint dann in der UF und warum scheinen letzt­endlich alle Daten doppelt vorliegen zu sollen? Oder ist das nur scheinbar so? Da muss man unwillkürlich an die 8 großen W der Krimina­listik denken (Andere würden jetzt viell „glaskugeln“)…
Aber vielleicht reicht dir ja schon, wenn du in der Subproz, in der du zwingend ActiveCell verwenden zu müssen glaubst, statt­dessen Selection oder besser ActiveWindow.RangeSelection wählst. In der Ereignisproz kannst du dann wieder Target verwenden.
Gruß + schöSo, Luc :-?

Anzeige
erledigt, Danke. mit Text...
10.03.2013 23:59:36
Alex
Luc,
ich verstehe nicht, warum du so sarkastisch bist (falls ich den Ton missverstehe, betrachte folgende Zeilen als nichtig).
Ich bin (im Vergleich zu Dir und vielen anderen Antwortern) ein blutiger Anfänger, wie viele Andere auch hier im Forum. Deshalb sind wir Anfänger ja hier - um uns Hilfe, Rat und Tipps zu holen. Das ist wohl der Sinn und Zweck eines Forums. Nicht falsch verstehen bitte. Ich bin diesem Forum unendlich dankbar für die großartige Hilfe, die es mir in so vielen Jahren gegeben hat. Ich weiß, dass ich hier nicht die Lobby habe mich zu beschweren, denn ICH möchte ja etwas vom Forum und seinen vielen Helfern und nicht umgekehrt. Wenn ich dann aber lesen muß:
"Tja, geschaut hab' ich, aber ob ich dir ...…dabei helfen will, Alex,
muss ich mir doch sehr überlegen… :-]", dann enttäuscht mich das doch sehr.
Zu:
"Wahrscheinlich hast du nicht den Einfluss, an der Vorgabe etwas zu ändern" - nein, das schrieb ich bereits.
Zu:
"(nebenbei, wie konntest du nur annehmen, dass die bloße Erklärung ohne die Tabelle zu zeigen, die kritischen Geister eines XlFach­Forums davon - und von der evtl Notwendig­keit von VbZellen - so ohne Weiteres überzeugen würde? )" - auch das hatte ich bereits erklärt, ich befand mich zu diesem Zeitpunkt auf Arbeit, wo ein Einstellen von Dateien ins Internet geblockt wird. Deshalb habe ich eine in mühevoller Arbeit erstellte Musterdatei (stark vereinfacht) von zu Hause aus nachgeliefert.
Zu:
"Also fragt sich der geneigte Betrachter der vorhanden Subpro­zeduren, wie da wohl irgendwelche Angaben hinein­gelangen, und, falls das manuell geschieht, warum steht da nix?! Man könnte gar glatt an der Funktion der Tabelle verzweifeln — wo wird denn nun was und von wem wann eingetragen? Was erscheint dann in der UF und warum scheinen letzt­endlich alle Daten doppelt vorliegen zu sollen? Oder ist das nur scheinbar so?"
Ich möchte Dir noch einmal den Sinn der Datei erläutern.
Die von mir gesendete ist stark vereinfacht und deshalb ist der Sinn (oder für dich: Unsinn) vllt. nicht so eindeutig.
Die von dir sogenannte "Schattentabelle" ist natürlich ausgeblendet und beinhaltet die Daten (User-ID) der Eintragenden plus das Datum der Eintragung.
Diese Daten werden später in anderen Dateien wieder benötigt, um z.B. den Abnehmenden von Sportleistungen zu ermitteln (für Personalakten ect.).
Es werden also Leistungen und das dazu gehörige Datum vom Sportleiter eingetragen (in dem für alle Eintragenden sichtbaren Bereich), per VBA wird der "Eintragende" plus das Datum der Eintragung festgehalten (im nicht sichtbaren Bereich - "Schattentabelle". Also keine Dopplung der Daten.
Weiterhin kann in der selben Datei "Sport" jeder den "Eintragenden" einer Leistung ermitteln, falls es Ungereimtheiten (Falsche Leistung, ect.) geben sollte.
Zu:
"Oder ist das nur scheinbar so? Da muss man unwillkürlich an die 8 großen W der Krimina­listik denken (Andere würden jetzt viell „glaskugeln“)…"
Dies hat sich also nur scheinbar so für Dich dargestellt - mag an meiner Fähigkeit (oder Unfähigkeit) zu erläutern liegen.
Das 8. W müsstest Du mir mal erläutern, ich kenne nur die 7 W. ;-)
Ergebnis, falls es noch jemanden interessieren sollte (was ich nicht glaube):
"Sub Bearbeiteranzeigen()" war das Makro, welches nicht mit Target.Offset lief.
Mit Selection oder ActiveWindow.RangeSelection ging es leider auch nicht.
Mit ActiveCell.Offset(0, 17).Value kam ich allerdings zum gewünschten Ergebnis.
Wen es also interessiert, der ändert in der Beispieldatei den Code Bearbeiteranzeigen() entsprechend ab. Dann läuft es wie gewünscht und es erschließt sich nun - zusammen mit meinen Erläuterungen auch der Sinn (oder Unsinn) für den Ein oder Anderen.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sheet As Worksheet
Dim rZelle As Range
On Error GoTo Err
Application.EnableEvents = False
Set rZelle = Target.Offset(0, 17)
With rZelle
.Formula = "=VLOOKUP(4682232,ListeHäufigerEintragungen!A1:C5, 2, FALSE)"
.Formula = .Value & Date
End With
ActiveSheet.EnableAutoFilter = True
Application.EnableEvents = True
Err: Exit Sub
End Sub
Sub Bearbeiteranzeigen()
'bei diesem Code funktioniert Target.Offset nicht aber ActiveCell.Offset
UserForm1.TextBox1.Text = ActiveCell.Offset(0, 17).Value
UserForm1.Show
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If UserForm1.Visible = True Then UserForm1.TextBox1.Value = Target.Offset(0, 17).Value
End Sub

Dank an dich, Luc und das gesamte Forum (ist ernst gemeint)
Gruß und schönen Sonntag
Alex

Anzeige
Na, schön, aber eine Wsh_Change ...
11.03.2013 01:29:54
Luc:-?
…gab's in deinem Bsp nicht, Alex!
Das und die für eine Testdatei unzureichende Datenfüllung hat mich zu diesem Text veranlasst, nachdem ich dir deshalb zuerst gar nicht helfen wollte…
Allerdings hast du mich nun wieder mit deiner Lösung überrascht, denn nach dem, was erst du, dann ich festgestellt (und auch begründet) hatte, kann das gar nicht sein. Das Target in deiner Bearbeiten-Sub nicht fktionieren kann, liegt daran, dass es da gar keins gibt! Dass du seine Bedeutung ggf nicht recht verstehst, was relativ unwahrscheinlich ist, falls du dir die Mühe gemacht hast, die VBE-Hilfe zu Ereignisprozeduren zu lesen, was eigentlich selbstverständlich ist, bevor man so etwas (potenziell auch Gefährliches) einsetzt und dann noch dazu in einem Forum fragt (Lesen und Recherchieren im Vorfeld einer Frage setzen wir lt Forumsregeln voraus), könnte man aus deiner _Change-Proz ableiten, in der das zusätzliche Range-Objekt für den Target.Offset eigentl nicht unbedingt erforderlich wäre.
Ich hätte nicht ActiveWindow.RangeSelection für die Bearbeiten-Sub empfohlen, wenn es nicht fktionieren würde → die UF füllte sich. Dazu musste ich aber erst etwas in die Trainer-Tabelle eintragen, was eigentl deine Aufgabe gewesen wäre…
Du bist nicht der Erste hier und anderswo, der Halbfertiges und Unvollständiges zu Test u/o Fehlersuche anbietet. Im Laufe der Jahre waren es sicher Hunderte. Also musst du dich über manche Bemerkung nicht wundern. Es soll da noch viel Härteres geben… ;-]
Also das nächste Mal besseres Testmaterial, damit man nicht erst rumrätseln muss – geht alles von der Lösezeit ab und ist der Löselust nicht förderlich!
Gruß Luc :-?

Anzeige
OT Diesmal hast Du aber das Level versteckt ;-) oT
11.03.2013 09:14:27
Matthias

Das war schon früher ab und zu so, ...
11.03.2013 11:37:54
Luc:-?
…Matti,
das könnte ggf mit den nächtlichen Server-Aktivitäten zu tun haben, denn mir war das zuerst gar nicht aufgefallen. Oder, das passiert nach einer bestimmten BT-Menge eines AWers im Thread… ;-)
Gruß Luc :-?

18 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige