Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1192to1196
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

Registernamen aus Zelle

Registernamen aus Zelle
Christian
Hallo zusammen,
ich habe folgendes Makro mit dem ich aus den Zellen D1 und E1 den Registernamen aus den Beiden Zellen übernehmen kann. Funktioniert soweit wunderbar. Nun möchte ich diese Makro im Register "Tabelle 2" einfügen. Die Inhalte der Zelle soll sich Excel dann aus D1 und E1 aus dem Register mit Namen "Tabelle 1" holen. Ich habe es mit sheet.select probiert, komme aber nicht weiter. Weiss jemand Rat? Vielen Dank ...
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$D$1" Or Target.Address = "$E$1" Then
Name = Range("D1") & " " & Range("E1")
End If
End Sub

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
versteh ich nicht ...
12.01.2011 18:57:41
Matthias
Hallo
Du kannst doch nicht 2 Tabellenreiter mit dem gleichen Namen versehen.
Oder was willst Du wann und wo machen ?
Gruß Matthias
AW: versteh ich nicht ...
12.01.2011 19:19:21
Christian
Hallo Matthias,
da habe ich mich falsch / ungenau ausgedrückt. Wenn man Excel öffnet sind standardmäßig drei Registerkarten auf. Die heißen Tabelle1, Tabelle2 und Tabelle3 (ich hoffe man nennt diese auch "Registerkarten" oder?). Nun möchte ich nichts weiter als das obiges Makro im Register "Tabelle2" läuft (draufklicken, codeansicht, makro einfügen).Im Register "Tabelle1" steht dann z.b. in D1 "Max" und in E1 "Mustermann". Register "Tabelle2" soll dann in "Max Mustermann" automatisch umbenannt werden.
Das obige Makro macht das zwar, aber immer nur im selben Register, also z.b. nur in "Tabelle1". Es schaut nicht in andere Registerkarten. habs auch mit der Formulierung "Tabelle1!" probiert....wird nix.
Hoffe dies ist genauer :-)
Anzeige
AW: versteh ich nicht ...
12.01.2011 20:38:00
ransi
HAllo Christian
Dann versuchst du sowas ?
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Address = "$D$1" Or Target.Address = "$E$1" Then
        Target.Parent.Name = Range("D1") & " " & Range("E1")
    End If
End Sub


Da sollte aber noch ne Fehlerüberprüfung rein:
Der Blattname ist gültig,
Es gibt noch kein Blatt mit dem selben NAmen.
ransi
Anzeige
AW: versteh ich nicht ...
12.01.2011 20:47:56
Christian
Hallo ransi,
scheint schwer zu verstehen zu sein, was ich meine :-)
Ich versuchs nochmal anders: Man öffnet excel und legt sich in einer arbeitsmappe zwölf registerkarten mit allen Monaten von januar bis dezember an. für mein beispiel benötigen wir jetzt nur januar und februar.
Bei januar schreibe ich in A1: "hallo" und in A2 "du"
Das makro läuft in der registerkarte februar. Das makro schaut dann bei der registerkarte januar, liest dort die zellen A1 und A2 aus und benennt nun die Registerkarte Februar in "hallo du" um. es kommt somit nicht zweimal der gleiche name vor (es sein denn, man schreibt in a1 januar und lässt a2 leer, dann könnte es meckern......)
Anzeige
einfach das entspr. Register referenzieren
12.01.2011 20:46:26
Matthias
Hallo
also so ?
Code in Tabelle1
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$D$1" Or Target.Address = "$E$1" Then
Tabelle2.Name = Range("D1").Value & " " & Range("E1").Value
End If
End Sub
Gruß Matthias
AW: einfach das entspr. Register referenzieren
12.01.2011 21:13:45
Christian
Hallo Matthias,
juchhu :-) Genau das was ich suche. simple. schon fast peinlich. aber was soll ich machen, als vba supa-leie....
Ich denke einfach nur tabelle2.name zu schreiben ohne "excel.range" oben würde nicht gehen. da wäre ich dann nicht drauf gekommen. Was heißt excel.range?
Vielen Dank !!! supi!
Christian
Anzeige
Range ...
12.01.2011 21:26:36
Matthias
Hallo
Range gibt ein Objekt zurück, das eine Zelle oder einen Zellbereich darstellt.
Such mal in der VBA-Hilfe nach Range. Da ist das alles beschrieben.
Gruß Matthias
AW: Range ...
12.01.2011 21:29:38
Christian
Hi Matthias,
ich nochmal. du scheinst dich ja auszukennen. nun läuft ja alles. ABer. Ich habe folgende zwei Makros in "Tabelle1". Excel gibt eine fehlermeldng: Fehler beim Kompilieren, Mehrdeutiges name: Worksheet_Change
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$18" Then
If LCase$(Target.Text) = "wupp" Then
Range("F18:G26").Interior.Color = Range("C2").Interior.Color
Else
Range("F18:G26").Interior.ColorIndex = xlColorIndexNone
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$C$18" Or Target.Address = "$D$18" Then
Tabelle2.Name = Range("C18").Value & ", " & Range("D18").Value
End If
If Target.Address = "$C$33" Or Target.Address = "$D$33" Then
Tabelle3.Name = Range("C33").Value & ", " & Range("D33").Value
End If
End Sub
das liegt daran, das das_change 2x auftaucht.
Was kann ich tun? habe versucht das makro mit dem umbennen in die Arbeitsmappe zu packen. geht nit.
Gruß,
Christian
Anzeige
AW: Range ...
12.01.2011 22:26:42
Gerd
Hallo Christian,
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("F18,C18,D18,C33,D33")) Is Nothing Then
If Target.Count = 1 Then
Select Case Target.Address
Case "$F$18": Range("F18:G26").Interior.Color = IIf(LCase$(Target.Text) = "wupp", Range("C2"). _
Interior.Color, xlColorIndexNone)
Case "$C$18", "$D$18": Tabelle2.Name = Range("C18").Value & ", " & Range("D18").Value
Case "$C$33", "$D$33": Tabelle3.Name = Range("C33").Value & ", " & Range("D33").Value
End Select
End If
End If
End Sub
Gruß Gerd
Anzeige
kürzer
13.01.2011 14:13:58
Erich
Hi Gerd,
das sollte auch ausreichen:

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$F$18":
Range("F18:G26").Interior.Color = _
IIf(LCase$(Target.Text) = "wupp", Range("C2").Interior.Color, xlColorIndexNone)
Case "$C$18", "$D$18"
Tabelle2.Name = Range("C18").Value & ", " & Range("D18").Value
Case "$C$33", "$D$33"
Tabelle3.Name = Range("C33").Value & ", " & Range("D33").Value
End Select
End Sub
Die beiden If-Bedingungen werden im Select Case ja automatisch mitgeprüft.
Viel langsamer dürfte das hier auch nicht sein.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: kürzer
13.01.2011 19:43:07
Gerd
Hallo Erich,
wenn ich nochmal kurz darüber nachdenke, bin ich für einen Kompromiss.
Die innere IF-Then-EndIf kann entfallen. Da stimme ich dir zu.
Bei der äußeren hängt es eigentlich davon ab, in welcher Relation / wie häufig Zellen "innerhalb" u. außerhalb geändert werden. Diese sollte m.E. drinn bleiben.
Aber anscheinend ist dies hier nur noch "just for fun", weil der Fragesteller sich nicht mehr äußert.
Gruß Gerd
AW: kürzer
14.01.2011 17:46:19
Christian
Hallo zusammen,
doch, der Fragesteller meldet sich. Kann ich selten zeitnahe machen. Aber ihr könnt sicher sein, dass wenn ich sowas ins Forum stelle, es nicht nur "just for fun" ist. Würde keinen Sinn machen.
Also: Als VBA-Laie kann ich nur soviel sagen, dass das Programm von Erich aus Kamp-Linfort bis jetzt prächtig funktioniert. Sowohl die Umbenennung der Registerkarten läuft, als auch die Farbauswahl. Beides nebenher. So wie ich es brauche. Danke an euch beide.
Ob das allerdings auch bei einer größeren Tabelle funktioniert kann ich erst in einigen Wochen sagen: In 150 Zellen müssen jeweils (!) 20 Begriffe mit jeweils 20 Farben zugeordnet werden. Durch Copy/Paste ist das zwar einfach, aber immerhin muss ich noch in obiger Programmierung jeweils die Zellenbezüge ändern. Das braucht seine Zeit. Ihr könnt aber sicher sein, dass ich mich melde. Ich probiere auch beide Programmvarianten aus.
...Geduld.... :-)
Christian aus Herne
Anzeige
aha!
14.01.2011 18:50:57
Christian
...und hier kommt auch schon die Antwort:
Hallo Gerd/Erich,
ich habe getestet: Für die Codes von Euch gelten jeweils: Solange Excel nur nach einem Wort sucht ok, gibt man allerdings einen zweiten Suchbegriff ein und Excel soll die Zellenfarbe auf WortNr.2 in FarbeNr2 ändern, gehts nicht. Es gilt immer nur das letzte Ereignis, was zuerst steht.
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$F$18":
Range("F18:G26").Interior.Color = _
IIf(LCase$(Target.Text) = "m", Range("F5").Interior.Color, xlColorIndexNone)
Case "$F$18":
Range("F18:G26").Interior.Color = _
IIf(LCase$(Target.Text) = "d", Range("E5").Interior.Color, xlColorIndexNone)
Case "$C$18", "$D$18"
Tabelle2.Name = Range("C18").Value & ", " & Range("D18").Value
Case "$C$33", "$D$33"
Tabelle3.Name = Range("C33").Value & ", " & Range("D33").Value
End Select
End Sub
Die Änderung der Zellenfarbe reagiert nur auf "m", nicht auf "d". Steht "d" als erstes, reagierts nur auf "d"....
Ein Matthias hat mir in einem anderen Beitrag folgendes programmiert:
Private Sub Worksheet_change(ByVal Target As Range)
If Target.Address = "$F$18" Then
Select Case LCase$(Target.Text)
Case Is = "wupp1"
Range("F18:G26").Interior.Color = Range("I5").Interior.Color
Case Is = "wupp2"
Range("F18:G26").Interior.Color = Range("J5").Interior.Color
Case Is = "wupp3"
Range("F18:G26").Interior.Color = Range("K5").Interior.Color
End Select
End if
End Sub
Dies läuft. Wenn ich mir beide Makros anschaue, steht - für mich - das absolut selbe darin. Trotzdem mit unterschiedlichen Resultaten....
Gruß,
Christian
Anzeige
AW: aha!
14.01.2011 19:58:03
Gerd
Hallo Christian,
deine Fragestellung hier war, zwei gezeigte Prozeduren zu verbinden.
Wenn Du indes unter Select Case zwei Case identisch ausweist, wird nur die erste der beiden Anweisungen ausgeführt.
Gruß Gerd
Select Case geschachtelt
14.01.2011 20:16:32
Erich
Hi Christian,
meinst du das vielleicht so?

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$F$18"
Select Case LCase$(Target.Text)
Case "m"
Range("F18:G26").Interior.Color = Range("F5").Interior.Color
Case "d"
Range("F18:G26").Interior.Color = Range("E5").Interior.Color
Case Else
Range("F18:G26").Interior.Color = xlColorIndexNone
End Select
Case "$C$18", "$D$18"
Tabelle2.Name = Range("C18").Value & ", " & Range("D18").Value
Case "$C$33", "$D$33"
Tabelle3.Name = Range("C33").Value & ", " & Range("D33").Value
End Select
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Select Case geschachtelt
16.01.2011 10:21:26
Christian
Hallo Erich,
ja genau so. Läuft jetzt.
Ich versuche mich gerade mit dem makro-rekorder, komme aber nur bedingt weiter. Ich habe zwei Registerkarten: Tabelle1 und Tabelle2 (Standardnamen beim öffnen von excel). Nachdem nun obiges Makro einen Zellenbreich eingefärbt hat, soll ein weiteres Makro - das in Tabelle2 läuft - den in Tabelle1 gefärbten Bereich in Tabellenblatt2 kopieren, und zwar Zellenfarbe und Zelleninhalt.
Also z.b. der Bereich F18:G26 soll komplett in tabellenbaltt2 kopiert werden,das ganze automatisch, ohne dass man erst in die zelle klicken und enter drücken müss. bis jetzt wird der zellenbreich nur nach enterdrücken eingefärbt.
Der makrorecorder hat mir folgendes makro aufgezeichnet, dass ich immer manuell starten muss:
Sub Makro1()
' Makro1 Makro
ActiveWindow.SmallScroll Down:=3
Sheets("Tabelle1").Select
Range("A1:B2").Select
ActiveWindow.SmallScroll Down:=-3
Selection.Copy
Sheets("Tabelle2").Select
Range("A4").Select
ActiveSheet.Paste
End Sub
Gruß, Christian
und anschließend kopieren
16.01.2011 11:32:38
Erich
Hi Christian,
den Zusammenhang deiner Aufzeichnung zum bisherigen Makro versuche ich mal zu raten.
Meinst du das hier?

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$F$18"
Select Case LCase$(Target.Text)
Case "m"
Range("F18:G26").Interior.Color = Range("F5").Interior.Color
KopiereF18G26
Case "d"
Range("F18:G26").Interior.Color = Range("E5").Interior.Color
KopiereF18G26
Case Else
Range("F18:G26").Interior.Color = xlColorIndexNone
End Select
Case "$C$18", "$D$18"
Tabelle2.Name = Range("C18").Value & ", " & Range("D18").Value
Case "$C$33", "$D$33"
Tabelle3.Name = Range("C33").Value & ", " & Range("D33").Value
End Select
End Sub
Sub KopiereF18G26()
Application.EnableEvents = False
Sheets("Tabelle1").Range("F18:G26").Copy Destination:= _
Sheets("Tabelle2").Range("A4")
Application.EnableEvents = True
End Sub
Da wird - nach Änderung in Tab1!F18 - abhängig von ("m", "d" oder sonst) eingefärbt,
bei "m" oder "d" wird anschließend kopiert, hier auf Tabelle2!A4.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: und anschließend kopieren
16.01.2011 16:33:00
Christian
Hallo Erich,
du bist ein Fuchs! Läuft bestens :-) Man kann also prozeduren schreiben, diese nennen wie man will und dann innerhalb einer anderen Prozedur als "dann" bedingung aufrufen. toll! :-)
Allerdings stehe ich gerade vor einem Problem das ich nicht bedacht habe.
Der Name"Tabelle2" ist variabel. Wenn also ein anderer Name darin steht, meckert excel, weil es
das Registerblatt nicht mehr finden kann. "Index außerhalb des gültigen bereichs" ist ja logisch.
Besser wäre es deshalb, wenn ich diesen Code in tabelle2 (name ist ja jetzt egal) reinkopiere.
Von da aus schaut excel dann immer in Tabelle1 (der name bleibt immer gleich!).
Wenn in zelle XY von tabelle1 ein bestimmtes Wort, dann kopiere von tabelle1xy bereich XYZ in
tabelle2
Der Vorteil wäre dann, dass ich das beliebig oft in registerblätter verschiedenen namen verändern kann.
Worksheet"tabelle1".select, etwa?
If Target.Address = "$G$27" Then
Select Case LCase$(Target.Text)
Case Is = "ok"
Kopiere
End Select
End If
Sub Kopiere()
Application.EnableEvents = False
Sheets("Tabelle1").Range("G18:R26").Copy Destination:= _
Sheets("NAME HIER MUSS VARIABEL SEIN!!!!").Range("X4")
Application.EnableEvents = True
Ereignisprozedur?
16.01.2011 18:13:15
Erich
Hi Christian,
das "Reizwort" in deinem Beitrag ist das "immer" in "schaut excel dann immer in Tabelle1".
Wie konkret meinst du "immer"? Du willst doch zwischendurch auch mal etwas anderes tun,
z. B. ein paar Daten eingeben können, oder?
Worksheet_Change() ist eine Ereignisprozedur, deren Code im betreffenden Blatt
(dem Blatt, in dessen Code die Prozedur steht - also bisher in Tabelle1) steht.
Sie wird automatisch von Excel gestartet, wenn in dem Blatt (zumindest) ein Wert geändert wird,
entsprechend heißt es ja auch Worksheet_Change().
Übergeben wird dabei (in der Variablen Target) der Bereich, in dem die Änderung stattfindet.
Jetzt möchstest du diesen Excel-Automatismus irgendwie "nachbauen".
Eine eigene Prozedur soll nun Tabelle1 überwachen.
Nur: Wer startet diese Prozedur - immer wieder, denn sie kann ja nicht dauernd laufen und alles andere verhindern?
Man könnte mit OnTime etwas machen - z. B. alle 20 Sekunden wird die Überwachung neu gestartet.
Aber das ist aufwändig und vermutlich wenig effektiv.
Für wichtiger hielte ich zunächst, andere Möglichkeiten zu suchen.
Der Name "Tabelle2" fest im Code ist natürlich falsch, wenn das Zielblatt anders heißen kann.
Gibt es vielleicht eine Möglichkeit, das Zielblatt der Kopie eindeutig zu ermitteln,
- aus dem Namen des Zielblatts (fängt mit "ABC" an),
- aus seiner Position (etwa das 3. Blatt in der Blattliste) oder irgend welchen
- Eigenschaften des Blatts (in B7 des Zielblatts steht immer der Text "hierhin", aber in keinem anderen Blatt).
Dann könnte man es dabei belassen, dass die Prozedur eine Ereignisprozedur der Tabelle1 ist
und (nur) bei Änderung in Tabelle1!F18 das aktuell richtige Zielblatt sucht, um dann dahin zu kopieren.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Ereignisprozedur?
16.01.2011 20:54:06
Christian
Hallo Erich,
*puh* - auf was man bei vba alles achten muss :-/
Also, ich habe etwas verändert und versuche es neu zu erklären:
Registerblatt "Tabelle1" bleibt, was den Namen angeht, unverändert. Steht übrigens IMMER an Position1.
In Registerblatt 2, dessen Name sich auch ändern KANN, soll tatsächlich eine Prozedur laufen, die
- jetzt kommt die Änderung - sobald in Tabelle1 in Zelle G27 "ok" (UND WEITERE ZELLEN, also nicht nur eine einzig) eingegeben wird, den Bereich G18-R27 (farbe und inhalt) aus "Tabelle1" in Registerblatt 2 kopiert.
(wohin ist erstmal egal, hauptsache da rein, position kann ich ja immer noch ändern.)
Die Prozedur soll starten sobald die Excel Datei geladen wird.
Nun habe ich ja die letzten Tage schon ein wenig - Betonung auf wenig :-) - über VBA gelernt. Ich bin mir sicher, dass man diese Prozedur in "Registerblatt 2" schreiben muss. Wie das nun heißt, ist der Prozedur völlig egal, da sie ständig "Tabelle1" - mit statischem Name - auf das Wort"ok" überwachen soll. Da ich an die 50 Registerblätter habe, kann ich diese Prozedur dann - so hoffe ich - einfach in jedes einzelne Blatt schreiben. Alle 50 überwachen einen jeweils anderen Bereich in "Tabelle1" auf das Wort "ok" und kopieren dann einen festgelegten Bereich aus "Tabelle1" zu sich selbst.
Besser so? :-)
Christian
Ereignisprozedur wo?
17.01.2011 10:33:44
Erich
Hi Christian,
ich antworte hier mal auf deinen obersten Beitrag - sonst rutschen wir in der Liste immer weiter nach rechts.
Wie genau hast du meinen letzten Beitrag gelesen? Antworten darauf gibst du mir kaum. :-(
Ich meine insbesondere meine Frage:
"Gibt es vielleicht eine Möglichkeit, das Zielblatt der Kopie eindeutig zu ermitteln?"
Und meine Hinweise zu "immer".
(Da hatte ich etwas über die Konsequenzen und evtll. Möglichkeiten mit OnTime geschrieben.)
Jetzt hast du das "immer" durch ein "ständig" ersetzt - aber das ändert nun mal gar nichts am Problem.
Ich versuche auch noch mal zu erklären, was ich dazu meine.
Du willst in ca. 50 Blättern 50 Prozeduren haben, die alle gleichzeitig und ständig nachsehen,
ob sich in einem bestimmten Bereich der Tabelle1 etwas ändert. Der zu überweachende Bereich ist in jeder Prozedur anders. Ansonsten sind die 50 Prozeduren (bis auf die Festlegung des zu kopierenden Bereichs und es Zielbereichs) identisch.
Damit willst du die Beziehung zwischen dem jeweiligen Blatt (einem der 50) und dem zu überwachenden Bereich in Tab1 in die Prozeduren schreiben.
In jedes neue Blatt musst du die Prozedur hineinkopieren jund die Bereiche anpassen.
Die Infos stehen in ca. 50 Codes verteilt.
Da hielte ich es für wesentlich geschickter, die Beziehungen zwischen zu überwachenden Bereichen
und den Zielblättern in einem eigenen Blatt (oder im Blatt "Tabelle1", wenn es da rein passt) zu pflegen.
Das könnte so aussehen:
 ABCDEF
19in Tab1 überwachenKopie vonKopie in
20ZeileSpalteBereichBlattZeileSpalte
2175F9:K17XAQ78982
2282G8:G20andBlatt151
23usw.     

Die Ereignisprozedur der Tabelle1 prüft bei jeder Änderung in Tabelle1, ob einer 50 zu überwachenden Bereiche geändert wurde.
Wenn ja, weiß die Prozedur aus der Tabelle, was wohin kopiert werden soll.
(Man könnte da zusätzlich noch vermerken, was wie eingefärbt werden soll.)
Du brauchst keine 50 unterschiedlichen Prozeduren.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Ereignisprozedur wo?
17.01.2011 15:15:35
Christian
Hallo Erich,
danke für deine umfassende Antwort. Ich habe deine Antwort schon genau gelesen. Anscheinend scheiden sich unsere Geister an der Tatsache, dass es variable Registernamen gibt. Ich kopiere deine Antworten hier rein und kommentiere sie kurz:
"Du willst in ca. 50 Blättern 50 Prozeduren haben, die alle gleichzeitig und ständig nachsehen,
ob sich in einem bestimmten Bereich der Tabelle1 etwas ändert. Der zu überweachende Bereich ist in jeder Prozedur anders. Ansonsten sind die 50 Prozeduren (bis auf die Festlegung des zu kopierenden Bereichs und es Zielbereichs) identisch." -GENAU SO IST ES!
"Damit willst du die Beziehung zwischen dem jeweiligen Blatt (einem der 50) und dem zu überwachenden Bereich in Tab1 in die Prozeduren schreiben.
In jedes neue Blatt musst du die Prozedur hineinkopieren jund die Bereiche anpassen.
Die Infos stehen in ca. 50 Codes verteilt." - GENAU SO IST ES! (MIT DEM NACHTEIL, DASS MAN IMMER DIE PROZEDUREN NEU HINEINKOPIEREN MUSS UND ÄNDERN MUSS. DA IST DU VOLLKOMMEN RECHT, ABER ES KOMMEN KEINE NEUEN REGISTERBLÄTTER HINZU. DIE ANZAHL WIRD SICH SO BEI 45 EINPENDELN....KOMMEN WELCHE HINZU MAX 1 ODER ZWEI PRO JAHR, ANPASSUNG IST DANN SCHNELL GEMACHT)
"Da hielte ich es für wesentlich geschickter, die Beziehungen zwischen zu überwachenden Bereichen
und den Zielblättern in einem eigenen Blatt (oder im Blatt "Tabelle1", wenn es da rein passt) zu pflegen."
AUCH DA STIMME ICH DIR VOLLKOMMEN ZU! (CODE MÜSSTE DANN IN TABELLE 1 REIN!)
Die Ereignisprozedur der Tabelle1 prüft bei jeder Änderung in Tabelle1, ob einer 50 zu überwachenden Bereiche geändert wurde.
Wenn ja, weiß die Prozedur (WIE DENN?) aus der Tabelle, was wohin kopiert werden soll.
Du brauchst keine 50 unterschiedlichen Prozeduren.
-AUCH HIER BIN ICH GANZ DEINER MEINUNG. A B E R (UND HIER IST WOHL DIE VERSTÄNDNISSCHWIERIGKEIT): WIE SOLL EXCEL BEI VARIABLEN REGISTERNAMEN WISSEN, IN WELCHES BLATT KOPIERT WERDEN SOLL? DIE EINZIGE MÖGLICHKEIT, DIE ICH MIR VORSTELLEN KANN IST, DASS MAN EXCEL NICHT NACH NAMEN SONDERN NACH "REGISTERBLATTNR" SUCHEN LÄSST. DA WEISS ICH EBEN NICHT, OB UND VOR ALLEM WIE DAS IN VBA GEHT. MAN SAG ALSO ENTWEDER: PROZEDUR 1 KOPIERT BEREICH 1 IN REGISTERBLATT 1 (UNABHÄNGIG VOM NAME DIESES REGISTERBLATTES), PROZEDUR 2 KOPIERT BEREICH 2 IN REGISTERBLATT 2 (DAS HEUTE "FRAU MÜLLER" UND MORGEN "HERR MÜLLER" HEIßT". VIELLEICHT KÖNNTE MAN VOR JEDEM NAMEN NOCH EINE ZAHL SETZEN, DIE IMMER GLEICH BLEIBT: "1. HERR MÜLLER / 1. FRAU MÜLLER" AUF DIESE WEISE KÖNNTE VBA NACH DEN ZAHLEN SUCHEN UND DIE VARIABLEN NAMEN IGNORIEREN. DIE ZAHLEN VOR DEN NAMEN (1-50) BLIEBEN DANN IMMER GLEICH.
Um deine Frage zu beantworten, ob es eine eindeutige Möglichkeit gibt, das Zielblatt der Kopie zu ermitteln:
mmh, also e...Variable Namen scheiden wohl aus. Ansonsten gibt es nichts, was im
Blatt selbst immer gleich bleibt. Das ist das Problem. (Jeder Name (z.B. Müller) hat auch ein entsprechendes dreistelliges Kürzel in einer bestimmten Zelle., zB. MÜL, das ist jedoch auch variabel...). Aus meiner Sicht lautet die Antwort daher klar "nein". Registername und der eigentliche Inhalt eines Blatte bleiben beide NICHT gleich.
Deine Tabelle verstehe ich soweit. Das Problem liegt bei D21: "XQA789" ist variabel und nichts ist in der Bezeichnung immer gleich.
Das einzige, was wirklich - zumindest vom Registernamen und Bereichen her - immer gleich bleibt ist "Tabelle1". Da könnten dann alle 50 Blätter jeweils einen anderen Bereich auf die EIngabe von "ok" überwachen und dann einen festgelegten Bereich zu sich selbst kopieren. Deshalb mein Vorschlag mit den 50 Prozeduren. Nicht sehr elegant....ich weiss...
Man müsste nicht zusätzlich vermerken, was wie eingefärbt werden soll. Das geschieht ja bereits bei Eingabe bestimmter Wörter. Diese Farbe wird dann einfach mitkopiert. Dies läuft bereits sehr gut! (Bei statischem Name) :-)
Hoffe, das ist genauer. Also mit der 50er-Lösung wäre ich glücklich. Wenn das mit einer (automatischen) Durchnummerierung von Registerblättern + variablen Name geht und die Prozedur weiss wohin was kopiert werden soll, auch.
*puh* :-) Alles wird gut :-)
Danke nochmals,
Christian :-)
Blattnamen können in Tabelle stehen
17.01.2011 17:04:05
Erich
Hi Christian,
"WIE SOLL EXCEL BEI VARIABLEN REGISTERNAMEN WISSEN, IN WELCHES BLATT KOPIERT WERDEN SOLL?
DIE EINZIGE MÖGLICHKEIT, DIE ICH MIR VORSTELLEN KANN IST, DASS MAN EXCEL NICHT NACH NAMEN
SONDERN NACH "REGISTERBLATTNR" SUCHEN LÄSST."
Hatte ich dir da nicht eine bessere Möglichkeit vorgeschlagen?
Du schreibst die Blattnamen in so eine Tabelle, wie ich sie in meinem letzten Post dargestellt habe.
Die kann mit VBA ausgelesen werden, und schon weiß VBA/Excel, was wohin kopiert werden soll.
Ändert sich ein Zielblattname, änderst du ihn auch in dieser Tabelle.
Kommt ein neues Blatt dazu, schreibst du eione neue Zeile in die Tabelle.
Oder verursacht das einen zu großen Aufwand? Es ist jedenfalls einfacher als die Pflege der vielen Codes.
Vielleicht wäre eine Beispielmappe mit wenigen Testdaten praktisch?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Blattnamen können in Tabelle stehen
17.01.2011 18:06:54
Christian
Hallo Erich,
ich denke jetzt habe ich deinen Vorschlag verstanden. Ja, das würde gehen. Das würde nämlich auch mit variablen Zellennamen gehen, da dann die Zelle mit dem Blattnamen diese aus "Tabelle1" - wo man den Namen eingibt - übernehmen kann. (simple mit =Tabelle1!XYZ). Das ist tatsächlich einfacher zu handhaben.
Ich habe dir eine Testdatei als upload geschickt.
Zur Erklärung:
Tabelle1: Hier gibt man den Vor- und Zunamen + Sollstunden ein. Der gesamte farbige Bereich mit Fakultas 1-4 soll, inkl Inhalt dann auf das entsprechende Blatt mit gleichem Namen kopiert werden.
Die Extrablatt - nennen wir es Überwachung - müsste dann den Bereich (u.a. G18:R26 (und weitere) auf eine Änderung überwachen. Soll diesen aber erst nach Eingabe des Wortes "ok" bei G27 (hier bei person 1) kopieren.
Heißt die Person Heinz Erhardt soll in das Blatt namens Heinz Erhardt kopiert werden usw.
Zelle G27 wird bei Eingabe des Wortes "ok" grün. Ist sonst rot. Gut wäre es, wenn nach Eingabe von "ok" die Zelle nach 10 sekunden wieder automatisch auf rot springt.
https://www.herber.de/bbs/user/73112.xlsm

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige