Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA andere Datei öffnen, durchsuchen und schließen

VBA andere Datei öffnen, durchsuchen und schließen
19.01.2017 19:04:00
Hauke
Hallo zusammen,
ich bräuchte auch mal Hilfe:
Ich habe eine Datei mit 2 verschiedenen Vorgaben zur Prüfung. Diese beiden Felder werden vom User ausgefüllt. Beim Klick auf den Button soll folgendes passieren:
- andere Datei öffnen (okay, bekomme ich hin)
- die beiden Begriffe müssen auf einem der mehreren Arbeitsblätter mindestens einmal vorhanden sein (oh je, ganz schwierig)
- Falls beide Daten auf der Liste stehen, soll der Farbwert einer der beiden ermittelt werden, (rot, blau oder grün), und anschließend die Datei geschlossen und das Ergebnis in einer Msgbox angezeigt werden
- Es müssen immer beide Vorgaben auf der Liste stehen, ansonsten soll die Datei geschlossen und das Ergebnis in einer Msgbox angezeigt werden.
Lässt sich soetwas realisieren? Ich bekomme die Datei geöffnet, aber dann die Suche dann beide Vorgaben aus der einen Datei in der anderen sucht, daran scheiter ich kläglich. :(
Vielen Dank schonmal für einen Rat!
Hauke
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA andere Datei öffnen, durchsuchen und schließen
19.01.2017 21:45:27
Dieter
Hallo Hauke,
ich gehe mal von den folgenden zusätzlichen Bedingungen aus:
1. Die beiden gesuchten Begriffe müssen im gleichen Tabellenblatt vorkommen. Anderenfalls ist das Suchergebnis negativ.
2. Bei der anzuzeigenden Farbe handelt es sich um die Schriftfarbe.
3. Die beiden gesuchten Begriffe werden über deine UserForm eingegeben. Ich nehme sie fest ins Programm.
Unter diesen dreiBedingungen kannst du das mit dem folgenden Programm machen:
Sub Begriffe_suchen()
Dim Begriff(1 To 2) As String
Dim begriffVorhanden(1 To 2) As Boolean
Dim datSuch As String   ' Name der Datei in der gesucht wird
Dim ergebnisZelle(1 To 2) As Range
Dim farbe(1 To 2) As Long
Dim i As Long
Dim pfad As String
Dim suchErgebnis As Object
Dim wbSuch As Workbook
Dim ws As Worksheet
datSuch = "Datei in der gesucht wird.xlsx"
Begriff(1) = "xyz"
Begriff(2) = "uvw"
' Arbeitsmappe öffnen
pfad = ThisWorkbook.Path & "\"
On Error Resume Next
Workbooks(datSuch).Close SaveChanges:=False
On Error GoTo 0
If Dir(pfad & datSuch) = "" Then
MsgBox pfad & datSuch & " existiert nicht"
Exit Sub
End If
Set wbSuch = Workbooks.Open(Filename:=pfad & datSuch)
For Each ws In wbSuch.Worksheets
For i = 1 To 2
begriffVorhanden(i) = False
Set suchErgebnis = ws.Cells.Find(What:=Begriff(i))
If Not suchErgebnis Is Nothing Then
begriffVorhanden(i) = True
Set ergebnisZelle(i) = suchErgebnis
farbe(i) = ergebnisZelle(i).Font.Color
End If
Next i
If begriffVorhanden(1) And begriffVorhanden(2) Then
Exit For
End If
Next ws
If begriffVorhanden(1) And begriffVorhanden(2) Then
MsgBox "Begriffe gefunden in Blatt " & ws.Name & vbNewLine & _
Begriff(1) & " in " & ergebnisZelle(1).Address(False, False) & _
" Farbe: " & farbe(1) & vbNewLine & _
Begriff(2) & " in " & ergebnisZelle(2).Address(False, False) & _
" Farbe: " & farbe(2)
Else
MsgBox "Es existiert kein Blatt, in dem beide Begriffe vorhanden sind"
End If
wbSuch.Close
End Sub
Viele Grüße
Dieter
Anzeige
AW: VBA andere Datei öffnen, durchsuchen und schließen
20.01.2017 10:56:29
Hauke
Hallo Dieter,
vielen Dank schonmal für deine ausführliche Antwort.
Ich hatte leider einen Denkfehler in der Suchvorgabe und komme nochmal rein:
- Ich habe die Datei "Suchen". In dieser Datei sind 2 Zellen mit den Suchvorgaben. Diese muss der User selbst eintragen, zum einen ein Datum (in A1) und zum anderen eine Zahl (in A3).
- Es gibt für jeden Monat eine eigene Datei die durchsucht werden soll. (Okay das entsprechende Makro kann ich ja mit Case ausführen. Gibt man also ein Datum im Oktober ein, soll die Datei 10-2016 durchsucht werden.)
- In der Liste 10-2016 stehen in der Spalte A immer das Datum und in Spalte C immer die Zahl. Das ist in jeder Monatsdatei gleich.
- Es muss geprüft werden ob die Vorgabe 1 in der Spalte A und die Vorgabe 2 in der Spalte C in der gleichen Zeile stehen. Alle Zeilen sind entweder grün, rot, blau oder haben keine Farbe. Wenn Vorgabe 1 in der Spalte A und die Vorgabe 2 in der Spalte C in der gleichen Zeile stehen, dann soll die Hintergrundfarbe der Zeile (es reicht ja eine Zelle, z.B. der A Spalte) und das Ergebnis in einer msgbox dargestellt werden a la "Ergebnis ist GRÜN/ROT/BLAU/BLANKO".
- Sind die Vorgabe 1 in der Spalte A und die Vorgabe 2 in der Spalte C auf KEINEM der Arbeitsblätter in 10-2016, dann soll die Rückmeldung lauten: "Ergebnis nicht auf Liste".
Schön wäre es, wenn die Datei 10-2016 und die Prüfung im Hintergrund erfolgen und die Msgbox einfach in der Datei "Suchen" aufplobbt.
Ist das so evtl auch machbar? :)
LG,
Hauke
Anzeige
AW: VBA andere Datei öffnen, durchsuchen und schließen
20.01.2017 14:11:30
Dieter
Hallo Hauke,
könntest du zum ersten die Datei, die du "Suchen" genannt hast, hochladen und zum zweiten ein Beispiel für die Datei "10-2016.xlsx", Werte ggf. jeweils verändert und/oder anonymisiert.
Haben diese Monatsdateien genau den Namen "mm-jjjj.xlsx" oder gibt es da noch einen Namenszusatz?
Stehen diese Dateien im gleichen Verzeichnis wie die Datei "Suchen"?
Färbe bitte in der Datei "10-2016.xlsx" ein paar Zellen in den genannten Farben als Muster. Das Farbsystem ist ja nicht mehr so einfach, dass man einfach nur rot, grün, blau sagen kann.
Ich werde mir die Sache dann heute Abend noch einmal anschauen.
Viele Grüße
Dieter
Anzeige
AW: VBA andere Datei öffnen, durchsuchen und schließen
21.01.2017 10:27:25
Hauke
Hallo Dieter,
habs leider erst jetzt geschafft. Habe auch festgestellt, dass zwar A und C als Spalte immer gleich sind, aber wenn der Grund auch noch in der Msgbox ausgegeben werden soll, steht dieser auf jedem Worksheet in einer anderen Spalte. Die Monatsdatei sind jedoch immer gleich aus vom Gerüst her.
https://www.herber.de/bbs/user/110767.xlsm
https://www.herber.de/bbs/user/110769.xlsx
Viele Grüße,
Hauke
Anzeige
AW: VBA andere Datei öffnen, durchsuchen und schließen
21.01.2017 13:27:59
Dieter
Hallo Hauke,
ich habe das Programm entsprechend angepasst.
Ich füge es hier bei.
Viele Grüße
Dieter
https://www.herber.de/bbs/user/110773.xlsm
AW: VBA andere Datei öffnen, durchsuchen und schließen
21.01.2017 18:45:54
Hauke
Hallo Dieter,
vielen vielen Dank. Das hätte ich nie zusammengebastelt bekommen. Aber ich werde fleißig üben und werden mir das Modul genau anschauen, wie es funktioniert.
Viele Grüße und ein schönes Wochenende,
Hauke
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Datei öffnen, durchsuchen und schließen


Schritt-für-Schritt-Anleitung

Um eine andere Excel-Datei zu öffnen, zu durchsuchen und das Ergebnis in einer Msgbox anzuzeigen, kannst du den folgenden VBA-Code verwenden. Dieser Code öffnet eine Datei, sucht nach zwei spezifischen Werten und gibt die Hintergrundfarbe zurück, wenn die Werte in der gleichen Zeile gefunden werden.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject" > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub Begriffe_suchen()
    Dim Begriff(1 To 2) As String
    Dim begriffVorhanden(1 To 2) As Boolean
    Dim datSuch As String   ' Name der Datei in der gesucht wird
    Dim ergebnisZelle(1 To 2) As Range
    Dim farbe(1 To 2) As Long
    Dim i As Long
    Dim pfad As String
    Dim suchErgebnis As Object
    Dim wbSuch As Workbook
    datSuch = "10-2016.xlsx"  ' Beispiel-Dateiname
    Begriff(1) = ThisWorkbook.Sheets("Suchen").Range("A1").Value  ' Vorgabe 1
    Begriff(2) = ThisWorkbook.Sheets("Suchen").Range("A3").Value  ' Vorgabe 2

    ' Arbeitsmappe öffnen
    pfad = ThisWorkbook.Path & "\"
    On Error Resume Next
    Workbooks(datSuch).Close SaveChanges:=False
    On Error GoTo 0
    If Dir(pfad & datSuch) = "" Then
        MsgBox pfad & datSuch & " existiert nicht"
        Exit Sub
    End If
    Set wbSuch = Workbooks.Open(Filename:=pfad & datSuch)

    For Each ws In wbSuch.Worksheets
        For i = 1 To 2
            begriffVorhanden(i) = False
            Set suchErgebnis = ws.Cells.Find(What:=Begriff(i))
            If Not suchErgebnis Is Nothing Then
                begriffVorhanden(i) = True
                Set ergebnisZelle(i) = suchErgebnis
                farbe(i) = ergebnisZelle(i).Interior.Color
            End If
        Next i
        If begriffVorhanden(1) And begriffVorhanden(2) Then
            Exit For
        End If
    Next ws

    If begriffVorhanden(1) And begriffVorhanden(2) Then
        MsgBox "Begriffe gefunden in Blatt " & ws.Name & vbNewLine & _
        Begriff(1) & " in " & ergebnisZelle(1).Address(False, False) & " Farbe: " & farbe(1) & vbNewLine & _
        Begriff(2) & " in " & ergebnisZelle(2).Address(False, False) & " Farbe: " & farbe(2)
    Else
        MsgBox "Es existiert kein Blatt, in dem beide Begriffe vorhanden sind"
    End If
    wbSuch.Close
End Sub
  1. Passe den Dateinamen und die Zellreferenzen an deine Bedürfnisse an.
  2. Führe das Makro aus, um die Datei zu öffnen, die Werte zu suchen und die Ergebnisse in einer Msgbox anzuzeigen.

Häufige Fehler und Lösungen

  • Fehler: "Datei existiert nicht"

    • Stelle sicher, dass der Dateiname und der Pfad korrekt sind.
  • Fehler: Msgbox zeigt falsche Farben an

    • Überprüfe, ob die Zellen in der Excel-Datei tatsächlich die erwarteten Hintergrundfarben haben.
  • Fehler: Begriffe nicht gefunden

    • Achte darauf, dass die Suchbegriffe genau mit dem Inhalt der Zellen übereinstimmen (z.B. keine zusätzlichen Leerzeichen).

Alternative Methoden

Wenn die Verwendung von VBA nicht möglich oder gewünscht ist, kannst du auch die Excel-Funktionen SVERWEIS oder FILTER verwenden, um Daten aus einer anderen Datei zu extrahieren. Diese Methoden sind jedoch weniger flexibel und erfordern eine manuelle Handhabung.


Praktische Beispiele

  1. Beispiel für die Verwendung von VBA:

    • Wenn du die Datei "10-2016.xlsx" öffnest und nach den Werten in den Zellen A1 und A3 suchst, stelle sicher, dass die gesuchten Begriffe vorhanden sind und in der gleichen Zeile stehen.
  2. Beispiel für die Verwendung von Funktionen:

    • Du könntest mit SVERWEIS in deiner "Suchen"-Datei eine Formel erstellen, die die Werte in der "10-2016.xlsx" sucht.

Tipps für Profis

  • Nutze Error Handling, um dein Makro robuster zu machen. Verwende On Error GoTo, um spezifische Fehler zu behandeln.
  • Experimentiere mit Application.ScreenUpdating = False und Application.Calculation = xlCalculationManual, um die Ausführung zu beschleunigen, insbesondere bei großen Datenmengen.

FAQ: Häufige Fragen

1. Wie öffne ich eine andere Excel-Datei in VBA? Du kannst die Methode Workbooks.Open verwenden, um eine andere Datei zu öffnen. Beispiel:

Set wbSuch = Workbooks.Open(Filename:="C:\Pfad\zu\deiner\Datei.xlsx")

2. Kann ich die Excel-Datei im Hintergrund öffnen? Ja, du kannst die Datei im Hintergrund öffnen, indem du die Sichtbarkeit der Anwendung änderst:

Application.Visible = False

3. Wie gebe ich die Hintergrundfarbe einer Zelle zurück? Du kannst die Hintergrundfarbe einer Zelle mit Interior.Color abrufen:

farbe = ergebnisZelle(i).Interior.Color

4. Was mache ich, wenn die Datei nicht gefunden wird? Stelle sicher, dass der Pfad und der Dateiname korrekt eingegeben sind, und füge eine Fehlerbehandlungsroutine hinzu, um entsprechende Nachrichten auszugeben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige