Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

[VBA] Fehler beim Zusammenfassen einer Schleife

[VBA] Fehler beim Zusammenfassen einer Schleife
19.06.2014 09:19:39
Andreas
Hallo zusammen,
für ein Uni-Projekt muss ich derzeit eine Portfolio-Optimierung zusammenbauen.
Hierfür habe ich mehrere Aktien, deren Renditen und Standardabweichungen ich berechne um am Ende den effizienten Rand zu berechnen.
Im Benutzerfenster soll man eingeben, welche Rendite man erwartet und welchen Zins eine sichere Anlage hat, desweiteren soll eine Tick-Box zum Einsatz kommen, mit der man auswählt, ob Leerverkäufe zulässig sind oder nicht.
Nun hatte ich zunächst die Folgende Schleifen um bei allen Werten, Tage an denen das Handelsvolumen bei 0 liegt, rauszulöschen.
Funktioniert auch, aber ich wollte das ganze vereinheitlichen, da es bei mehr Aktien ja immer _
mehr Code wird:

Sub 1()
Dim wsBMW As Worksheet:     Set wsBMW = Worksheets("BMW")
Dim wsBASF As Worksheet:    Set wsBASF = Worksheets("BASF")
Dim wsRWE As Worksheet:     Set wsRWE = Worksheets("RWE")
'Tage, an denen nicht gehandelt wurde löschen
Dim i As Integer, j As Integer, k As Integer
Dim letzteZeileBMW As Long:    letzteZeileBMW = wsBMW.Cells(2, 6).End(xlDown).Row
Dim lZBASF As Long:            lZBASF = wsBASF.Cells(2, 6).End(xlDown).Row
Dim lZRWE As Long:             lZRWE = wsRWE.Cells(2, 6).End(xlDown).Row
For i = 1 To letzteZeileBMW
With wsBMW
If .Cells(i, 6) = "0" Then
.Rows(i).Delete
End If
End With
Next i
For j = 1 To lZBASF
With wsBASF
If .Cells(j, 6) = "0" Then
.Rows(j).Delete
End If
End With
Next j
For k = 1 To lZRWE
With wsRWE
If .Cells(k, 6) = "0" Then
.Rows(k).Delete
End If
End With
Next k

Nun habe ich das ganze versucht zu kürzen, hierbei kam aber immer wieder der Fehler:"Fehler _
beim Kompilieren. Unzulässiger oder nicht ausreichend definierter Verweis." Hierbei wird . _ Rows(i) markiert.

Sub 1()
Dim wsBMW As Worksheet:     Set wsBMW = Worksheets("BMW")
Dim wsBASF As Worksheet:    Set wsBASF = Worksheets("BASF")
Dim wsRWE As Worksheet:     Set wsRWE = Worksheets("RWE")
Dim ws As Worksheet
'Tage, an denen nicht gehandelt wurde löschen
Dim i As Integer
For Each ws In ActiveWorkbook.Sheets
For i = ws.Cells(2, 6).End(xlDown).Row To 1
If ws.Cells(i, 6) = "0" Then .Rows(i).Delete
Next i
Next ws

Nun meine Frage, was ist an meinem kurzen Code falsch. Desweiteren wie kann ich einstellen, dass nur bestimmte worksheets berarbeitet werden, bzw. gewisse worksheets nicht bearbeitet werden?

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: [VBA] Fehler beim Zusammenfassen einer Schleife
19.06.2014 09:46:08
hary
Moin
Da fehlt die zuweisung.
ws.Rows(i).Delete
Und Ausnahmen
If ws.Name  "Beispiel" and ws.Name  "Beispiel1" Then 'Ausnahme
'dein Code
End If

gruss hary

AW: [VBA] Fehler beim Zusammenfassen einer Schleife
20.06.2014 17:27:14
Andreas
Hallo Harry,
danke für deine Hilfe, aber so ganz funktioniert es nicht.
Sub 1()
Dim wsBMW As Worksheet:     Set wsBMW = Worksheets("BMW")
Dim wsBASF As Worksheet:    Set wsBASF = Worksheets("BASF")
Dim wsRWE As Worksheet:     Set wsRWE = Worksheets("RWE")
Dim ws As Worksheet
Dim letzteZeileBMW As Long:    letzteZeileBMW = wsBMW.Cells(2, 6).End(xlDown).Row
Dim lZBASF As Long:            lZBASF = wsBASF.Cells(2, 6).End(xlDown).Row
Dim lZRWE As Long:             lZRWE = wsRWE.Cells(2, 6).End(xlDown).Row
'Tage, an denen nicht gehandelt wurde löschen
Dim i As Integer
If ws.Name  "wsBMW" And ws.Name  "wsBASF" And ws.Name  "wsRWE" Then
For Each ws In ActiveWorkbook.Sheets
For i = ws.Cells(2, 6).End(xlDown).Row To 1
If ws.Cells(i, 6) = "0" Then ws.Rows(i).Delete
Next i
Next ws
End Sub
Hier kommt Laufzeitfehler '91' mit der Meldung Objektvariable oder With-Blockvariable nicht _ definiert und es wird

If ws.Name  "wsBMW" And ws.Name  "wsBASF" And ws.Name  "wsRWE" Then
markiert. Hier wollte ich eigentlich, dass er die drei Worksheets anspricht.
Dim ws As Worksheet
Ist das so richtig definiert?
Vielen Dank für deine Hilfe!

Anzeige
AW: [VBA] Fehler beim Zusammenfassen einer Schleife
20.06.2014 17:36:55
hary
Moin
Deine tabellen heissen doch nicht wirklich Bsp.: wsBMW sonder eher BMW
If ws.Name  "wsBMW" And ws.Name  "wsBASF" And ws.Name  "wsRWE" Then

dann sollte es heissen:
If ws.Name  "BMW" And ws.Name  "BASF" And ws.Name  "RWE" Then

Dies sind aber die Ausnahmen wo der Code nicht greift.
andersrum
If ws.Name = "BMW" or ws.Name = "BASF" or ws.Name = "RWE" Then

gruss hary

AW: [VBA] Fehler beim Zusammenfassen einer Schleife
20.06.2014 18:00:56
Andreas
Hallo hary, das macht Sinn!
Vielen vielen Dank!

Anzeige
Neuer Fehler
20.06.2014 18:17:49
Andreas
Hallo Harry,
leider kommt immer noch die Fehlermeldung: '91' mit der Meldung Objektvariable oder With-Blockvariable nicht definiert
Sub 1()
Dim wsBMW As Worksheet:     Set wsBMW = Worksheets("BMW")
Dim wsBASF As Worksheet:    Set wsBASF = Worksheets("BASF")
Dim wsRWE As Worksheet:     Set wsRWE = Worksheets("RWE")
Dim ws As Worksheet
Dim letzteZeileBMW As Long:    letzteZeileBMW = wsBMW.Cells(2, 6).End(xlDown).Row
Dim lZBASF As Long:            lZBASF = wsBASF.Cells(2, 6).End(xlDown).Row
Dim lZRWE As Long:             lZRWE = wsRWE.Cells(2, 6).End(xlDown).Row
Dim i As Integer
If ws.Name = "BMW" Then
For Each ws In ActiveWorkbook.Sheets
For i = ws.Cells(2, 6).End(xlDown).Row To 1
If ws.Cells(i, 6) = "0" Then ws.Rows(i).Delete
Next i
Next ws
End If
End Sub

Anzeige
AW: Neuer Fehler
21.06.2014 08:36:37
Nepumuk
Hallo,
teste mal so:
Option Explicit

Public Sub Test()
    
    Dim vntItem As Variant
    Dim lngRow As Long
    
    For Each vntItem In Array("BMW", "BASF", "RWE")
        
        With Worksheets(vntItem)
            
            For lngRow = .Cells(.Rows.Count, 6).End(xlUp).Row To 1 Step -1
                
                If .Cells(lngRow, 6).Value = 0 Then .Rows(lngRow).Delete
                
            Next
        End With
    Next
End Sub

Gruß
Nepumuk

Anzeige
AW: Neuer Fehler
21.06.2014 09:48:32
hary
Moin
Codes gehen immer von oben nach unten durch.
Jetzt machst du:
If ws.Name = "BMW" Then -----hier ist ws noch kein Objekt
For Each ws In ActiveWorkbook.Sheets -----Hier gehst du aber erst die Sheets durch
Muss anders rum.
For Each ws In ActiveWorkbook.Sheets
If ws.Name = "BMW" Then
gruss hary

323 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige