Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Makro führt zu unterschiedlichen Ergebnissen
#1
Hallo,

ich habe ein bißchen VBA Code, um in Excel Tabellenblätter bedingt einzublenden. Wenn ich den Code über die VBA-Benutzeroberfläche ausführe, funktioniert alles. Wenn ich das Makro einem Textfeld in der Exceldatei zuordne und auf das Textfeld klicke, werden andere Tabellenblätter eingeblendet  Huh .

Mein erster Gedanke war, dass ich das falsche Makro zugeordnet habe (nein, passt alles). Ich habe das Makro auch schon umbenannt / neu zugeordnet, ebenfalls ohne Erfolg. Irgendwie hat das Makro vom Textfeld ein Eigenleben.

Der Code soll folgendes durchführen (was auf der VBA-Programmieroberfläche auch funktioniert):
  • "Wenn eine Zeile eingeblendet ist und in der neunten Spalte ein "x" eingetragen ist, soll das Tabellenblatt eingeblendet werden, das als nächstes nach dem gefundenen Tabellenblatt folgt, dessen Tabellenblattbezeichnung in Spalte 1 steht" (Beispiel: in Spalte 1 steht "sheet_1" und in gleicher Zeile in Spalte 9 ist ein "x", dann soll "sheet_2" eingeblendet werden)
  • "Wenn Zeile eingeblendet ist und kein "x" in Spalte 9 steht, dann soll das Tabellenblatt eingeblendet werden, dessen Name in Spalte 1 steht"
Beim Start über das Textfeld führt der Code jedoch folgendes durch:
  • In der ersten eingeblendeten Zeile prüft er noch regulär, ob ein "x" in Spalte 9 steht; falls ja, sheet_2 eingeblendet; falls er kein "x" findet, wird sheet_1 eingeblendet -> so solls sein Exclamation
  • Ab der nächsten eingeblendeten Zeile blendet er nur noch Tabellenblätter ein, deren Name er in Spalte 1 findet; unabhängig davon, ob in Spalte 9 ein "x" steht.


Code:
Sub einblenden()
Dim i as Long
For i = 5 To 18 'Range A5:A18
    If Cells(i, 1).EntireRow.Hidden = False Then
        If Cells(i, 9).Value = "x" Then 'Range I5:I18
            ThisWorkbook.Sheets(ThisWorkbook.Sheets(ThisWorkbook.Sheets("Fortschritt").Cells(i, 1).Value).Next.Name).Visible = xlSheetVisible
        Else
            ThisWorkbook.Sheets(ThisWorkbook.Sheets(ThisWorkbook.Sheets("Fortschritt").Cells(i, 1).Value).Name).Visible = xlSheetVisible
        End If
    End If
Next i
End Sub

Bin ich einfach nur doof oder veräppelt mich hier Excel?

Gruß
Antworten Top
#2
Code:
Sub M_snb()
  Rows("5:18").Hidden = Not Rows("5:18").Hidden
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#3
Hallo snb,

sorry ich kann dir nicht folgen. Kannst du das bitte für mich übersetzen?

Gruß
Antworten Top
#4
Moin,

hast du es schon mit Haltepunkten und dem Lokalfenster ausprobiert, was das Programm zur Laufzeit tatsächlich macht? Du solltest im übrigen darauf achten, dass du alle Rangeobjekte mit ihrem Elternelement ausreichend referenziert hast ( also mindestens das Tabellenblatt davor schreiben.
Im übrigen brauchst du nicht den Namen eines Blattes in der Collection suchen, sondern kannst das Objekt direkt ansprechen:
Worksheets("Heinz").Next.Visible = True 

Kannst du vielleicht auch noch kurz erläutern, was du inhaltlich tust? Mir scheint das Vorhalten von Blättern, die ein und ausgeblendet werden nicht sehr sinnvoll; erst Recht, wenn du dich auf das Glückslose .Next verlassen willst. ein Verchobenes Blatt und alles ist hinüber.

Viele Grüße
derHöpp
Antworten Top
#5
Hallo derHöpp,

danke für den Tipp "ergänzen des Tabellenblatts vor Rangeobjekten", damit klappt es jetzt. Das Textobjekt mit verknüpftem Makro ist auf dem gleichen Tabellenblatt wie die Daten, die es abfragt. Daher dachte ich, ich spar mir das. Vermutlich wandert die Auswahl des aktiven Tabellenblatts mit der Abarbeitung des Codes, dann findet es auf anderen Tabellenblättern kein "x" in Spalte 9.

Zum Hintergrund, warum ich den Code brauche: ein Anwender hat eine Excel Tabelle mit sehr sehr vielen Sheets. Gleichzeitig ist der Anwender ungeübt in Büro-Arbeit, daher kommt er mit den vielen verschiedenen Sheets nicht klar und meldet sich dann immer bei mir. Durch das Einblenden der tatsächlich benötigten Sheets hat der Anwender eine überschaubare Exceldatei und ich hab meine Ruhe.

Gruß
Antworten Top


Gehe zu:


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