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

Per VBA Namen vergeben

Per VBA Namen vergeben
31.10.2008 11:39:00
Boris
Hallo,
ist Folgendes möglich (erstmal grundsätzlich): Eine Mappe besteht aus mehreren Blättern. In Zeile 1 dieser Blätter stehen Spaltenüberschriften. Den jeweiligen Zellen in Zeile 2 sollen nun gemäß der Zeile 1 Namen zugewiesen werden, inklusive Blattname. Also z.B. in Blatt "Mitarbeiter" in Zelle B1 steht Telefon, Zelle B2 bekommt den Namen "Mitarbeiter_Telefon".
Wenn man nun die Überschrift Telefon in Zelle B1 ändert, soll auch der Name der Zelle B2 geändert werden. Dies soll für jedes Blatt gelten.
Die gesamte Mappe ist ziemlich gross und kalkuliert schon relativ lange, d.h. die Lösung darf nur wenig Einfluss auf die Leistung haben.
Habe bisher nur ein wenig mit dem Makro-Rekorder herumprobiert. Namen vergeben scheint ja nicht das Problem zu sein, habe allerdings noch nicht ganz herausgefunden, ob ein Name einer Zelle direkt zugeordnet ist, ich diesen dann also auch (einzeln) löschen kann...
Viele Grüße,
Boris

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Per VBA Namen vergeben
31.10.2008 12:19:00
Leonhard.Stempfle
Hallo Boris,
wenn ich dich richtig verstanden habe,
Das Tabellenblatt hat den Namen "Mitarbeiter"
die Spaltenüberschrift in Zelle B1 lautet "Telefon"
Zelle B2 erhällt nun den Namen (Worksheet.name & Telefon)
Welchen Namen soll nun Zelle B3 erhalten? (Worksheet.name & Telefon) geht ja nicht.
Oder steht der Mitarbeitername in Zelle A2, welcher zur Namesbildung der Zelle B2 verwendet
werden soll.
Lade doch mal die Datei hoch.
AW: Per VBA Namen vergeben
31.10.2008 14:20:00
Boris
Hallo,
die Datei ist für ein Hochladen zu groß. Genau, das Blatt hat z.B. den Namen "Mitarbeiter". In A1 bis XXX1 (Zeile1) stehen Überschriften. Sämtliche Zellen der Zeile 2 sollen nun Namen gemäß der jeweiligen Überschrift erhalten. Also z.B.:
in A1 steht Name, A2 erhält den Namen "Mitarbeiter_Name"
in B1 steht Telefon, B2 erhält den Namen "Mitarbeiter_Telefon"
in C1 steht Adresse, C2 erhält den Namen "Mitarbeiter_Adresse"
usw.
Alle anderen Zellen (deine Frage bzgl. Zeile3) bekommen keine Namen.
Wenn ich nun z.B. Zelle B1 von Telefon in TelefonMobil ändere, soll der alte Name von B2 ("Mitarbeiter_Telefon") angepasst werden ("Mitarbeiter_TelefonMobil").
Den Sinn des Ganzen erkläre ich gerne ein anderes mal:)
Anzeige
AW: Per VBA Namen vergeben
01.11.2008 09:59:00
Leonhard.Stempfle
Hallo Boris,
Sorry das hat etwas gedauert.
Kurze Beschreibung:
Das Makro in Mitarbeiter muß in jedem Tabellenblatt eingefügt werden.
zu welchen Zeitpunkt du den Code ausführen willst, kannst du mit dem entsprechenden Ereignis festlegen.
Du kannst das Makro auch in ein Modul kopieren und in eine Schleife packen um alle Tabellenblätter auf einmal abzuarbeiten.
Die Namen der Zellen in Zeile2 setzten sich zusammen aus dem Name des Tabellenblatts und aus dem Text in der Zelle darüber.
Festgelegt werden die Namen in Zeile 2 für jede Zelle die sich innerhalb der verwendeten Spalten befinden.
https://www.herber.de/bbs/user/56437.xls
Gruß Leo
Anzeige
AW: Per VBA Namen vergeben
31.10.2008 14:47:49
Rudi
Hallo,
in DieseArbeitsmappe

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim n As Name
If Target.Row = 1 Then
If Application.CountIf(Sh.Rows(1), Target) > 1 Then
Application.Undo
Else
On Error Resume Next
Set n = ThisWorkbook.Names.Item(Target.Offset(1, 0).Name.Name)
On Error GoTo 0
If Not n Is Nothing Then n.Delete
If Target  "" Then Target.Offset(1, 0).Name = Sh.Name & "_" & Target
End If
End If
End Sub


Gruß
Rudi

AW: Per VBA Namen vergeben
31.10.2008 15:24:00
Boris
Wow, funktioniert schonmal sehr gut! Vielen Dank!
Verstehe den Code allerdings kaum. Habe noch folgende Fragen/Anmerkungen:
a) Könnte man im Quellcode angeben, für welche Sheets das funktionieren soll, also z.b. nur für die worksheets ("Mitarbeiter", "Produkte", "usw") ?
b) Wenn man Spalten kopiert, einfügt oder löscht, erhält man einen Fehler. Kann man diesen abfangen/ignorieren?
c) Kann man noch einbauen, dass VBA das alles auf Knopfdruck für alle Zellen der angegebenen worksheets durchführt? Oder ist das komplizierter?
Aber insgesamt ist das schonmal super!
Anzeige
AW: Per VBA Namen vergeben
31.10.2008 15:41:54
Rudi
Hallo,
a) ist einfach

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim n As Name
Select Case Sh.Name
Case "Mitarbeiter", "Produkte"
If Target.Row = 1 Then
If Application.CountIf(Sh.Rows(1), Target) > 1 Then
Application.Undo
Else
On Error Resume Next
Set n = ThisWorkbook.Names.Item(Target.Offset(1, 0).Name.Name)
On Error GoTo 0
If Not n Is Nothing Then n.Delete
If Target  "" Then Target.Offset(1, 0).Name = Sh.Name & "_" & Target
End If
End If
End Select
End Sub


Gruß
Rudi

AW: Per VBA Namen vergeben
31.10.2008 15:50:00
Boris
Super danke.
und auf b und c hast du keine Lust? hehe... auch nicht so schlimm... werde jetzt erstmal testen.
Vielen Dank.
Anzeige
AW: Per VBA Namen vergeben
31.10.2008 16:57:10
Uduuh
Hallo,
wahrscheinlich eher keine Zeit.
b)

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim n As Name
Select Case Sh.Name
Case "Mitarbeiter", "Produkte"
If Target.Row = 1 And Target.Cells.Count = 1 Then
If Application.CountIf(Sh.Rows(1), Target) > 1 Then
Application.Undo
Else
On Error Resume Next
Set n = ThisWorkbook.Names.Item(Target.Offset(1, 0).Name.Name)
On Error GoTo 0
If Not n Is Nothing Then n.Delete
If Target  "" Then Target.Offset(1, 0).Name = Sh.Name & "_" & Target
End If
End If
End Select
End Sub


c)


Sub tt()
Dim wks As Worksheet, c As Range
For Each wks In Worksheets
For Each c In wks.Rows(1).SpecialCells(xlCellTypeConstants)
c = c.Value
Next
Next
End Sub

Das Löschen von Spalten wird dir 'kaputte' Namen bescheren.
Breinigen kannst du das hiermit:


Sub ttt()
Dim n As Name
For Each n In ThisWorkbook.Names
If InStr(n.RefersTo, "#REF!") > 0 Then n.Delete
Next
End Sub


Gruß aus’m Pott
Udo

Anzeige
AW: Per VBA Namen vergeben
03.11.2008 13:09:49
Boris
Hallo Udo,
funktioniert alles soweit ganz gut. Jetzt gibt es jedoch ein weiteres Problem: Die in dieser Datei erstellten sheets werden per Makro in andere Dateien kopiert. In diesen Dateien sollen nun die Namen auch vergeben werden. Da ich die sheets folgendermassen kopiere (Auszug):
...
Set wsQuelle = Workbooks(strDatei).Worksheets(strBlatt)
Set wsZiel = ThisWorkbook.Worksheets(strBlatt)
'Daten in den Zielblättern löschen
strBereich = "A1:" & wsZiel.Cells.SpecialCells(xlCellTypeLastCell).Address
wsZiel.Range(strBereich).Clear
'Daten kopieren
strBereich = "A1:" & wsQuelle.Cells.SpecialCells(xlCellTypeLastCell).Address
wsQuelle.Range(strBereich).Copy wsZiel.Cells(1, 1)
wsZiel.Range(strBereich).Value = wsZiel.Range(strBereich).Value
...
werden die Namen nicht mitkopiert. Ich bräuchte also für diese Dateien ein Makro, das nach dem Kopieren der Daten für die Zeile 1/2 das gleiche durchführt, wie das Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)-Makro der anderen Datei.
Über SheetChange funktioniert das allerdings nicht...
Verständlich was ich hier meine?
Gruß Boris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige