Anzeige
Archiv - Navigation
1904to1908
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

Tabellenblätter erstellen

Tabellenblätter erstellen
07.11.2022 12:47:46
appelschnut
Hallo liebe Forumsmitglieder,
ich habe hier ein kleines Problem, bei dem ihr mich sicherlich unterstützen könnt:
Ich habe eine Datei mit einem Tabellenblatt Namens Übersicht. In diesem Blatt werden untereinander Artikel aufgelistet. Bsp:
Spalte A: Gerätetyp
Spalte B: Gerätebezeichnung
Spalte C: Bearbeiter
Spalte D: Link
Jetzt ist es so, dass ich in den einzelnen Reihen z.B. PCs, Monitore etc. eintrage. Ich möchte jetzt nach Eingabe des Gerätetyps und der Gerätebezeichnung, dass
1. ein Tabellenblatt mit dem Namen aus Spalte B erstellt wird
2. in Spalte D ein Link erzeugt wird, der mich sofort auf das entsprechende Tabellenblatt bringt.
Nun meine Frage:
1. Wie kann ich es einrichten, dass automatisch ein neues Tabellenblatt mit dem entsprechenden Namen erstellt wird und
2. Wie kann ich es einrichten, dass der Link erstellt wird?
Bei Frage 1 habe ich das Problem, dass automatisch erkannt werden muss, in welcher Zeile ich gerade ein Produkt anlege. Die Spalte bleibt ja immer "B".
Ich hoffe, dass ich meine Frage und Problemstellung verständlich erklärt habe und ihr mir helfen könnt.
Vielen Dank im Voraus!

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblätter erstellen
07.11.2022 13:33:27
Nepumuk
Hallo,
Rechtsklick auf den Tabellenreiter - Code anzeigen. Folgende Prozedur einfügen:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objRange As Range, objCell As Range
Dim objWorksheet As Worksheet
Set objRange = Intersect(Target, Columns(2))
If Not objRange Is Nothing Then
For Each objCell In objRange
If Application.CountIf(Columns(2), objCell.Text) = 1 Then
With ThisWorkbook
Set objWorksheet = .Worksheets.Add( _
After:=.Worksheets(.Worksheets.Count))
End With
objWorksheet.Name = objCell.Offset(0, -1).Text & " - " & objCell.Text
Call Hyperlinks.Add(Anchor:=objCell.Offset(0, 2), Address:=vbNullString, _
SubAddress:="'" & objWorksheet.Name & "'!A1", TextToDisplay:=objWorksheet.Name)
Set objWorksheet = Nothing
End If
Next
Set objRange = Nothing
Call Activate
End If
End Sub
Gruß
Nepumuk
Anzeige
AW: Tabellenblätter erstellen
07.11.2022 14:05:01
Nepumuk
Hallo nochmal,
da ist noch ein Fehler drin.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objRange As Range, objCell As Range
Dim objWorksheet As Worksheet
Dim strName As String, strFirstAddress As String
Set objRange = Intersect(Target, Columns(2))
If Not objRange Is Nothing Then
For Each objCell In objRange
strName = objCell.Offset(0, -1).Text & " - " & objCell.Text
For Each objWorksheet In ThisWorkbook.Worksheets
If objWorksheet.Name = strName Then Exit For
Next
If objWorksheet Is Nothing Then
With ThisWorkbook
Set objWorksheet = .Worksheets.Add( _
After:=.Worksheets(.Worksheets.Count))
End With
objWorksheet.Name = strName
Call Hyperlinks.Add(Anchor:=objCell.Offset(0, 2), Address:=vbNullString, _
SubAddress:="'" & strName & "'!A1", TextToDisplay:=strName)
Set objWorksheet = Nothing
End If
Next
Set objRange = Nothing
Call Activate
End If
End Sub
Gruß
Nepumuk
Anzeige
AW: Tabellenblätter erstellen
07.11.2022 14:14:26
appelschnut
Vielen Dank für die schnelle Antwort. Das hat super funktioniert.
Kann ich jetzt auch noch in Abhängigkeit von einer weiteren Zelle in der Zeile den Inhalt eines Tabellenblatts in das gerade Erstellte Tabellenblatt kopieren. Die Kriterein in der Zelle wären "Neu" oder "Alt".
VG
AW: Tabellenblätter erstellen
07.11.2022 15:42:11
Nepumuk
Hallo,
in welcher Spalte stehen die Werte und was soll bei "Neu" passieren und was bei "Alt"?
Gruß
Nepumuk
AW: Tabellenblätter erstellen
07.11.2022 15:47:06
appelschnut
Die Werte "Alt" und "Neu" stehen in Spalte F. Je nach Eintrag sollen die Inhalte des Tabellenblatts "Ausschreibung" (bei Neu) bzw. "Testung" (bei Alt) in das neue Tabellenblatt kopiert werden. Die beiden Blätter "Ausschreibung" und "Testung" sind also eigentlich Vorlagen für die weitere Bearbeitung.
Anzeige
AW: Tabellenblätter erstellen
07.11.2022 15:55:39
Nepumuk
Hallo,
steht "Alt" bzw. "Neu" schon in der Spalte F wenn du den Eintrag in Spalte B vornimmst, der ja das Erstellen des neuen Worksheets auslöst?
Gruß
Nepumuk
AW: Tabellenblätter erstellen
07.11.2022 16:02:00
appelschnut
Wäre wohl einfacher, oder? Kann ich aber nicht sicherstellen. Ich könnte aber die Spalte verschieben, sodass die Spalte vor der Spalte B steht. Oder gibt es da eine bessere Lösung?
AW: Tabellenblätter erstellen
07.11.2022 16:05:39
appelschnut
Vielleicht könnte man sicherheitshalber erst das neue Tabellenblatt erstellen und dann nach Ausfüllen der Spalte F durch ein Makro die Inhalte kopieren
AW: Tabellenblätter erstellen
07.11.2022 16:19:22
Nepumuk
Hallo,
ich habe es so gelöst:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objRange As Range, objCell As Range
Dim objWorksheet As Worksheet
Dim strName As String, strFirstAddress As String
Set objRange = Intersect(Target, Columns(2))
If Not objRange Is Nothing Then
For Each objCell In objRange
strName = objCell.Offset(0, -1).Text & " - " & objCell.Text
For Each objWorksheet In ThisWorkbook.Worksheets
If objWorksheet.Name = strName Then Exit For
Next
If objWorksheet Is Nothing Then
With ThisWorkbook
Set objWorksheet = .Worksheets.Add( _
After:=.Worksheets(.Worksheets.Count))
End With
objWorksheet.Name = strName
Call Hyperlinks.Add(Anchor:=objCell.Offset(0, 2), Address:=vbNullString, _
SubAddress:="'" & strName & "'!A1", TextToDisplay:=strName)
Set objWorksheet = Nothing
End If
Next
Set objRange = Nothing
Call Activate
End If
Set objRange = Intersect(Target, Columns(6))
If Not objRange Is Nothing Then
With ThisWorkbook
For Each objCell In objRange
strName = objCell.Offset(0, -5).Text & " - " & objCell.Offset(0, -4).Text
If Application.CountBlank(.Worksheets(strName).Cells) = .Worksheets(strName).Cells.CountLarge Then
If objCell.Text = "Alt" Then
Call .Worksheets("Testung").Cells.Copy(Destination:=.Worksheets(strName).Cells(1, 1))
ElseIf objCell.Text = "Neu" Then
Call .Worksheets("Ausschreibung").Cells.Copy(Destination:=.Worksheets(strName).Cells(1, 1))
End If
End If
Next
End With
Set objRange = Nothing
End If
End Sub
Gruß
Nepumuk
Anzeige
AW: Tabellenblätter erstellen
07.11.2022 16:30:44
appelschnut
Hallo Nepumuk,
auch dieser Code funktioniert wieder super. Ich frage mich, wie man das "mal eben" aus den Ärmeln schütteln kann. Respekt und vielen Dank für deine Hilfe!
VG appelschnut
AW: Tabellenblätter erstellen
07.11.2022 16:50:38
appelschnut
Eine Frage hätte ich dann doch noch:
Wenn ich die Werte aus den Spalten B und C der Tabelle in die neu angelegte Tabelle übernehmen will, muss ich doch bestimmt nur einen weiteren Befehl an die Call-Anweisung dranhängen, oder? Wie wäre dieser Copy-Befehl?
AW: Tabellenblätter erstellen
07.11.2022 17:27:35
Nepumuk
Hallo,
wohin?
Gruß
Nepumuk
AW: Tabellenblätter erstellen
07.11.2022 17:34:02
appelschnut
Den Wert aus Spalte B in Zelle E1, den Wert aus Spalte C in Zelle E2
AW: Tabellenblätter erstellen
07.11.2022 17:41:44
Nepumuk
Hallo,
teste mal:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objRange As Range, objCell As Range
Dim objWorksheet As Worksheet
Dim strName As String, strFirstAddress As String
Set objRange = Intersect(Target, Columns(2))
If Not objRange Is Nothing Then
For Each objCell In objRange
strName = objCell.Offset(0, -1).Text & " - " & objCell.Text
For Each objWorksheet In ThisWorkbook.Worksheets
If objWorksheet.Name = strName Then Exit For
Next
If objWorksheet Is Nothing Then
With ThisWorkbook
Set objWorksheet = .Worksheets.Add( _
After:=.Worksheets(.Worksheets.Count))
End With
objWorksheet.Name = strName
Call Hyperlinks.Add(Anchor:=objCell.Offset(0, 2), Address:=vbNullString, _
SubAddress:="'" & strName & "'!A1", TextToDisplay:=strName)
Set objWorksheet = Nothing
End If
Next
Set objRange = Nothing
Call Activate
End If
Set objRange = Intersect(Target, Columns(6))
If Not objRange Is Nothing Then
With ThisWorkbook
For Each objCell In objRange
strName = objCell.Offset(0, -5).Text & " - " & objCell.Offset(0, -4).Text
If Application.CountBlank(.Worksheets(strName).Cells) = .Worksheets(strName).Cells.CountLarge Then
If objCell.Text = "Alt" Then
Call .Worksheets("Testung").Cells.Copy(Destination:=.Worksheets(strName).Cells(1, 1))
ElseIf objCell.Text = "Neu" Then
Call .Worksheets("Ausschreibung").Cells.Copy(Destination:=.Worksheets(strName).Cells(1, 1))
End If
.Worksheets(strName).Cells(1, 5).Value = objCell.Offset(0, -4).Text
.Worksheets(strName).Cells(2, 5).Value = objCell.Offset(0, -3).Text
End If
Next
End With
Set objRange = Nothing
End If
End Sub
Gruß
Nepumuk
Anzeige
AW: Tabellenblätter erstellen
07.11.2022 18:07:05
appelschnut
Super,
auch das funktioniert wieder.
Ich hoffe, ich habe dich nicht zu sehr strapaziert. Aber je besser dieser Code wird, desto mehr Ideen habe ich, was man noch machen könnte...
Werde sicherlich nochmals die Hilfe benötigen, versuche aber erstmal selbst weiter zu kommen.
Nochmals vielen Dank!!!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige