Soldiar Geschrieben 10. September 2008 Geschrieben 10. September 2008 Hallo, ich hab ein kleines Problem. Ich suche die letzte befuellte Zelle (Zellen von 3 -> ka. wohin sind befuellt) in der Spalte H in Dokument "b.xls". Nun habe ich einen kleinen Code mir zusammengebastelt. txtfileLocation beinhaltet den Pfad + Dateinamen. For i = 500 To 3 Step -1 If IsEmpty(Application.Workbooks("" & txtfileLocation & "").Worksheets(1).Range("H" & CStr(i) & "")) Then highOther = i End If Next Alternative: For i = 50 To 3 Step -1 dummy = "Application.Workbooks(""" & txtfileLocation & """).Worksheets(1).Range(""H" & CStr(i) & """)" If IsEmpty(dummy) Then highOther = i End If Next hierbei jedoch immer true, weil er auf inhalt in der variable und nicht auf Inhalt in der Zelle prueft. nun nochmal ein passender, damit man sieht, wie das in etwa aussieht. Application.Workbooks("C:\GZA-00006 from SAP").Worksheets(1).Range("H50") = "AB" Hoffe um eure Hilfe. Mfg Christian, 19, B. Zitieren
mo0N Geschrieben 10. September 2008 Geschrieben 10. September 2008 du kannst die, in einer Mappe die letzte beschriebenen Zeile auslesen, damit solltest du dein problem lösen können Dim xlsWS as Excel.WorkSheet Dim letzteZeile as Integer letzteZeile = xlsWS.Cells(xlsWS.Rows.Count, 1).End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row Zitieren
Soldiar Geschrieben 10. September 2008 Autor Geschrieben 10. September 2008 Hallo, Vielen Dank fuer die Antwort. Es ist sogar fast perfekt. Nur muss ich noch die Variable mit dem Dateipfad zur (anderen) Arbeitsmappe einbauen und der steht bei mir in der Variable txtfileLocation (String). Wie baue ich dies nun noch ein? Sorry, deinen Code blicke ich nur leider nicht. Vielen Dank vorab feuer die Unterstuetzung. Mfg Christian, 19, B. Zitieren
mo0N Geschrieben 10. September 2008 Geschrieben 10. September 2008 Nur muss ich noch die Variable mit dem Dateipfad zur (anderen) Arbeitsmappe einbauen und der steht bei mir in der Variable txtfileLocation (String). Wie baue ich dies nun noch ein? Sorry, deinen Code blicke ich nur leider nicht. Einfach ein Excel.Application Object erstellen, mit deinem Dateipfad öffnen und aus dem Objekt die letzte Zeile des aktuellen Sheets ziehen. so könnte es aussehen: Dim xlsAppl as new Excel.Application Dim xlsWS as Excel.WorkSheet Dim letzteZeile as Integer xlsAppl.Workbooks.Open(txtfileLocation) xlsWS=xlsAppl.ActiveSheet letzteZeile = xlsWS.Cells(xlsWS.Rows.Count, 1).End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row xlsAppl.Quit Zitieren
Soldiar Geschrieben 10. September 2008 Autor Geschrieben 10. September 2008 Hallo, Vielen Dank erstmal fuer deine andauernde Hilfe. Echt super von dir! in dieser Zeile xlsWS=xlsAppl.ActiveSheet tritt nun leider Run-Time Error 91 auf. "Object variable or with block variable not set." Und wieder einmal hast du mich absolut ahnungslos erwischt Hoffe nochmals um deine Hilfe. Mfg Christian, 19, B. PS: in der anderen Datei befindet sich nur 1 Sheet, welches genauso heisst wie die Datei. Vielleicht hilft das weiter Zitieren
mo0N Geschrieben 10. September 2008 Geschrieben 10. September 2008 tritt nun leider Run-Time Error 91 auf. "Object variable or with block variable not set." von wo rufst du auf? Excel VBA Editor? Visual Studio Tools for Office? dann kann ich dir auch genau sagen wodran es noch scheitert. Zitieren
Soldiar Geschrieben 10. September 2008 Autor Geschrieben 10. September 2008 Hallo, sorry, habe ich doch glatt vergessen. Excel 2003 VBA-Editor unter Win XP. Der Ganze Code steht in einer Form. Vielen Dank nochmals. Mfg Christian, 19, B. Zitieren
mo0N Geschrieben 10. September 2008 Geschrieben 10. September 2008 Excel 2003 VBA-Editor unter Win XP. Der Ganze Code steht in einer Form. Das wirft natürlich ein ganz neues Licht auf die Angelegenheit Also so wirds gehen, musst nur nacher sehen wie du die geöffnete Mappe wieder schließt, sonst hast du hunderte von offenen Excel Prozessen mit der Zeit und andere können die Dateien nicht mehr öffnen. Dim letzteZeile as Integer Workbooks.Open Filename:="C:\b.xls" letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row Zitieren
Soldiar Geschrieben 10. September 2008 Autor Geschrieben 10. September 2008 Hallo, ist fast perfekt Problem, ich will nicht in der andern Arbeitsmappe arbeiten, sondern nur kurz Daten aus dieser in meine Urspruengliche holen. Daher hilft mir leider dein Code in diesem Fall gar nicht Hoffe du hast auch dafuer einen Gedanken. Vielen Dank nochmals fuer die Hilfe. Mfg Christian, 19, B. Zitieren
mo0N Geschrieben 10. September 2008 Geschrieben 10. September 2008 du bist sehr hartnäckig hast du ein struktogramm oder ein Programmablaufplan, auf dem ich ganz genau sehen kann was du eigentlich vor hast? Zitieren
Soldiar Geschrieben 10. September 2008 Autor Geschrieben 10. September 2008 Hallo, wenn man Geld haben möchte muss man ja auch was abliefern beim Chef Und als Praktikant fehlt da leider die Erfahrung meist Bin jetzt erstmal wieder daheim, werde mich aber morgen wieder melden Vielen Dank dennoch für deine Hilfe =D mfg Christian, 19, B. Zitieren
mo0N Geschrieben 10. September 2008 Geschrieben 10. September 2008 Wenn ich dir einen Tipp geben darf, du gehst die ganze Sache ein wenig falsch an. Du solltest dir als aller erstes eine Aufstellung machen, was dein Programm genau können soll. Dann schreibst du dazu wie du dir den Lösungsweg vorstellst, wichtig bis zu diesem Punkt du machst dir noch keine Gedanken darüber wie du das Programmiertechnisch umsetzt. Zu deinem Problem fällt mir ganz spontan schon mal ein, dass die VBA Umgebung von Excel für dieses Problem einfach zu unpraktikabel ist. Aus meiner Sicht ist es das einfachste eine Office unabhänige Entwicklungsumgebung zu wählen, eine ganz einfache EXE-Anwendung. Allerdings solltest du dabei ein Microsoft Produkt wählen, die verstehen sich sehr gut mit Excel. Dort bindest du einfach die Excel Bibliothek ein und kannst öffnen und bearbeiten wie es dir Spaß macht. Ich denke da ganz speziell an ein Visual Studio Projekt, mit dem du sogar SQL Abfragen auf Excel-Dateien machen kannst, das wird deinen Chef, wenn du nur Praktikant bist sicher beeindrucken. Falls dir so ein Weg vorschwebt, kann ich dir gern helfen, nur dann solltest du mir eine PN schreiben oder des per ICQ machen. Es wird damit unter Garantie einfacher als du denkst Zitieren
Soldiar Geschrieben 11. September 2008 Autor Geschrieben 11. September 2008 Hallo, netter Gedanke haette ich auch gemacht, nur leider Lizenzen habe es heute geloest. Dim dummy As String Dim dummy2 As String dummy = Workbooks.Parent.ThisWorkbook.Name Application.Workbooks.Open (txtfileLocation) For i = 50 To 3 Step -1 If IsEmpty(Range("H" & CStr(i) & "")) Then x = i - 1 highOther = x End If Next dummy2 = ActiveSheet.Name & ".XLS" Windows(dummy).Activate ... Windows(dummy2).Close aber ein kleines Problem bleibt noch. Wie ueberpruefe ich, ob eine Arbeitsmappe schon geoeffnet ist, und falls sie nicht geoffnet ist, oeffne sie? Logischerweise mit If, aber wie heisst das dann? "If IsOpen(txtfileLocation) = True then" ? Vielen Dank fuer deine Hilfe! Mfg Christian, 19, B. Zitieren
mo0N Geschrieben 11. September 2008 Geschrieben 11. September 2008 Schau dir mal diese Funktion an, in der wird auf eine bereits offenen Excel-Datei zugegriffen, das sollte dir eigentlich einen Lösungsweg bereiten. Private Function Excel_Connect() As Boolean Excel_Connect = True On Error GoTo OpenError Set oExcel_App = GetObject(Class:="Excel.Application") ' Gucken ob Excel offen ist bExcelVorhanden = True On Error GoTo 0 ' In Zukunft wieder in den Debugger laufen ' Hier bei Bedarf prüfen ob Excel sichtbar ist Exit Function OpenError: ' Excel war nicht offen, also dann bitte öffnen On Error GoTo CreateError Set oExcel_App = CreateObject(Class:="Excel.Application") oExcel_App.Visible = True ' Dies gegebenenfalls rausnehmen wenn man unsichtbar arbeiten will bExcelVorhanden = False Resume Next Exit Function CreateError: 'Excel ist nicht vorhanden MsgBox "Kein Excel vorhanden" Excel_Connect = False End Function Zitieren
Soldiar Geschrieben 11. September 2008 Autor Geschrieben 11. September 2008 Hallo, okay besser eine andere Frage. wie aktiviere ich eine Arbeitsmappe, von der ich nur den kompletten Pfad habe? mfg Christian, 19, B. Zitieren
mo0N Geschrieben 11. September 2008 Geschrieben 11. September 2008 wie aktiviere ich eine Arbeitsmappe, von der ich nur den kompletten Pfad habe? eine bereits offene datei, kannst du meines wissens in vba nicht über den pfad ansprechen, habe ich jedenfalls noch nie gesehen Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.