Zum Inhalt springen

IsEmpty in anderer Arbeitsmappe?


Soldiar

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...