Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1444to1448
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 Hilfe

VBA Hilfe
15.09.2015 09:14:12
Roffel89
Hallo zusammen,
ich benötige Hilfe bei meinem Code.
Mir geht es hier um den 'sheet selector. Ich habe in Excel bisher die Tabellenblätter (von links nach rechts) Summary, 30112015, Dokumentation und Cockpit.
Und immer wenn ich in Zukunft eine neue Prüfung durchführen möchte, erweitere ich die Arbeitsmappe um ein neues Tabellenblatt mit dem Datum und füge es rechts neben das letzte Datum, in dem Fall 30112015.
In meinem bisherigen Code, weiße ich oben Sheet ja direct dem aktuellen Tabellenblatt 30112015. Wie kann ich das lösen, dass ich bei der nächsten Prüfung, nicht den vba Code anpassen muss, sondern er automatisch bei einer Prüfung das neueste Tabellenblatt auswählt?
Wäre super, wenn das jemand wüsste.

Public Sub testClient()
Dim sheet As String
'sheet selector
sheet = "30112015"
'Summary Zeile mit Datum und Anzahl der Datensätze
Dim summary As Integer
summary = checkList(sheet, 13, "Fall 4")
summary = summary + checkList(sheet, 12, "Fall 3")
summary = summary + checkList(sheet, 11, "Fall 2")
summary = summary + checkList(sheet, 10, "Fall 1")
Call newLineAndFormat
Sheets("Summary").Cells(15, 2).Value = "=TODAY()"
Sheets("Summary").Cells(15, 6).Value = summary
Sheets("Summary").Activate
End Sub

Function checkList(sheet As String, caseColumn As Integer, Optional label As String = "") As Integer
Dim currentRow As Long
Dim counter As Integer
'Checking List
For currentRow = Sheets(sheet).Cells.SpecialCells(xlLastCell).Column To 2 Step -1
If (Sheets(sheet).Cells(currentRow, caseColumn).Value = "True" Or _
Sheets(sheet).Cells(currentRow, caseColumn).Value = "Wahr") Then
Call newLineAndFormat
Sheets("Summary").Cells(15, 4).Value = Sheets(sheet).Cells(currentRow, 1).Value
counter = counter + 1
End If
Next currentRow
'Summary row
Call newLineAndFormat
Sheets("Summary").Cells(15, 4).Value = label
Sheets("Summary").Cells(15, 6).Value = counter
Sheets("Summary").Activate
checkList = counter
End Function

Private Sub newLineAndFormat()
Sheets("Summary").Activate
Sheets("Summary").Rows("15:15").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("Summary").Range("16:16").Copy
Sheets("Summary").Rows("15:15").PasteSpecial Paste:=xlPasteFormats
Sheets("Summary").Range("B15").Select
Application.CutCopyMode = False
End Sub
Beste Grüße

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Hilfe
15.09.2015 09:31:24
RPP63
Hallo!
So der Spur nach:
Sub LetztesSheet()
Dim lWKS As Worksheet
Set lWKS = Worksheets(Worksheets.Count)
lWKS.Activate
End Sub
Gruß Ralf

AW: VBA Hilfe
15.09.2015 09:50:53
Roffel89
Hallo Ralf,
danke für deine Antwort. Jetzt das Problem, dass es im Prinzip nicht mein letztes Worksheet ist, da ja noch das Worksheet Dokumentation und Cockpit kommen. Gibt es da eine Möglichkeit zu sagen, das "Vorvorletzte" Worksheet oder so ? :)
VG

Set lWKS = Worksheets(Worksheets.Count-2) owT
15.09.2015 10:59:03
Rudi

AW: Set lWKS = Worksheets(Worksheets.Count-2) owT
15.09.2015 11:19:59
Roffel89
Hallo Rudi,
danke für deine Antwort. An meiner Umsetzung scheitert es bislang noch.
Ich hab deine Bausteine jetzt ganz oben angehängt. Allerdings passiert jetzt nichts mehr.
Ich bekomm die Fehlermeldung: Laufzeitfehler 9: Index auserhalb des gültigen Bereichs. Das bringt er bei dieser Zeile: For currentRow = Sheets(sheet).Cells.SpecialCells(xlLastCell).Column To 2 Step -1
Weiß jemand was zu tun ist nun ? :(
LetztesSheet()
Dim lWKS As Worksheet
Set lWKS = Worksheets(Worksheets.Count - 2)
lWKS.Activate
End Sub
Public Sub testClient()
Dim sheet As String
'sheet selector
sheet = "lWKS"
'Summary Zeile mit Datum und Anzahl der Datensätze
Dim summary As Integer
summary = checkList(sheet, 13, "Fall 4")
summary = summary + checkList(sheet, 12, "Fall 3")
summary = summary + checkList(sheet, 11, "Fall 2")
summary = summary + checkList(sheet, 10, "Fall 1")
Call newLineAndFormat
Sheets("Summary").Cells(15, 2).Value = "=TODAY()"
Sheets("Summary").Cells(15, 6).Value = summary
Sheets("Summary").Activate
End Sub
Function checkList(sheet As String, caseColumn As Integer, Optional label As String = "") As Integer
Dim currentRow As Long
Dim counter As Integer
'Checking List
For currentRow = Sheets(sheet).Cells.SpecialCells(xlLastCell).Column To 2 Step -1
If (Sheets(sheet).Cells(currentRow, caseColumn).Value = "True" Or _
Sheets(sheet).Cells(currentRow, caseColumn).Value = "Wahr") Then
Call newLineAndFormat
Sheets("Summary").Cells(15, 4).Value = Sheets(sheet).Cells(currentRow, 1).Value
counter = counter + 1
End If
Next currentRow
'Summary row
Call newLineAndFormat
Sheets("Summary").Cells(15, 4).Value = label
Sheets("Summary").Cells(15, 6).Value = counter
Sheets("Summary").Activate
checkList = counter
End Function
Private Sub newLineAndFormat()
Sheets("Summary").Activate
Sheets("Summary").Rows("15:15").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("Summary").Range("16:16").Copy
Sheets("Summary").Rows("15:15").PasteSpecial Paste:=xlPasteFormats
Sheets("Summary").Range("B15").Select
Application.CutCopyMode = False
End Sub

i>

Anzeige
AW: Set lWKS = Worksheets(Worksheets.Count-2) owT
15.09.2015 12:14:42
Rudi
Hallo,
auf keinen Fall solltest du VBA-Schlüsselwörter (sheet) als Variablennamen nehmen.
Dim strSheet as string
Lad mal die Mappe hoch.
Gruß
Rudi

AW: Set lWKS = Worksheets(Worksheets.Count-2) owT
15.09.2015 12:47:36
Roffel89
Servus Rudi,
danke für deine Antwort. Ich versuche jetzt mal die Datei hier hochzuladen.
https://www.herber.de/bbs/user/100185.xlsm
Ich hoffe das hilft dir weiter
VG

AW: Set lWKS = Worksheets(Worksheets.Count-2) owT
15.09.2015 13:16:35
Rudi
Hallo,
in der Mappe gibt es kein Sheet namens lwks.
Gruß
Rudi

AW: Set lWKS = Worksheets(Worksheets.Count-2) owT
15.09.2015 13:22:32
Roffel89
Hallo Rudi,
ja genau. Ich dachte das ware nur eine Bennung/Zuweisung gewesen.
Ich will ja das er immer das drittletzte Worksheet für die Funktion benutzt.
Wie muss es denn dann in meinem Fall heißen.. ich bin verwirrt.
VG

Anzeige
AW: Set lWKS = Worksheets(Worksheets.Count-2) owT
15.09.2015 13:36:32
Rudi
hallo,
dann doch einfach
sheet=Worksheets(worksheets.count-2).Name
Gruß
Rudi

AW: Set lWKS = Worksheets(Worksheets.Count-2) owT
15.09.2015 13:45:03
Roffel89
Hallo Rudi,
du meinst einfach ganz oben bei 'sheet selector deine Zeile einfügen?
Sobald ich das mache, macht er allerdings nicht mehr die richtigen Sachen^^.
hmmmmmmmmmmm

Public Sub testClient()
Dim sheet As String
'sheet selector
sheet = Worksheets(Worksheets.Count - 2).Name
'Summary Zeile mit Datum und Anzahl der Datensätze
Dim summary As Integer
summary = checkList(sheet, 13, "Fall 4")
summary = summary + checkList(sheet, 12, "Fall 3")
summary = summary + checkList(sheet, 11, "Fall 2")
summary = summary + checkList(sheet, 10, "Fall 1")
Call newLineAndFormat
Sheets("Summary").Cells(15, 2).Value = "=TODAY()"
Sheets("Summary").Cells(15, 6).Value = summary
Sheets("Summary").Activate
End Sub
Function checkList(sheet As String, caseColumn As Integer, Optional label As String = "") As Integer
Dim currentRow As Long
Dim counter As Integer
'Checking List
For currentRow = Sheets(sheet).Cells.SpecialCells(xlLastCell).Column To 2 Step -1
If (Sheets(sheet).Cells(currentRow, caseColumn).Value = "True" Or _
Sheets(sheet).Cells(currentRow, caseColumn).Value = "Wahr") Then
Call newLineAndFormat
Sheets("Summary").Cells(15, 4).Value = Sheets(sheet).Cells(currentRow, 1).Value
counter = counter + 1
End If
Next currentRow
'Summary row
Call newLineAndFormat
Sheets("Summary").Cells(15, 4).Value = label
Sheets("Summary").Cells(15, 6).Value = counter
Sheets("Summary").Activate
checkList = counter
End Function
Private Sub newLineAndFormat()
Sheets("Summary").Activate
Sheets("Summary").Rows("15:15").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("Summary").Range("16:16").Copy
Sheets("Summary").Rows("15:15").PasteSpecial Paste:=xlPasteFormats
Sheets("Summary").Range("B15").Select
Application.CutCopyMode = False
End Sub


Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige