Tabellenblatt über Codename ansprechen
#1
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
Gruß Klaus

es Grüßt der niederRhein! 17
Antworten Top
#2
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
Antworten Top
#3
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!
Gruß Klaus

es Grüßt der niederRhein! 17
Antworten Top
#4
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.
Antworten Top
#5
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
Antworten Top
#6
#Warkings , klappt perfekt!

Vielen Dank an alle!!

100
Gruß Klaus

es Grüßt der niederRhein! 17
Antworten Top
#7
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?
Gruß Klaus

es Grüßt der niederRhein! 17
Antworten Top
#8
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.
Antworten Top
#9
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
Antworten Top
#10
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
Gruß Klaus

es Grüßt der niederRhein! 17
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste