Clever-Excel-Forum

Normale Version: For Schleife funktioniert nicht.
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

habe mal wieder ein Problem :P

Ich speicher per openfilename  den Dateinamen einener Exceldatei in einer variablen, am Anfang des Makros, am Ende möchte ich dann mithilfe dieser Variablen die Exceldatei activieren, da ich zwischenzeitlich in ein anderes Excelfile geswitcht bin. Dann will ich in dem File von Spalte 5 ab in Zeile 5 bis zum letzten Eintrag alles kopieren was großer 0 ist, das gleich in Spalte 13 ab Zeile 5, die Beziehung muss dabei immer erhalten bleiben, alslo er muss gleichzeitig den Inhalt von 5, 5 und 5, 23 jeweils in das Exelfile   "S - Tool.xls" der Reihe nach kopieren.
Habe versucht das mit einer For Schleife zu machen, aber die klappt so nicht. Es fängt schon damit an, das Excel offenbar den Dateinamen in der Variablen nicht erkennt, also das activieren des Exelfiles klappt schon nicht. Wenn ich das weglasse, kommt der nächste Fehler bei der For Schleife. Offenbar gibts da einige Syntaxfehler?
Wäre euch sehr verbunden, wenn da mal wer über die For Schleife schauen könnte.
Danke!
 
 End Sub
Code:
' **** Sverweis ****
  Dim I As Integer
  Dim varName As Variant
  Dim Name As String
  Dim Filename As String
  Dim Pfad As String
  Dim lz As Long
  Dim Sachnummer As String
 
   ChDrive ("Z:\")
  'ChDir ("C:\DVD\")
   ChDir (Sheets("Daten").Cells(3, 1))

   Filename = Application.GetOpenFilename(, , "Universal Magazinbelegung auswählen")
 
 
   Filename = Dir(Filename)
   Pfad = CurDir

' **** Neuer  Import ****

Dim Zeile5 As Integer
Dim Zeile13 As Integer




Workbooks(Filename).Sheets("Siemens").Activate

                 
        letzte = .Cells(Rows.Count, 5).End(xlUp).Row
                       
        I = 2
        c = 5
        For d = Cells(c, 5) To Cells(letzte, 5)
        If .Cells(c, 5) <> "" Then
            ThisWorkbook.Sheets("Siemens").Cells(c, 5) = Zeile5
            ThisWorkbook.Sheets("Siemens").Cells(c, 13) = Zeile13
            Workbooks("S - Tool.xls").Sheets("Sverweis-Auswahl").Cells(I, 5) = Zeile5
            Workbooks("S - Tool.xls").Sheets("Sverweis-Auswahl").Cells(I, 6) = Zeile13
              c = c + 1
              I = I + 1
              Else
              c = c + 1
           End If
        Next d



End Sub
Hallo,

bei dieser Codezeile

Code:
If .Cells(c, 5) <> "" Then

fehlt vorher schon mal ein With Worksheets("........ und End With

aber besser wäre es, du würdest mitteilen, in welchen Codezeilen die Fehlermeldungen auftauchen und wie sie lauten.
Hallo,

1. mit getopenfilename wird nichts gespeichert!

2. die Schleife macht keinen Sinn:
Code:
For d = Cells(c, 5) To Cells(letzte, 5)

wenn Cells(c, 5) leer ist, was ja nach Deiner nächsten Abfrage sein kann, dann ist es vorbei mit Schleife! Wenn Cells(c, 5)>Cells(letzte, 5)

Zum Mitschreiben: Du fragst die Inhalte der Zellen ab, wenn das keine aufsteigenden Zahlen sind, ist die Schleife gestorben!

Offensichtlich haben die Zellen auch keinen Wert:

Code:
ThisWorkbook.Sheets("Siemens").Cells(c, 5) = Zeile5

Welchen Wert hat Zeile5????
Hallo Steffl,

der erste Fehler ist in dieser Zeile:

For d = Cells(c, 5) To Cells(letzte, 5)

Da sagt er  Laufzeitfehler,13     Typen unverträglich



Hallo Bosko,

In der Variablen "Filename" steht jedefalls der Dateiname.xlsm, da ich den auch an anderer Stelle anzeigen lasse.

Versteh ich nicht ganz, ich will doch dass die Schleife zueende ist, wenn Cells(c, 5) größer ist als Cells(letzte, 5), weil dann gibts ja nichts mehr zum kopieren.
Mein Plan war, dass ich in die Variable "Zeile5" den Inhalt Schreiibe der eben in den Zellen steht und dann im anderen worksheet einfach sage, die Zelle x,Y hat jetzt den Wert der in "Zeile5" steht.
Ich wollte simpel gesagt einfach nur Zellinhalte mittels einer Variablen in ein anderes Workbook schreiben.

Gruß
Alex
Hallo Alex,

dann steht in Cells(c,5) oder/und Cells(letzte,5) keine Zahlen. Du hast übrigens einige Variablen nicht deklariert.
Hallo,

Ich habe jetzt noch c und d als variable angegeben.
Aber wieso macht es was aus , wenn in den Zellen nichts steht? Ich gebe doch nur eine range vor, und frage keine Inhalte ab in der Zeile, das kann ich im Augenblick nicht nachvollziehen.
Hier mal wie das sheet aussieht von dem ich die Zellinhalte Kopieren will. Möchte einmal von oben nach unten   zb. C181 und 1570137 in jeweils eine Zelle eines anderen workbooks und sheets kopieren, einmal von Zeile 5 an bis zur letzten beschriebenen, ohne die leeren Zeilen. Die Spalten sind übrigends verbunden, die Zahl steht in M aber die Spalten M bis R sind verbunden, weiß nicht ob das was ausmacht.

 
[img]
Dateiupload bitte im Forum! So geht es: Klick mich!
]
Halo Frankie,

auch von mir nochmal der HInweis:
For d = Cells(c, 5) To Cells(letzte, 5)
Damit legst Du die Schleifengrenzen auf die Inhalte der Zellen Cells(c, 5) und Cells(letzte, 5).
Richtig wäre eventuell
For d = c To letzte

Noch ein Hinweis. Wenn Du Variablen besser benennst, hast Du es später eventuell leichter. Mal nur ein Beispiel: Benenne mal in einem größeren Projekt die Variable c oder d mit Suchen und Ersetzen um. Was meinst Du, wie genervt Du sein wirst ... und falls Du gleich weißt, ob c oder d die richtigen Variablen sind. Aus dem Namen kann ich jedenfalls nichts schließen - weder den Zweck noch den Typ Sad
Hallo Frankie,

(03.07.2015, 20:30)Frankie schrieb: [ -> ]Aber wieso macht es was aus , wenn in den Zellen nichts steht? Ich gebe doch nur eine range vor, und frage keine Inhalte ab in der Zeile, das kann ich im Augenblick nicht nachvollziehen.

Code:
For d = Cells(c, 5) To Cells(letzte, 5)

Du hast hier keine Eigenschaft angegeben und da nimmt Excel dann die Default-Eigenschaft und dies ist die Value-Eigenschaft, somit würdest du in der Schleife nach dem Zellinhalt von der Zelle E5 (Pos.-Bezeichnung) fragen und das ist halt Text.
Hallo,

danke für die Antworten, jetzt habe ich es verstanden und den Code entsprechend umgeschrieben :)

Nun funktioniert der Code auch soweit, er kopiert mir alles brav in das andere workbook. Jetzt habe ich nur ein Problem, ich möchte das     'Workbooks(NameDat).Sheets("Siemens").Activate   weg bekommen.
Habe daher versucht die Zeile wo die Variable "letzte" deklariert wird umzuschreiben auf :  letzte = Workbooks(NameDat).Sheets("Siemens").Cells(Rows.Count, 5).End(xlUp).Row
Das funktioniert aber nicht, da er mir Objekt oder Anwedungsfehler bringt. Wieso kann ich da keinen Pfad angeben?
Mein zweiter Versuch war, das ganze in ein With zu packen, was auch nicht ging, es gab zwar keien Fehlermeldung, aber er hat einfach nichts kopiert.

Danke!

Gruß Alex
Code:
  'With Workbooks(NameDat).Sheets("Siemens")
        'letzte = Cells(Rows.Count, 5).End(xlUp).Row
        'End With




Code:
Dim Zeile5 As Variant
Dim Zeile13 As Variant
Dim ZielZelle As Integer
Dim QuellZelle As Integer
Dim NameDat As Variant




        NameDat = Range("t2").Value
       
        Workbooks(NameDat).Sheets("Siemens").Activate
       
        letzte = Cells(Rows.Count, 5).End(xlUp).Row
                       
        ZielZelle = 2
        QuellZelle = 5
        'With Workbooks(NameDat).Sheets("Siemens")
        'letzte = Cells(Rows.Count, 5).End(xlUp).Row
        'End With
       
        For d = QuellZelle To letzte
        With Workbooks(NameDat)
        If Sheets("Siemens").Cells(QuellZelle, 5) <> "" Then
                         Zeile5 = Sheets("Siemens").Cells(QuellZelle, 5).Value
                         Workbooks("S_Tool.xlsm").Sheets("Sverweis-Auswahl").Cells(ZielZelle, 5) = Zeile5
                   
                         Zeile13 = Sheets("Siemens").Cells(QuellZelle, 13).Value
                         Workbooks("S_Tool.xlsm").Sheets("Sverweis-Auswahl").Cells(ZielZelle, 6) = Zeile13
                         
              QuellZelle = QuellZelle + 1
              ZielZelle = ZielZelle + 1
             
              Else
             
              QuellZelle = QuellZelle + 1
             
           End If
           End With
           Next d
Hallo Frankie,

teste mal

Code:
'wenn das worksheet Siemens sich in der zu öffnenden Datei befindet
         'du hast auch die Punkte vor dem Cells bzw. Rows.count vergessen
        With ActiveWorkbook.Worksheets("Siemens")
         'oder so, wenn das Worksheet Siemens sich in der Makrodatei befindet
'        With ThisWorkbook.Worksheets("Siemens")
        letzte = .Cells(.Rows.Count, 5).End(xlUp).Row
        End With
Seiten: 1 2