Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Tabellennamen auslesen und in Tabelle schreiben


Betrifft: Tabellennamen auslesen und in Tabelle schreiben von: Gunnar
Geschrieben am: 02.02.2018 12:09:29

Hallo Zusammen,

ich möchte alle Tabellennamen, die mit einem "I" beginnen per vba auslesen und in einen bestimmten Zellbereich des aktiven Worksheets schreiben lassen. Dazu habe ich folgenden Code gebastelt, der aber bei set StartRow = 78 nach einem Objekt fragt.

Sub TabellenNamen()

     If MsgBox("Makro starten?", vbYesNo + vbQuestion, _
    "Frage") = vbYes Then GoTo Fortfahren Else GoTo EndeMakro
    
Fortfahren:

    Dim ws As Worksheet
    Dim i As Integer
    Dim StartRow As Integer
    Set StartRow = 78
    
    For i = 1 To Worksheets.Count
        
        If Left(ws.Name, 1) = "I" Then i = i + 1
            If StartRow > 87 Then
            Exit For
            Else
                ActiveSheet.Cells(StartRow, 19).Value = ws.Name
            End If
        End If
    Next i

EndeMakro:

End Sub
Kann mir jemand weiterhelfen?

Danke & Gruß, Gunnar

  

Betrifft: ohne Set. owT von: Rudi Maintaire
Geschrieben am: 02.02.2018 12:17:57




  

Betrifft: AW: ohne Set. owT von: Gunnar
Geschrieben am: 02.02.2018 14:25:14

Hallo Rudi,

danke für den Tipp. Soweit klappt es jetzt schon mal.

Jetzt hängt er sich aber an dem zweiten "End If" auf und sagt "End If ohne If-Block".

Hast du da vielleicht auch noch 'ne Idee.

Danke & Gruß, Gunnar


  

Betrifft: AW: Tabellennamen auslesen und in Tabelle schreiben von: EtoPHG
Geschrieben am: 02.02.2018 14:37:50

Hallo Gunnar,

Korrigiere:

If Left(ws.Name, 1) = "I" Then
    i = i + 1
Dann funktionierts.
Gruess Hansueli


  

Betrifft: AW: Tabellennamen auslesen und in Tabelle schreiben von: Gunnar
Geschrieben am: 02.02.2018 16:24:18

Hallo Hansueli,

danke für den Hinweis. Der gesamte Code sieht mittlerweile so aus:

Sub TabellenNamen()

     If MsgBox("Makro starten?", vbYesNo + vbQuestion, _
    "Frage") = vbYes Then GoTo Fortfahren Else GoTo EndeMakro
    
Fortfahren:

    Dim ws As Worksheet
    Dim i As Integer
    Dim StartRow As Integer
    StartRow = 78
    
    For i = 1 To Worksheets.Count
        
        If Left(ws.Name, 1) = "I" Then
            i = i + 1
                If StartRow > 87 Then
                Exit For
                Else
                ActiveSheet.Cells(StartRow, 19).Value = ws.Name
                End If
        End If
    Next i

EndeMakro:

End Sub
Er öffnet die MsgBox und hängt sich dann aber leider immer noch auf. Fehlermeldung "Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt."

Was mach ich falsch?

Danke & Gruß, Gunnar


  

Betrifft: AW: Tabellennamen auslesen und in Tabelle schreiben von: Werner
Geschrieben am: 02.02.2018 17:02:08

Hallo Gunnar,

so:

Public Sub aaa()
Dim startRow As Long

startRow = 78

If MsgBox("Makro starten?", vbYesNo + vbQuestion, _
    "Frage") = vbYes Then
        For Each Worksheet In ThisWorkbook.Worksheets
            If startRow > 85 Then Exit For
            If Left(Worksheet.Name, 1) = "I" Then
                Cells(startRow, 19).Value = Worksheet.Name
                startRow = startRow + 1
            End If
        Next Worksheet
End If
End Sub
Im Makro prüfst du startRow auf größer 85. Dieser Fall wird aber nie eintreffen, da du startRow mit 78 belegst und innerhalb des Makros der Wert von startRow nicht verändert wird.

Erklär doch mal, was du genau damit erreichen willst.

Gruß Werner


  

Betrifft: AW: Tabellennamen auslesen und in Tabelle schreiben von: Gunnar
Geschrieben am: 05.02.2018 10:58:14

Hallo Werner,

danke für die Antwort. Dein Hinweis bzgl. "startRow > 87" ist korrekt und kann natürlich nicht erreicht werden. Ich habe in der Datei maximal 10 Blätter, die mit "I" beginnen - das wollte ich damit eingrenzen (brauche ich wahrscheinlich ja aber nicht, weil er nach dem 10. ohnehin keins mehr findet - oder?

Das Makro an sich soll bewirken, dass die Namen aller Immobilienblätter, die mit "I" beginnen in dem aktiven Tabellenblatt im Zellbereich "S78:S87 bzw. cells.(startRow, 19)" der Reihe nach aufgelistet werden.

Deinen Code habe ich auch ausprobiert - der hängt sich in der Zeile "For Each Worksheet In ThisWorkbook.Worksheets" mit der Fehlermeldung "Fehler beim Kompilieren: Variable nicht definiert" auf. Verstehe ich nicht, weil Worksheet doch nicht nochmal extra zu deklarieren ist?

Wäre super, wenn du das nochmal anschauen könntest.

Danke & Gruß, Gunnar


  

Betrifft: AW: Tabellennamen auslesen und in Tabelle schreiben von: Werner
Geschrieben am: 05.02.2018 12:50:07

Hallo Gunnar,

dann hast du Option Explicit drin. Dann muss die Variable deklariert werden. Dann aber bitte nicht Worksheet als Variablenname, Worksheet ist ein VBA-Schlüsselwort und sollte dann nicht als Variablenname benutzt werden.

Option Explicit

Public Sub aaa()
Dim startRow As Long, ws As Worksheet

startRow = 78

If MsgBox("Makro starten?", vbYesNo + vbQuestion, _
    "Frage") = vbYes Then
        For Each ws In ThisWorkbook.Worksheets
            If startRow > 85 Then Exit For
            If Left(ws.Name, 1) = "I" Then
                Cells(startRow, 19).Value = ws.Name
                startRow = startRow + 1
            End If
        Next ws
End If
End Sub
Gruß Werner


  

Betrifft: AW: Tabellennamen auslesen und in Tabelle schreiben von: Gunnar
Geschrieben am: 05.02.2018 13:18:02

Hallo Werner,

tausend Dank, jetzt klappt's.

Viele Grüße

Gunnar


  

Betrifft: Gerne u. Danke für die Rückmeldung. o.w.T. von: Werner
Geschrieben am: 05.02.2018 13:20:36




Beiträge aus dem Excel-Forum zum Thema "Tabellennamen auslesen und in Tabelle schreiben"