Thema Datum  Von Nutzer Rating
Antwort
Rot Kombinierung von LastRow,Autofilter und CopySheet
11.10.2011 15:41:55 Gast4802
NotSolved
11.10.2011 18:57:47 Till
NotSolved
12.10.2011 09:21:56 Gast89110
NotSolved
13.10.2011 09:38:49 Gast89102
NotSolved
13.10.2011 22:40:50 Till
NotSolved

Ansicht des Beitrags:
Von:
Gast4802
Datum:
11.10.2011 15:41:55
Views:
1804
Rating: Antwort:
  Ja
Thema:
Kombinierung von LastRow,Autofilter und CopySheet

 

Servus,

 

ich bin noch ganz der noob was VBA angeht, deshalb habe ich gehofft etwas Hilfe in diesem Forum zu bekommen.

 

Mein Makro sollte so aussehen. Ich habe eine sheet welches sagen wir mal Kennzahlen beinhaltet die auf untershiedliche Tochterunternehmen sortiert sind. Mit einem Makro möchte ich diese Sheets kopieren, ein Autofilter für eine Range einfügen und die FilterValues einfügen. So und das alles in einem Makro. Einzeln funktioniert alles wunderbar (also autofilter nach Lastrow und Sheets kopieren-umbenennen-autofilterkriterien-setzen), aber wenn ich versuche die zwei codes zusammen zu fügen, dann geht nichts mehr. Sehe nicht wo der Fehler ist. Habe schon alles ausprobiert.

 

Hier der code der nicht klappt:

 

[code]Sub CopySheets()

   

    Dim LastRow As Long

    Dim rng As Range

    Dim SheetName As String

   

    Application.ScreenUpdating = False

   

    'Hier wird die letzte Zeile gesucht für die Range die dem Autofilter gegeben werden soll.

    For Each wks In ThisWorkbook.Worksheets

 

        Set rng = Sheets("Total (Monthly Development)").Cells

 

        Set rng = Sheets("Total (Monthly Development)").Range("C1:C3000")

 

        LastRow = Last(1, rng)

   

    With rng

            LastRow = rng.Find(What:="*", _

                        After:=rng.Cells(1), _

                        Lookat:=xlPart, _

                        LookIn:=xlFormulas, _

                        SearchOrder:=xlByRows, _

                        SearchDirection:=xlPrevious, _

                        MatchCase:=False).Row

    End With

   

'Hier wird der Autfilter gesetzt

    Sheets("Total (Monthly Development)").AutoFilterMode = False

    Sheets("Total (Monthly Development)").Range(Cells(3, 1), Cells(LastRow, 8)).Autofilter

   

'Hier werden die sheets kopiert und nach dem criterium benannt. Da es nur sechs sind, habe ich die einzelnen Vorgänge mehrmals eingetippt. Geht bestimmt auch einfacher.

    SheetName = "1"

    Sheets("Total (Monthly Development)").Copy After:=Sheets("Total (Monthly Development)")

    ActiveSheet.Name = "1"

   

    Sheets("1").Autofilter Field:=6, Criteria1:="1"

    Sheets("1").Autofilter Field:=8, Criteria1:="Actual"

 

'Hier werden die Makro-Buttons entfernt.

    Sheets("1").Shapes("Button 47").Select

    Selection.Delete

    Sheets("1").Shapes("Button 46").Select

    Selection.Delete

   

'Habe davor mit activesheet gearbeitet, habe ohne versucht und funktionierte beides nicht. Nur als Erklärung weshalb die Commands sich unterscheiden.

    SheetName = "2"

    Sheets("Total (Monthly Development)").Copy After:=Sheets("Total (Monthly Development)")

    ActiveSheet.Name = "2"

   

    ActiveSheet.Shapes("Button 47").Select

    Selection.Delete

    ActiveSheet.Shapes("Button 46").Select

    Selection.Delete

   

    Selection.Autofilter Field:=6, Criteria1:="2"

    Selection.Autofilter Field:=8, Criteria1:="Actual"

   

    SheetName = "3"

    Sheets("Total (Monthly Development)").Copy After:=Sheets("Total (Monthly Development)")

    ActiveSheet.Name = "3"

   

    ActiveSheet.Shapes("Button 47").Select

    Selection.Delete

    ActiveSheet.Shapes("Button 46").Select

    Selection.Delete

   

    Selection.Autofilter Field:=6, Criteria1:="3"

    Selection.Autofilter Field:=8, Criteria1:="Actual"

   

    SheetName = "4"

    Sheets("Total (Monthly Development)").Copy After:=Sheets("Total (Monthly Development)")

    ActiveSheet.Name = "4"

   

    ActiveSheet.Shapes("Button 47").Select

    Selection.Delete

    ActiveSheet.Shapes("Button 46").Select

    Selection.Delete

   

    Selection.Autofilter Field:=6, Criteria1:="4"

    Selection.Autofilter Field:=8, Criteria1:="Actual"

   

    SheetName = "5"

    Sheets("Total (Monthly Development)").Copy After:=Sheets("Total (Monthly Development)")

    ActiveSheet.Name = "5"

   

    ActiveSheet.Shapes("Button 47").Select

    Selection.Delete

    ActiveSheet.Shapes("Button 46").Select

    Selection.Delete

   

    Selection.Autofilter Field:=6, Criteria1:="5"

    Selection.Autofilter Field:=8, Criteria1:="Actual"

 

    SheetName = "6"

    Sheets("Total (Monthly Development)").Copy After:=Sheets("Total (Monthly Development)")

    ActiveSheet.Name = "6"

   

    ActiveSheet.Shapes("Button 47").Select

    Selection.Delete

    ActiveSheet.Shapes("Button 46").Select

    Selection.Delete

   

    Selection.Autofilter Field:=6, Criteria1:="6"

    Selection.Autofilter Field:=8, Criteria1:="Actual"

 

Next

   

Application.ScreenUpdating = True

End Sub[/code]

 

So, wie gesagt ich bin kein Profi, daher habe ich keinen Code, der Einfach bzw. kurz ist. Und im Moment funktioniert er auch nichtmal.

 

Ich würde mich über eure Hilfe freuen. Danke im Voraus.

 

P.S. Stellt euch vor die Zahlen 1-6 wären Branchen.

 

P.P.S Hier noch der code, für die Lastrow funktion:

 

[code]Function Last(choice As Long, rng As Range)

   

    Dim lrw As Long

    Dim lcol As Long

 

    Select Case choice

 

    Case 1:

        On Error Resume Next

        Last = rng.Find(What:="*", _

                        After:=rng.Cells(1), _

                        Lookat:=xlPart, _

                        LookIn:=xlFormulas, _

                        SearchOrder:=xlByRows, _

                        SearchDirection:=xlPrevious, _

                        MatchCase:=False).Row

        On Error GoTo 0

 

    Case 2:

        On Error Resume Next

        Last = rng.Find(What:="*", _

                        After:=rng.Cells(1), _

                        Lookat:=xlPart, _

                        LookIn:=xlFormulas, _

                        SearchOrder:=xlByColumns, _

                        SearchDirection:=xlPrevious, _

                        MatchCase:=False).Column

        On Error GoTo 0

 

    Case 3:

        On Error Resume Next

        lrw = rng.Find(What:="*", _

                       After:=rng.Cells(1), _

                       Lookat:=xlPart, _

                       LookIn:=xlFormulas, _

                       SearchOrder:=xlByRows, _

                       SearchDirection:=xlPrevious, _

                       MatchCase:=False).Row

        On Error GoTo 0

 

        On Error Resume Next

        lcol = rng.Find(What:="*", _

                        After:=rng.Cells(1), _

                        Lookat:=xlPart, _

                        LookIn:=xlFormulas, _

                        SearchOrder:=xlByColumns, _

                        SearchDirection:=xlPrevious, _

                        MatchCase:=False).Column

        On Error GoTo 0

 

        On Error Resume Next

        Last = rng.Parent.Cells(lrw, lcol).Address(False, False)

        If Err.Number > 0 Then

            Last = rng.Cells(1).Address(False, False)

            Err.Clear

        End If

        On Error GoTo 0

 

    End Select

End Function[/code]


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Kombinierung von LastRow,Autofilter und CopySheet
11.10.2011 15:41:55 Gast4802
NotSolved
11.10.2011 18:57:47 Till
NotSolved
12.10.2011 09:21:56 Gast89110
NotSolved
13.10.2011 09:38:49 Gast89102
NotSolved
13.10.2011 22:40:50 Till
NotSolved