Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

For Schleife funktioniert nicht.
#1
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
Antworten Top
#2
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.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#3
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????
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#4
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
Antworten Top
#5
Hallo Alex,

dann steht in Cells(c,5) oder/und Cells(letzte,5) keine Zahlen. Du hast übrigens einige Variablen nicht deklariert.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#6
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!
]
Antworten Top
#7
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#8
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.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#9
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
Antworten Top
#10
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
Gruß Stefan
Win 10 / Office 2016
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste