Guten morgen Forum.
ich möchte über eine For Next Schleife mehrere Tabellenblätter ansprechen und dann den Namen haben,
erhalte aber immer eine Fehlermeldung, in der Zeile "
Set wks = str.Name"
Code:
Sub Codename_Tabellenblatt()
'--------------------------------------------------------------
' Codename der Tabelle zusammen setzen,
' dann das Tabellenblatt ansprechen und den Namen ermitteln
'--------------------------------------------------------------
Dim i As Integer
Dim str As String
Dim wks As Worksheet
For i = 1 To 5
str = "Tabelle" & i
Set wks = str.Name
Debug.Print wks
Next i
End Sub
Hallo
schau bitte mal ganz genau auf deinen Code,, was du programmiert hast, und was da nicht zusammen passt! Dann erkennst du selbst den Fehler.
Dim wks wurde als Worksheet deklariert, Set wks = str.Name ist aber ein String, und kein Worksheet! Ändere den Code bitte mal so ab:
Auf den Umweg über str As String habe ich verzichtet, das geht auch direkt in der Set Anweisung. Und wks.Name bitte in Debug setzen.
mfg Gast 123
Code:
For i = 1 To 5
Set wks = "Tabelle" & i
Debug.Print wks.Name
Next i
Hallo Gast 123,
Zitat:For i = 1 To 5
Set wks = "Tabelle" & i
Debug.Print wks.Name
Next i
er gibt mir immer einen Fehler: Fehler beim Kompilieren!
Hi,
den Codenamen einer Tabelle kann man nicht "zusammenbasteln".
[EDIT] Zumindest nicht "herkömmlich" mit Verkettung. Warkings hat die Lösung über das VBA-Projekt ja aufgezeigt.
Den Codename erhältst Du z.B. mit
Code:
Dim wkb As Workbook
Dim wks As Worksheet
Set wkb = ThisWorkbook
For Each wks In wkb.Sheets
Debug.Print wks.CodeName
Next
https://docs.microsoft.com/en-us/office/...t.codename
Und so kann man den Codenamen ändern, vorausgesetzt man hat Zugriff auf das VB Object Model
Code:
Sub chgCodename()
Dim wkb As Workbook, sheet As Object
Set wkb = ThisWorkbook
'wkb.VBProject.Name = "VBAProject_42" ' So könnte man den Projektnamen ändern
' Beispiel, um den Codenamne des ersten Blattes zu ändern
Set sheet = wkb.VBProject.VBComponents(wkb.Sheets(1).CodeName)
sheet.Name = "new_code_name"
End Sub
#
Warkings , klappt perfekt!
Vielen Dank an alle!!
Hab noch ein Problem,
wie kann man die CodeName in eine Inputbox untereinander anzeigenlassen,
ich schaff es nur das mir für jedes Tabellenblatt, jeweils eine Inputbox erscheint?
Abgesehen davon, dass
-das nicht geht
- man dafür eher eine Listbox/Combobox in einer Userform verwenden sollte
- man nich weiss, wofür das gut sein soll
ist das auch ein neues Thema.
Hallo
wofür soll man für die Zusatzfrage einen neuen Thread aufmachen? Probier es doch einfach mal so: (geht auch mit MsgBox als Anzeige)
mfg Gast 123
Code:
Sub test2()
Dim wkb As Workbook, gTxt As String
Dim wks As Worksheet, Eingabe As String
Set wkb = ThisWorkbook
For Each wks In wkb.Worksheets
gTxt = gTxt & wks.CodeName & vbLf
Next wks
Eingabe = InputBox(gTxt, , Worksheets(1).CodeName)
End Sub
Ich möchte mit einer Inputbox, das der Anwender eine Zahl eingibt und in der Inputbox die Auswahlmöglichkeiten drin stehen!
Der Code funktioniert auch, ich wollte versuchen ihn etwas kürzer zu gestalten!
Trotz dem Danke für die Hilfe!
Code:
Sub Tabelleneingabe()
'------------------------------------------------------------------------------
' in den Untergruppen (Tabellenblättern), neuen Artikel einfügen
'------------------------------------------------------------------------------
Dim Eingabe As String
Dim IB As String
Dim lz As Long
Anfang:
IB = InputBox("Bitte geben Sie die Nummer der Untergruppe ein." _
& Chr(10) & Chr(10) & Chr(9) _
& "1. " & Tabelle1.Name & Chr(10) & Chr(9) _
& "2. " & Tabelle2.Name & Chr(10) & Chr(9) _
& "3. " & Tabelle3.Name & Chr(10) & Chr(9) _
& "4. " & Tabelle4.Name & Chr(10) & Chr(9) _
& "5. " & Tabelle5.Name & Chr(10) & Chr(9) _
& "6. " & Tabelle6.Name & Chr(10) & Chr(9) _
& "7. " & Tabelle7.Name & Chr(10) & Chr(9) _
& "8. " & Tabelle8.Name & Chr(10) & Chr(9) _
& "9. " & Tabelle9.Name & Chr(10) & Chr(9) _
& "10. " & Tabelle10.Name & Chr(10) & Chr(9) _
& "11. " & Tabelle11.Name & Chr(10) & Chr(9) _
& "12. " & Tabelle12.Name & Chr(10) & Chr(9) _
& "13. " & Tabelle13.Name & Chr(10) & Chr(9) _
& "14. " & Tabelle14.Name & Chr(10) & Chr(9) _
& "15. " & Tabelle15.Name & Chr(10) & Chr(9) _
& "16. " & Tabelle16.Name & Chr(10) & Chr(9) _
& "17. " & Tabelle17.Name & Chr(10) & Chr(9) _
& "18. " & Tabelle18.Name & Chr(10) & Chr(9))
If IB = "" Then Exit Sub
Dim wks As Worksheet
If IB = 1 Then
Set wks = Tabelle1
ElseIf IB = 2 Then
Set wks = Tabelle2
ElseIf IB = 3 Then
Set wks = Tabelle3
ElseIf IB = 4 Then
Set wks = Tabelle4
ElseIf IB = 5 Then
Set wks = Tabelle5
ElseIf IB = 6 Then
Set wks = Tabelle6
ElseIf IB = 7 Then
Set wks = Tabelle7
ElseIf IB = 8 Then
Set wks = Tabelle8
ElseIf IB = 9 Then
Set wks = Tabelle9
ElseIf IB = 10 Then
Set wks = Tabelle10
ElseIf IB = 11 Then
Set wks = Tabelle11
ElseIf IB = 12 Then
Set wks = Tabelle12
ElseIf IB = 13 Then
Set wks = Tabelle13
ElseIf IB = 14 Then
Set wks = Tabelle14
ElseIf IB = 15 Then
Set wks = Tabelle15
ElseIf IB = 16 Then
Set wks = Tabelle16
ElseIf IB = 17 Then
Set wks = Tabelle17
ElseIf IB = 18 Then
Set wks = Tabelle18
Else
MsgBox "Es dürfen nur Zahlen eingegeben werden bzw. die Eingabe wurde abgebrochen !", vbCritical, "Nur Zahlen eingeben !"
GoTo Anfang
End If
wks.Select
lz = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row + 1
Cells(lz, 1) = "Insert"
Sheets("Neu Anlage").Select
Range("A9:h9").Select
Selection.Copy
wks.Select
Cells.Find(what:="insert", after:=ActiveCell, LookIn:=xlFormulas, lookat _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ActiveSheet.Paste
Range("A9").Select
tab_Anlage.Select
Range("C9").Select
Selection.ClearContents
Range("C9").Select
End Sub