Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
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

Schreibweise For- Schleife mit Namen

Schreibweise For- Schleife mit Namen
25.01.2023 18:51:23
Stefan
Hallo zusammen,
könnte mir jemand sagen ob mit der Schreibweise etwas nicht stimmt?
Hier ein Ausschnitt aus dem Code:

Dim dplist1 as String
Dim lastcell1 As Long
Dim lastcell2 As Long
Dim Z As Integer
Dim Y As Integer

For Z = lastcell1 To 500
For Y = 50 To lastcell2
If Workbooks(dplist1).Worksheets(1).Cells(Y, [standort].Column) > "" Then
Workbooks("Statistik.xlsm").Worksheets("offene Punkttests").Cells(Z, [PktEinf].Column) = Workbooks(dplist1).Worksheets(1).Cells(Y, [DPLaks].Column)
End If
Next Y
Next Z
Der Code bleibt in dieser Zeile hängen:
"Workbooks("Statistik.xlsm").Worksheets("offene Punkttests").Cells(Z, [PktEinf].Column) = Workbooks(dplist1).Worksheets(1).Cells(Y, [DPLaks].Column)"
Mit der Meldung "Objekt erforderlich".
Vielen Dank
Gruß
Stefan

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schreibweise For- Schleife mit Namen
25.01.2023 19:47:47
Piet
Hallo
wurde diese Variable vor der for Next Schleife festgelegt? - dplist1 = "xyz" 'Name des Workbooks
mfg Piet
lastcell2 ?
25.01.2023 20:04:30
ralf_b
wie groß ist lastcell2?
AW: Schreibweise For- Schleife mit Namen
25.01.2023 20:47:10
onur
Dim lastcell1 As Long
Dim lastcell2 As Long
Dimensionieren alleine bringt nix - du musst ihnen auch Werte zuweisen.
AW: Schreibweise For- Schleife mit Namen
25.01.2023 20:51:55
onur
Wenn du eine Variable als Long dimensionierst, wird sie angelegt und einfach auf 0 gesetzt, mehr nicht.
AW: Schreibweise For- Schleife mit Namen
25.01.2023 22:13:05
ralf_b
@onur,
die 0 funktioniert leider hier.
nur die rückwärtsschleife vermisst das step - 1
AW: Schreibweise For- Schleife mit Namen
25.01.2023 22:23:14
onur
Cells(Z, [PktEinf].Column) - also cells(0...) funktioniert?
Oder Cells(Y, [DPLaks].Column) ?
Anzeige
AW: Schreibweise For- Schleife mit Namen
25.01.2023 22:32:17
ralf_b
das vielleicht nicht , aber die Schleife an sich geht so.
AW: Schreibweise For- Schleife mit Namen
25.01.2023 22:36:38
onur
Ja klar, funktioniert nicht jede Schleife irgendwie, sei es auch nur 0 mal ? :)
Nur bei DIESEN Schleifen käme bei der Ersten sofort eine Fehlermeldung und bei der Zweiten erst am Ende.
AW: Schreibweise For- Schleife mit Namen
26.01.2023 08:23:36
Stefan
Hallo Zusammen,
vielen Dank für die vielen Antworten.
@Piet
Ja, dplist wird vor der Schleife festgelegt.
dplist1 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp1 & "*.xlsm")
@ralf_b
lastcell2 ist in diesem Testfall "166". Das variiert aber von Fall zu Fall
@onur
Es werden Werte zugewiesen
lastcell1 = Workbooks("Statistik.xlsm").Worksheets("offene Punkttests").Cells(Rows.Count, 2).End(xlUp).Row
lastcell2 = Workbooks(dplist1).Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
Ich habe das alles lediglich weggelassen, da es sich um mehrfach getestete Bestandteile des Codes handelt.
Mir ging es nur um die besagte Zeile.
Aber wenn´s hilft, hier der Code davor. (den danach lasse ich weg)
Sub Aktualisieren()
Dim pfad As String
Dim pfad1 As String
Dim active As String
Dim datei As String
Dim link1, link2, link3, link4, link5, link6, link7, link8, link9, link10, link11, link12, link13, link14, link15 As String
Dim dplist1, dplist2, dplist3, dplist4, dplist5, dplist6, dplist7, dplist8, dplist9, dplist10, dplist11, dplist12, dplist13, dplist14, dplist15 As String
Dim isp1, isp2, isp3, isp4, isp5, isp6, isp7, isp8, isp9, isp10, isp11, isp12, isp13, isp14, isp15 As String
Dim ordner1, ordner2, ordner3, ordner4, ordner5, ordner6, ordner7, ordner8, ordner9, ordner10, ordner11, ordner12, ordner13, ordner14, ordner15 As String
Dim dpt1, dpt2, dpt3, dpt4, dpt5, dpt6, dpt7, dpt8, dpt9, dpt10, dpt11, dpt12, dpt13, dpt14, dpt15 As String


ordner1 = Range("Config!C5") & Range("Config!D5")
ordner2 = Range("Config!C6") & Range("Config!D6")
ordner3 = Range("Config!C7") & Range("Config!D7")
ordner4 = Range("Config!C8") & Range("Config!D8")
ordner5 = Range("Config!C9") & Range("Config!D9")
ordner6 = Range("Config!C10") & Range("Config!D10")
ordner7 = Range("Config!C11") & Range("Config!D11")
ordner8 = Range("Config!C12") & Range("Config!D12")
ordner9 = Range("Config!C13") & Range("Config!D13")
ordner10 = Range("Config!C14") & Range("Config!D14")
ordner11 = Range("Config!C15") & Range("Config!D15")
ordner12 = Range("Config!C16") & Range("Config!D16")
ordner13 = Range("Config!C17") & Range("Config!D17")
ordner14 = Range("Config!C18") & Range("Config!D18")
ordner15 = Range("Config!C19") & Range("Config!D19")

pfad = ThisWorkbook.Path & "\"
pfad1 = Left(ThisWorkbook.Path, InStrRev(ThisWorkbook.Path, "\") - 18)

isp1 = Range("Config!B5")
isp2 = Range("Config!B6")
isp3 = Range("Config!B7")
isp4 = Range("Config!B8")
isp5 = Range("Config!B9")
isp6 = Range("Config!B10")
isp7 = Range("Config!B11")
isp8 = Range("Config!B12")
isp9 = Range("Config!B13")
isp10 = Range("Config!B14")
isp11 = Range("Config!B15")
isp12 = Range("Config!B16")
isp13 = Range("Config!B17")
isp14 = Range("Config!B18")
isp15 = Range("Config!B19")

link1 = Dir(pfad & "*" & isp1 & "*.xlsm")
link2 = Dir(pfad & "*" & isp2 & "*.xlsm")
link3 = Dir(pfad & "*" & isp3 & "*.xlsm")
link4 = Dir(pfad & "*" & isp4 & "*.xlsm")
link5 = Dir(pfad & "*" & isp5 & "*.xlsm")
link6 = Dir(pfad & "*" & isp6 & "*.xlsm")
link7 = Dir(pfad & "*" & isp7 & "*.xlsm")
link8 = Dir(pfad & "*" & isp8 & "*.xlsm")
link9 = Dir(pfad & "*" & isp9 & "*.xlsm")
link10 = Dir(pfad & "*" & isp10 & "*.xlsm")
link11 = Dir(pfad & "*" & isp11 & "*.xlsm")
link12 = Dir(pfad & "*" & isp12 & "*.xlsm")
link13 = Dir(pfad & "*" & isp13 & "*.xlsm")
link14 = Dir(pfad & "*" & isp14 & "*.xlsm")
link15 = Dir(pfad & "*" & isp15 & "*.xlsm")

dplist1 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp1 & "*.xlsm")
dplist2 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp2 & "*.xlsm")
dplist3 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp3 & "*.xlsm")
dplist4 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp4 & "*.xlsm")
dplist5 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp5 & "*.xlsm")
dplist6 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp6 & "*.xlsm")
dplist7 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp7 & "*.xlsm")
dplist8 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp8 & "*.xlsm")
dplist9 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp9 & "*.xlsm")
dplist10 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp10 & "*.xlsm")
dplist11 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp11 & "*.xlsm")
dplist12 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp12 & "*.xlsm")
dplist13 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp13 & "*.xlsm")
dplist14 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp14 & "*.xlsm")
dplist15 = Dir(pfad1 & "14 Software\Datenpunktlisten\" & ordner1 & "*" & isp15 & "*.xlsm")

dpt1 = Range("Config!E5")
dpt2 = Range("Config!E6")
dpt3 = Range("Config!E7")
dpt4 = Range("Config!E8")
dpt5 = Range("Config!E9")
dpt6 = Range("Config!E10")
dpt7 = Range("Config!E11")
dpt8 = Range("Config!E12")
dpt9 = Range("Config!E13")
dpt10 = Range("Config!E14")
dpt11 = Range("Config!E15")
dpt12 = Range("Config!E16")
dpt13 = Range("Config!E17")
dpt14 = Range("Config!E18")
dpt15 = Range("Config!E19")

Dim wertkbl(8) As Integer
Dim wertdpl(8) As Integer

Dim lastcell1 As Long
Dim lastcell2 As Long

Dim Z As Long
Dim Y As Long

'Anzeigen unterdrücken
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
'On Error GoTo Fehler1
If isp1 > "" Then
Workbooks.Open pfad & link1
Worksheets(1).Activate
wertkbl(0) = Range("provBeschr")
wertkbl(1) = Range("KabPos")
wertkbl(2) = Range("FeldgMont")
wertkbl(3) = Range("AnschlISP")
wertkbl(4) = Range("AnschlFeld")
wertkbl(5) = Range("FeldgBeschr")
wertkbl(6) = Range("KabBeschrVon")
wertkbl(7) = Range("KabBeschrNach")
wertkbl(8) = Range("AufmaßProz")
Windows("Statistik.xlsm").Activate
Range("C7").Value = wertkbl(0)
Range("D7").Value = wertkbl(1)
Range("E7").Value = wertkbl(2)
Range("F7").Value = wertkbl(3)
Range("G7").Value = wertkbl(4)
Range("H7").Value = wertkbl(5)
Range("I7").Value = wertkbl(6)
Range("J7").Value = wertkbl(7)
Range("K7").Value = wertkbl(8)
Workbooks(link1).Close SaveChanges:=False

If dpt1 = "ja" Then
Workbooks.Open pfad1 & "14 Software\Datenpunktlisten\" & ordner2 & dplist1
Worksheets(1).Activate
wertdpl(0) = Range("DPLproz")
wertdpl(1) = Range("DPLinsg")
wertdpl(2) = Range("DPLfertig")
lastcell1 = Workbooks("Statistik.xlsm").Worksheets("offene Punkttests").Cells(Rows.Count, 2).End(xlUp).Row
lastcell2 = Workbooks(dplist1).Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
For Z = lastcell1 To 500
For Y = 50 To lastcell2
If Workbooks(dplist1).Worksheets(1).Cells(Y, [standort].Column) > "" Then
Workbooks("Statistik.xlsm").Worksheets("offene Punkttests").Cells(Z, [PktEinf].Column) = Workbooks(dplist1).Worksheets(1).Cells(Y, [DPLaks].Column)
End If
Next Y
Next Z
Workbooks("Statistik.xlsm").Worksheets("Statistik").Range("M7").Value = wertdpl(0)
Workbooks("Statistik.xlsm").Worksheets("Statistik").Range("N7").Value = wertdpl(1)
Workbooks("Statistik.xlsm").Worksheets("Statistik").Range("O7").Value = wertdpl(2)
Workbooks(dplist1).Close SaveChanges:=False
End If
End If
GoTo List2
'Fehler1:
'MsgBox "Fehler bei Abfrage von ISP in Zeile 1!"
hier kommt noch viel Code aber nicht relevant...
Gruß
Stefan
Anzeige
Zusatz ".Value" erforderlich
26.01.2023 10:08:10
Yal
Hallo Stefan,
Bei einer Zuweisung von Zelle zu Zelle kommt Excel aus der Bahn. Man muss xl sagen, dass man die Value der Zelle übertragen möchte:
Workbooks("Statistik.xlsm").Worksheets("offene Punkttests").Cells(Z, [PktEinf].Column) = Workbooks(dplist1).Worksheets(1).Cells(Y, [DPLaks].Column).Value
VG
Yal
AW: Zusatz ".Value" erforderlich
26.01.2023 13:12:46
Stefan
Hallo Yal,
vielen Dank für Deine Antwort.
Ich habe es nach Deiner Anpassung getestet. Funktioniert leider nicht.
Davon abgesehen, habe ich diese Schreibweise an anderer Stelle schon einmal erfolgreich getestet.
Allerdings nur teilweise mit "definierten Namen":
Ich habe jetzt das ganze mit direktem Spaltenbezug getestet.
Also so:
Workbooks("Statistik.xlsm").Worksheets("offene Punkttests").Cells(Z, 2) = Workbooks(dplist1).Worksheets(1).Cells(Y, 65)
funktioniert
Und dann so:
Workbooks("Statistik.xlsm").Worksheets("offene Punkttests").Cells(Z, 2) = Workbooks(dplist1).Worksheets(1).Cells(Y, [DPLaks].Column)
funktioniert auch
Sobald ich aber den ersten "definierten Namen" eingebe - funktioniert es nicht mehr.
Aber warum? Ich habe den Spaltenbezug kontrolliert, gelöscht und neu erstellt, umbenannt - geht einfach nicht.
Ich kann zwar mit dieser Lösung leben. Aber verstehen würde ich es gerne.
Gruß
Stefan
Anzeige
AW: Zusatz ".Value" erforderlich
27.01.2023 18:45:50
Yal
Hallo Stefan,
Du stellst sehr viele Variablen bereit, die Du gar nicht benutzst. Es kann für Debugging-Zweck sinnvoll sein, lastet aber die Lesbbarkeit aus.
Vermeide, die Range "unqualifiziert" anzusprechen. Ein Range ist immer in einem Blatt. Ohne definiertem Blatt wird der Range immer auf das ActiveSheet gesucht. Nutzt dafür Objekt-Variable vom Typ "Worksheet" oder eine With.
Dein Code lässt wie folgt "bereinigen" ("End Sub" ist nicht klar. Bitte immer kompletten Sub posten):
Type Datei
    Ordner As String
    isp As String
    Link As String
    dpList As String
    dpt As String
End Type
Sub Aktualisieren()
Dim i, R
Dim pfad As String
Dim pfad1 As String
Dim Dateien(1 To 15) As Datei
Dim wsQ As Worksheet ' Q wie quelle
Dim wsZ As Worksheet ' Z wie Ziel
Dim lastRowZ As Long
Dim lastRowQ As Long
Dim Z As Long
Dim Y As Long
pfad = ThisWorkbook.Path & "\"
pfad1 = Left(ThisWorkbook.Path, InStrRev(ThisWorkbook.Path, "\") - 18)
    For i = 1 To 15
        With Dateien(i)
            .Ordner = Range("Config!C" & i + 4) & Range("Config!D" & i + 4).Value
            .isp = Range("Config!B" & i + 4).Value
            .Link = Dir(pfad & "*" & .isp & "*.xlsm")
            .dpList = Dir(pfad1 & "14 Software\Datenpunktlisten\" & .Ordner & "*" & .isp & "*.xlsm")
            .dpt = Range("Config!E" & i + 4).Value
        End With
    Next
'Anzeigen unterdrücken
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.EnableEvents = False
'On Error GoTo Fehler1
    If Dateien(1).isp > "" Then
        Set wsQ = Workbooks.Open(pfad & Dateien(1).Link).Worksheets(1)
        Set wsZ = Workbooks("Statistik.xlsm").ActiveSheet
        wsQ.Activate
        i = 0
        For Each R In Split("provBeschr KabPos FeldgMont AnschlFeld FeldgBeschr KabBeschrVon KabBeschrNach AufmaßProz")
            wsZ.Cells(i + 7, "C") = wsQ.Range(R).Value
            i = i + 1
        Next
        wsQ.Close SaveChanges:=False
        If Dateien(1).dpt = "ja" Then
            Set wsQ = Workbooks.Open(pfad1 & "14 Software\Datenpunktlisten\" & Dateien(2).Ordner & Dateien(1).dpList).Worksheets(1) 'Dateien(2) & (1)? Sicher?
            wsQ.Activate
            With Workbooks("Statistik.xlsm").Worksheets("Statistik")
                .Range("M7").Value = wsQ.Range("DPLproz").Value
                .Range("N7") = wsQ.Range("DPLinsg").Value
                .Range("O7") = wsQ.Range("DPLfertig").Value
            End With
            
            Set wsZ = Workbooks("Statistik.xlsm").Worksheets("offene Punkttests")
            lastRowZ = wsZ.Cells(Rows.Count, 2).End(xlUp).Row
            lastRowQ = wsQ.Cells(Rows.Count, 2).End(xlUp).Row
            For Z = lastRowZ To 500
                For Y = 50 To lastRowQ
                    If wsQ.Cells(Y, wsQ.Range("standort").Column) > "" Then
                        wsZ.Cells(Z, wsZ.Range("PktEinf").Column) = wsQ.Cells(Y, wsQ.Range("DPLaks").Column).Value
                    End If
                Next Y
            Next Z
            wsQ.Close SaveChanges:=False
        End If
    End If
    GoTo List2
Fehler1:
'MsgBox "Fehler bei Abfrage von ISP in Zeile 1!"
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Application.EnableEvents = True
End Sub
VG
Yal
Anzeige
AW: Zusatz ".Value" erforderlich
28.01.2023 07:37:34
Stefan
Vielen Dank an alle Beteiligten.
Gruß
Stefan

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige