Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Makro verliert den Fokus





Frage

Moin, Problembeschreibung: In ExcelDatei1 wird ein Makro (VBA) ausgeführt. Dieses Makro öffnet eine bestehende ExcelDatei2. Dann soll das Makro (Datei1) in der geöffneten Datei2 irgendwelche Operationen ausführen und danach die Datei2 wieder schließen. Das ganze funktioniert auch, wenn man das Makro im Einzelschrittmodus oder aus der Programmierumgebung heraus ausführt. Sobald man das Makro aber aus Excel heraus aufruft, wird zwar die Datei2 noch geöffnet, danach ist aber Schluß. Ich vermute, dass der Fokus vom Makro auf die neu geöffnete Datei übergeht - und da ist dann ja kein Programm mehr... Ich müsste also die zu öffnende Datei2 irgendwie im Hintergrund öffnen, so daß der Focus auf dem Makro bleibt, und das Makro weiterarbeitet. Wie geht das? Schöne Grüße Garrelt

Antwort 1 von coros

Hi Garrelt,

und wo ist das Makro? Mit dem Hellsehen klappt das hier leider noch nicht. Als kleinen Tipp, schreibe vor jeder Anweisung einen direkten Bezug zu der Datei hin. Also als Beispiel um in allen Zellen in "Datei2.xls" in Blatt "Tabelle1" die Inhalte zu entfernen:

Workbooks("Datei2.xls").Sheets("Tabelle1").Cells.ClearContents


MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von Garrelt

Hallo coros,
ich hatte versucht, das Problem zu beschreiben. Aber hier nun auch der entsprechende Makroauszug:
"Suchabfrage.xls" ist die o.g. Datei1


With Application.FileSearch
.LookIn = ThisWorkbook.Path
.Filename = "*.xls"
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
If Not UCase(Right(.FoundFiles(i), 15)) = "SUCHABFRAGE.XLS" Then
Application.Workbooks.Open .FoundFiles(i), 0, True

´!!!!Zu dieser Stelle kommt das Programm schon nicht mehr!!!!!

´Suchabfrage
´Abfrage in der geöffneten Datei

Application.ActiveWorkbook.Close False
End If
Next i
Else
MsgBox "There were no files found."
End If
End With

Gruß Garrelt

Antwort 3 von coros

Hi Garrelt,

was bedeutet

!!!!Zu dieser Stelle kommt das Programm schon nicht mehr!!!!!

Ab dem Punkt wird Dein Makro nicht mehr abgearbeitet oder kommt dort ein Fehler oder was beudeutet bei Dir "danach ist aber Schluß"? Wo ist der Teil des Makros, der normalerweise an der Stelle steht, wo Du eben den Text

!!!!Zu dieser Stelle kommt das Programm schon nicht mehr!!!!!

und

´Suchabfrage
´Abfrage in der geöffneten Datei


hingeschrieben hast? Auch wenn Du der Meinung bist, dass Du versucht hast alles ganz genau zu beschreiben, wirst Du nicht drum herum kommen, den gesamten Code hier zu posten. Oder hast Du etwas ganz streng geheimes als VBA Code erstellt?

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 4 von Garrelt

Hallo Coros,

die Open-Anweisung wird noch ausgeführt, die Datei ".Foundfiles(i)" wird geöffnet.
Und dann wird das Programm ohne Fehlermeldung verlassen / beendet.
Die mit der Open-Anweisung geöffnete Datei steht im Vordergrund und hat den Fokus.

Die Zeile
!!!!Zu dieser Stelle kommt das Programm schon nicht mehr!!!!!
ist genauso gemeint, wie sie da steht...

Das Problem ist also nicht mit irgendeinem Programmcode, den ich weggelassen habe. Das Problem besteht darin, das selbst bei dem geposteten Programmcode das Programm nicht zuende ausgeführt wird.

Aber zu deiner Beruhigung, der weggelassene Programmcode: Msgbox "Hallo Welt"

Garrelt

Antwort 5 von coros

Hi Garrelt,

sorry, aber liest Du eigentlich auch das was Du schreibst? In Deiner Frage schreibst Du

Zitat:
Dieses Makro öffnet eine bestehende ExcelDatei2.

Dann soll das Makro (Datei1) in der geöffneten Datei2 irgendwelche Operationen ausführen und danach die Datei2 wieder schließen.

Dann schreibst Du, dass dort nur eine MessageBox aufgerufen wird. Was steht denn nun dort? Wenn ich den von Dir geposteten Code mal mit der Anweisung der MessageBox teste, wird mir die Datei geöffnet, es erscheint die MessageBox und dann wird die Datei wieder geschlossen. Also so, wie Du es möchtest. Wo ist nun das Problem?

Sollte dort doch etwas anderes stehen, so habe ich in meiner ersten Antwort bereits geschrieben, dass Du dann in Deinem Code etwas ändern musst. Was, habe ich dort ebenfalls geschrieben. Wie schon gesagt, so ganz kann ich dass noch nicht nachvollziehen.

Übrigens, kannst Du Kommentare wie

Zitat:
Aber zu deiner Beruhigung, der weggelassene Programmcode: Msgbox "Hallo Welt"


in Zukunft weglassen. Man kann nur eine Hilfe zu einem bestehenden VBA Code geben, wenn man diesen zu 100% kennt. Das hat weniger mit Beruhigung zu tun.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 6 von Garrelt

Hallo coros,

sicherlich lese ich, was ich schreibe...
Vielleicht habe ich mich nur etwas missverständlich ausgedrückt...
Ich versuche also, das Ganze nochmal zu erklären:

Ich habe den gesamten Code gepostet, mehr gibt es noch nicht.

Die Msgbox war ein Versuch, um herauszufinden, ob das Programm diese Stelle noch erreicht, mehr nicht.

Der Programmcode, der später mal an dieser Stelle ausgeführt werden soll, existiert noch nicht. Er ist für das bestehende Problem auch nicht relevant.

Erst muss ich das Problem lösen, wie ich bei der Open-Anweisung den Focus auf dem ursprünglichen Makro halten kann.

Du schreibst, du hast den Programm-Code ausprobiert - danke für deine Mühe.
Bei mir funktioniert das auch, aber nur aus der Programmierumgebung heraus( Einzelschritt F8 und Ausführen F5). Wenn man allerdings die Programmierumgebung verlässt und das Makro direkt aus Excel heraus startet, entsteht das geschilderte Problem.

Sollte das bei dir funktionieren, liegt es ja vielleicht an meiner Excel-Version (Excel 2000, 9.0.3821 SR-1) oder an nicht installierten Addins oder an Einstellungen oder...

Ich gebe dir Recht, auch ich kann das Problem nicht ganz nachvollziehen. Deshalb habe ich hier um Hilfe gebeten. Ich hoffe, dass ich es jetzt besser erklärt habe.

Schöne Grüße
Garrelt

Antwort 7 von coros

Hi Garrelt,

unter Excel2000 kann ich es erst heute Abend testen. Ich habe das unter Excel2003 laufen lassen und da funktioniert es. Auf meinem Server läuft aber noch Excel2000, da werde ich das heute Abend auch mal testen.

Auch wenn Du der Meinung bist das alles was nach der Open-Anweisung folgt, bzw. noch folgen soll, nicht von Belang ist, so irrst Du. Wenn man wüsste, was Du dann durch das Makro erledigen lassen willst, könnte man schauen, ob es überhaupt von Belang ist, welche Datei gerade die aktive Datei ist. Auch wenn ich mich wiederhole, aber wenn man nach dem Beispiel aus meiner 1. Antwort verfährt, ist es egal, wo sich der Focus befindet, da man damit die Datei und das Blatt direkt anspricht. Also eventuell kannst Du ja mal schreiben was zwischen dem Open und dem Close alles abgearbeitet werden soll.

Ansonsten wie schon geschrieben, kann ich das Makro erst heute Abend unter Excel2000 testen.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 8 von Garrelt

Hallo Corus,
die zu durchsuchenden Exceldateien haben alle den gleichen grundsätzlichen Aufbau:

Spalte 1 Kundennummer
Spalte 2 Artikelbezeichnung
Spalte 3 Artikelpreis
etc.

Die Anzahl der eingetragenen Zeilen ist natürlich von Datei zu Datei unterschiedlich.

Das Makro (in der Datei Suchabfrage.xls) soll die Exceldateien nach einer bestimmten (in Suchabfrage eingegebenen) Kundennummer durchsuchen und beim Fund die entsprechende Zeile in die nächste freie Zeile von Suchabfrage kopieren.

Das Ganze erspart mir dann das manuelle Öffnen und durchsuchen der einzelnen Dateien.

Schöne Grüße
Garrelt

Antwort 9 von coros

Hallo Garrelt,

das sollte kein Problem darstellen. Allerdings hätte ich dazu noch mal Fragen. Wieviele Dateien sollen auf die Nummer hin durchsucht werden? Ist die Anzahl immer fest oder ändert sich die Anzahl der zu durchsuchenden Dateien. Dann, mal angenommen Du hast 6 Dateien, die diese Kundennummern enthalten. Soll dann aus allen 6 Dateien die Nummer kopiert werden oder nur aus bestimmten? In welcher Zelle steht in der Datei "Suchabfrage.xls" die Kundennummer, nach der gesucht werden soll. Wenn ich die Angaben von Dir habe, erstelle ich Dir das entsprechende Makro. Kann aber sein, dass Du erst heute Nachmittag wieder von mir hörst, da ich nachher noch einen Termin habe und wahrscheinlich erst danach dazu kommen werde.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 10 von Garrelt

Hallo Corus,
danke für deine Mühe, hier die Antworten auf deine Fragen:

1) Wieviele Dateien sollen auf die Nummer hin durchsucht werden?Ist die Anzahl immer fest oder ändert sich die Anzahl der zu durchsuchenden Dateien.

Das ist unterschiedlich und kann zwischen 1 und ca. 100 liegen.
Es sollen aber alle Excel-Dateien in dem Verzeichnis, in dem sich die "Suchabfrage.xls" befindet, mit einbezogen werden

2) Dann, mal angenommen Du hast 6 Dateien, die diese Kundennummern enthalten. Soll dann aus allen 6 Dateien die Nummer kopiert werden oder nur aus bestimmten?

Bei jedem Fund der Kundennummer soll die gesamte Zeile, die die Kundennummer enthält, kopiert werden.
Es gibt Dateien, bei denen die Kundennummer nicht auftaucht, es gibt aber auch andere Dateien, bei denen die Kundennummer mehrfach auftaucht.
Zielort ist die Ausgangsdatei "Suchabfrage.xls", und dort im ersten Tabellenblatt ab Zeile 6.

3) In welcher Zelle steht in der Datei "Suchabfrage.xls" die Kundennummer, nach der gesucht werden soll?

Datei: Suchabfrage.xls
Tabelle 1
Zelle: B4

Schöne Grüße
Garrelt

Antwort 11 von coros

Hi ,

hier mal auf die schnelle ein Makro erstellt. Kopiere es in ein StandardModul und starte es über eine Schaltfläche.

 Option Explicit

Sub Suchen_und_kopieren()
Dim Dateiname As String, Pfad As String, erste_Freie_Zeile As Long, _
Aktuelle_Datei As String, Wiederholungen As Long
Application.ScreenUpdating = False
Aktuelle_Datei = ThisWorkbook.Name
Pfad = ActiveWorkbook.Path & "\"
Dateiname = Dir(Pfad & "*.xls")
If Range("B4") <> Empty Then
    Do While Dateiname <> "SUCHABFRAGE.XLS"
    Workbooks.Open Pfad & Dateiname
        For Wiederholungen = 2 To Workbooks(Dateiname).Sheets(1).Range("A65536").End(xlUp).Row
            If Workbooks(Dateiname).Sheets(1).Cells(Wiederholungen, 1) = Workbooks(Aktuelle_Datei).Sheets(1).Range("B4") Then
            erste_Freie_Zeile = Workbooks(Aktuelle_Datei).Sheets(1).Range("B65536").End(xlUp).Offset(1, 0).Row
            Workbooks(Dateiname).Sheets(1).Rows(Wiederholungen).Copy _
            Workbooks(Aktuelle_Datei).Sheets(1).Cells(erste_Freie_Zeile, 1)
            End If
    Next
    ActiveWorkbook.Close True
    Dateiname = Dir
    Loop
Else
MsgBox "In Zelle A1 muss eine Kundennummer eingetragen werden", vbCritical, "Fehler..."
End If
End Sub

Mit dem Makro werden Dir alle Dateien, die sich in dem selben Verzeichnis wie Datei "Suchabfrage.xls“ befinden geöffnet und auf die Nummer, die vorher in "Suchabfrage.xls" im "1. Tabellenblatt" in "Zelle B4" eingetragen werden muss, geprüft. Bei Übereinstimmung wird die Zeile kopiert und in Datei "Suchabfrage.xls", in das "erste Tabellenblatt" in "Spalte A" in jeweils die nächste freie Zeile ab Zeile 4 eingefügt. Ab Zeile 4 deshalb, da Spalte B auf die nächste freie Zeile geprüft wird, sich in Zelle B4 aber der Suchbegriff befindet.

Da mir noch weitere Angaben fehlen, kann es sein, dass es bei Dir zu Fehlermeldungen kommt. Mir fehlten noch die Angaben, des Tabellenblattes, aus dem die Werte und den Namen des Blattes in das die Daten kopiert werden sollen.

Teste das ganze mal und melde Dich, wenn Du damit Probleme hast oder Änderungen vorgenommen werden müssen.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 12 von Garrelt

Hallo coros,
erstmal herzlichen Dank dein Makro.

Das Makro funktioniert - wenn ich es aus der Programmierumgebung heraus starte...

Es tritt der gleiche Fehler wie bei mir auf, zum besseren Verständnis nochmal der Handlungsablauf:

1) Datei "Suchabfrage.xls" wird geöffnet.
2) Kundennummer wird eingetragen (Zelle B4)
3) Makro wird gestartet, in diesem Fall mit Strg+Umschalt+Z
4) Das Makro öffnet die erste Excel-Datei, die aktiv im Vordergrund erscheint.
- und das war es, weiter passiert nix.

Das Makro wurde mitten im Ablauf beendet, genau in dem Moment, als der Fokus auf die neu geöffnete Datei übergegangen ist.
Aber wenn man das Makro aus der Programmierumgebung startet, funktioniert das so wie gewollt.

Als Übergangslösung komme ich auch damit klar, schöner wäre es aber, eine richtig funktionierende Lösung zu haben, die ich auch an andere weitergeben kann.

Trotzdem schönen Dank für deine Bemühungen.

Schöne Grüße
Garrelt

Antwort 13 von coros

Hi Garrelt,

das ist mir unerklärlich. Ich habe dieses Makro sowohl auf Excel 2000, als auch auf Excel 2003. Jedesmal mit dem gleichen Ergebnis. Allerdings starte ich das Makro nicht über eine Tastenkombination. Nachdem ich das gelesen habe, habe ich das mal getestet, mit dem gleichen Erfolg wie bei Dir. Das Makro wird an der Stelle nach dem öffnen der Datei beendet. Starte das Makro mal über eine Schaltfläche oder über die Menüleiste unter "Extras => Makro => Makros...". Damit funktioniert es. Warum das mit der Tastenkombination nicht funktioniert, kann ich Dir leider nicht sagen, da ich dafür keine Erklärung habe.

Sollte sich mir noch ein Geistesblitz ereilen, dann melde ich mich wieder., aber ich glaube nicht.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 14 von Garrelt

Hallo Coros,
der Aufruf aus dem Menü hat tatsächlich auch bei mir geklappt. Das hat mich stutzig gemacht. Dann kann es ja nur an der Tastenkombination liegen...

und tatsächlich:
ich hab die Lösung, kann es aber nicht erklären:

Es liegt tatsächlich an der Tastenkombination zum Aufruf des Makros!

Ich habe die Tastenkombination geändert (auf Strg + z), und schon funktioniert alles.

Offensichtlich verbiegt die Tastenkombination "Strg+Umschalt+Z " Excel, so dass es zu dem beschriebenen Bug kommt.

Na egal, es funktioniert jetzt, alles wird gut

Schöne Grüße
Garrelt

Antwort 15 von nighty

hi all :)

direkte pfadangaben,wie auch direkte ziel angaben zur mappe würden diesen fehler beheben :)

gruss nighty

Antwort 16 von coros

Moin nighty,

dem was Du da schreibst muss ich etwas wiedersprechen. Ich glaube kaum, dass mit Deinem Vorschlag das Problem gelößt wäre. Das Problem taucht nur bei der Tastenkombination STRG-Umschalt-Z auf. Wird das Makro auf herkömmliche Art gestartet, z.B. über eine Schaltfläche, funktioniert ja alles. Auch nachdem Garrelt eine andere Tastenkombination gewählt hatte, funktionierte es. Somit glaube ich kaum, dass mit Deinem Vorschlag das Problem bezogen auf die genannte Tastenkombination gelößt werden könnte.

Übrigens wird in dem Makro mit Pfad- und Zielangaben gearbeitet. Siehe in den Zeilen

Pfad = ActiveWorkbook.Path & "\"

Dateiname = Dir(Pfad & "*.xls")

Workbooks.Open Pfad & Dateiname


Außeredem wird überall der Workbookname angegeben. Und wie schon geschrieben funktioniert es ja auch so.

MfG,
Oliver
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: