Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1184to1188
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA
12.11.2010 21:45:48
willi
Hallo Experten,
im Tabellenbalatt "Haupt" stehen in der Spalte "H" PLZ (verschiedene). Im Tabellenblatt "10115" werden jetzt per ClickButton alle 10115 PLZ eingetragen. Soweit so gut, nun sollen aber auch die anderen PLZ in die entsprechenden TB"10197" uns eingetragen werden. Jetzt weis ich nicht weiter, ich hoffe ihr könnt mir helfen. Jetzt schon mal Danke im voraus.
willi
https://www.herber.de/bbs/user/72279.xls
AW: VBA
12.11.2010 22:16:18
Josef

Hallo Willi,
kopiere folgenden Code in das Modul der Tabelle "Haupt".

' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub CommandButton1_Click()
  Dim objSh As Worksheet
  Dim lngLast As Long, lngRow As Long
  
  On Error GoTo ErrExit
  Application.ScreenUpdating = False
  With Me
    lngLast = Application.Max(2, .Cells(Rows.Count, 8).End(xlUp).Row)
    
    For lngRow = 2 To lngLast
      If .Cells(lngRow, 8) <> "" Then
        If SheetExist(.Cells(lngRow, 8).Text) Then
          Set objSh = Sheets(.Cells(lngRow, 8).Text)
        Else
          Set objSh = Worksheets.Add(after:=Sheets(Sheets.Count))
          objSh.Name = .Cells(lngRow, 8).Text
        End If
        .Rows(lngRow).Copy objSh.Cells(Application.Max(2, objSh.Cells(objSh.Rows.Count, 8).End(xlUp).Row + 1), 1)
      End If
    Next
    sortSheets
    .Move before:=Sheets(1)
  End With
  
  ErrExit:
  Application.ScreenUpdating = True
  Set objSh = Nothing
End Sub

Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook) As Boolean
  Dim wks As Worksheet
  On Error GoTo ERRORHANDLER
  If Wb Is Nothing Then Set Wb = ThisWorkbook
  For Each wks In Wb.Worksheets
    If LCase(wks.Name) = LCase(sheetName) Then SheetExist = True: Exit Function
  Next
  ERRORHANDLER:
  SheetExist = False
End Function

Sub sortSheets(Optional Order As XlSortOrder = xlAscending, Optional AlphaNumeric As Boolean = True)
  Dim lngA As Integer, lngB As Integer
  
  With ActiveWorkbook
    For lngA = 1 To .Sheets.Count
      For lngB = 1 To .Sheets.Count - 1
        If Format(UCase$(.Sheets(lngB + IIf(Order = xlAscending, 0, 1)).Name), _
          IIf(AlphaNumeric, "000000000", "@")) > Format(UCase$(.Sheets(lngB + _
          IIf(Order = xlAscending, 1, 0)).Name), IIf(AlphaNumeric, _
          "000000000", "@")) Then
          .Sheets(lngB).Move after:=.Sheets(lngB + 1)
        End If
      Next
    Next
  End With
End Sub

Gruß Sepp

Anzeige
AW: VBA
13.11.2010 08:59:25
willi
Guten Morgen Sepp,
du bist wirklich ein Experte, das hätte ich nie hin bekommen. Mit dem VBA hast du mir viel zeit erspart.
Eine kleine bitte hätte ich aber noch. In der Origanaltabelle stehen die PLZ in Spalte "I" und die Daten fangen in Reihe "16" an, die Überschrift steht in Reihe "15". Muß das Tabellenblatt "Haupt" immer am Anfang stehen oder ist das egal, wahrscheinlich muss man es im VBA angeben, oder!
Nochmals vielen Dank,
Willi
AW: VBA
13.11.2010 09:06:59
Josef

Hallo Willi,
wo das Blatt "Haupt" steht ist egal, die Tabellenblätter werden vom Code sortiert und das Blatt "Haupt" an den Anfang verschoben.
ersetze den Code für den Commandbutton durch folgenden.

Private Sub CommandButton1_Click()
  Dim objSh As Worksheet
  Dim lngLast As Long, lngRow As Long
  
  On Error GoTo ErrExit
  Application.ScreenUpdating = False
  With Me
    lngLast = Application.Max(16, .Cells(Rows.Count, 9).End(xlUp).Row)
    
    For lngRow = 16 To lngLast
      If .Cells(lngRow, 9) <> "" Then
        If SheetExist(.Cells(lngRow, 9).Text) Then
          Set objSh = Sheets(.Cells(lngRow, 9).Text)
        Else
          Set objSh = Worksheets.Add(after:=Sheets(Sheets.Count))
          objSh.Name = .Cells(lngRow, 9).Text
        End If
        .Rows(lngRow).Copy objSh.Cells(Application.Max(2, objSh.Cells(objSh.Rows.Count, 9).End(xlUp).Row + 1), 1)
      End If
    Next
    sortSheets
    .Move before:=Sheets(1)
  End With
  
  ErrExit:
  Application.ScreenUpdating = True
  Set objSh = Nothing
End Sub

Gruß Sepp

Anzeige
AW: VBA
13.11.2010 09:24:59
willi
Hi Sepp,
Danke für deine Hilfe, du bist Klasse.
Wenn ich wieder mal nicht weiter komme werde ich mich melden,
Tschau und noch ein schönes Wochenende
Willi

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige