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.

VBA-Hilfe Spalten ausblenden von anderem Sheet
#1
Liebe Community!

Habe ein Problem bei dem ihr mir hoffentlich helfen könnt.

Ich habe ein Code-Schnipsel aus dem Internet, welches eigentlich perfekte Dienste leistet in dem es in der zweiten Zeile in welchem "x" zu finden sind, diese Spalten ausblendet.
Leider funktioniert selber Code nicht wenn ich diesen auf eine Schaltfläche in einem anderen Sheet (selbstverständlich in gleicher Arbeitsmappe) lege. Dachte mit Sheets.select ist es zu lösen, doch dem ist nicht so.
Nochmals kurz zusammengefasst: Im Blatt "Home" habe ich eine Schaltfläche, bei dessen Aktivierung er in das Blatt "Erfassung" wechseln soll und gleichzeitig die Spalten, welche in der 2. Zeile in "x" enthalten, ausblenden soll.

Könnt ihr mir helfen wo der Fehler ist?


Private Sub CommandButton1_Click()
Sheets("Erfassung").Select
Dim ob As Range
Dim rng As Range, firstAddress, temp As Range
Set rng = Rows(2)
Set ob = rng.Find("x", , LookIn:=xlValues, LookAt:=xlWhole)
    If Not ob Is Nothing Then
        firstAddress = ob.Address
        Do
            If temp Is Nothing Then Set temp = ob
                Set temp = Application.Union(temp, ob)
                Set ob = rng.FindNext(ob)
        Loop While Not ob Is Nothing And ob.Address <> firstAddress
    End If
    On Error Resume Next
    temp.EntireColumn.Hidden = True
   
End Sub
Antworten Top
#2
Hallo  

bei mir funktioniert der Code einwandfrei.  Was fehlt ist der Rücksprung Befehl in die Tabelle "Home".

    temp.EntireColumn.Hidden = True
Sheets("Home").Select
End Sub

mfg  Gast 123
Antworten Top
#3
Hallo,

der Code kann so in einer anderen Tabelle nicht funktionieren.
Auch wenn eine andere Tabelle selektiert ist, bezieht sich Rows() auf die Tabelle, in der sich die Schaltfläche befindet.


Damit es funktioniert, gibt es zwei Möglichkeiten:

1. Man macht aus dem Ganzen eine eigenständige Prozedur und packt diese in eine allgemeines Modul und ruft diese Prozedur aus dem Klick Ereignis der Sachaltfläche heraus auf.

So sähe die Prozedur aus:

Code:
Sub ausblenden()
Sheets("Erfassung").Select
Dim ob As Range
Dim rng As Range, firstAddress, temp As Range
Set rng = Rows(2)
Set ob = rng.Find("x", , LookIn:=xlValues, LookAt:=xlWhole)
    If Not ob Is Nothing Then
        firstAddress = ob.Address
        Do
            If temp Is Nothing Then Set temp = ob
                Set temp = Application.Union(temp, ob)
                Set ob = rng.FindNext(ob)
        Loop While Not ob Is Nothing And ob.Address <> firstAddress
    End If
    On Error Resume Next
    temp.EntireColumn.Hidden = True

End Sub


und so könnte sie aufgerufen werden :


Code:
Private Sub CommandButton1_Click()
 ausblenden
End Sub


Aber die Selektiererei braucht man nicht und es geht auch einfach so:

Code:
Private Sub CommandButton1_Click()
Dim ob As Range
Dim rng As Range, firstAddress, temp As Range
With Sheets("Erfassung")
 Set rng = .Rows(2)
 Set ob = rng.Find("x", , LookIn:=xlValues, LookAt:=xlWhole)
 If Not ob Is Nothing Then
     firstAddress = ob.Address
     Do
         If temp Is Nothing Then Set temp = ob
             Set temp = Application.Union(temp, ob)
             Set ob = rng.FindNext(ob)
     Loop While Not ob Is Nothing And ob.Address <> firstAddress
 End If
 On Error Resume Next
 temp.EntireColumn.Hidden = True
End With
End Sub

Im Grunde muss vor Rows() der Blattname, das würde schon reichen:

Code:
Private Sub CommandButton1_Click()
Dim ob As Range
Dim rng As Range, firstAddress, temp As Range

 Set rng = Sheets("Erfassung").Rows(2)
 Set ob = rng.Find("x", , LookIn:=xlValues, LookAt:=xlWhole)
 If Not ob Is Nothing Then
     firstAddress = ob.Address
     Do
         If temp Is Nothing Then Set temp = ob
             Set temp = Application.Union(temp, ob)
             Set ob = rng.FindNext(ob)
     Loop While Not ob Is Nothing And ob.Address <> firstAddress
 End If
 On Error Resume Next
 temp.EntireColumn.Hidden = True

End Sub
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • peacescorer
Antworten Top
#4
Hallo Attila!

Sorry das ich mich erst jetzt melde!

Als separates Modul geht es perfekt! Danke dir!!!

Gruss Peacescorer
Antworten Top
#5
Hallo,

danke für die Rückmeldung.
Es freut mich sehr, dass meine Ausführungen Dein Problem lösen konnten. :19:
Gruß Atilla
Antworten Top


Gehe zu:


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