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

Forumthread: Werte aus anderer Datei einlesen?

Werte aus anderer Datei einlesen?
peter
Hallo zusammen!
Habe mein Problem schon mal hier zur diskussion gebracht, aber irgendwie komme ich nicht weiter, deshalb versuche ich dieses Porblem nochmals darzustellen und hoffe das irgendjemanden etwas dazu einfällt. Also folgendes Problem:
Ich habe eine Datei "Kostenstellen", diese befindet sich im folgenden Verzeichnis:
D:\Eigene Dateien\Kostenstellen.xls
In dieser Datei befindet sich ein Tabellenblatt mit dem Namen "Kostenstellen"
In der Spalte A in diesem Tabellenblatt befinden sich Zahlen von 1000 bis 10000.
In der Spalte B in diesem Tabellenblatt befinden sich die dazugehörigen Namen.
Jetzt habe ich eine weitere Datei "BAB.xls", diese befindet sich im folgenden Verzeichnis:
D:\Eigene Dateien\BAB.XLS
In der Datei "BAB.xls" können sich bis zu 30 Tabellenblätter befinden (variiert). In jedem Tabellenblatt steht in der Zelle B1 ein Wert zwischen 1000 und 10000. Per Makro soll nun die Zelle B1 in jedem Tabellenblatt der Datei BAB.xls mit der Spalte A des Tabellenblattes "Kostenstellen" in der Datei Kostenstellen.xls verglichen werden.
Gibt es eine Übereinstimmung soll der entsprechende Name aus dem Tabellenblatt "Kostenstellen" in die Zelle C1 des entsprechenden Tabellenblattes der Datei "BAB.xls" übernommen werden.
Gar nicht so einfach zu beschreiben. Ich hoffe ihr könnt mir folgen und weiterhelfen. Es wäre wirklich schön wenn dieses mit einem Makro gemacht werden könnte.
Schönen Gruß
ralle
Anzeige
AW: Werte aus anderer Datei einlesen?
Kurt
Ich würde das mit SVERWEIS() lösen.
Kurt
AW: Werte aus anderer Datei einlesen?
Ulf
Was nu? Peter oder Ralle?
AW: Werte aus anderer Datei einlesen?
Josef
Hallo Peter!
Kopiere diesen Code in ein allgemeines Modul
der Datei "BAB.xls".

' **************************************************************
' Modul: Modul1 Typ = Allgemeines Modul
' **************************************************************

Option Explicit

Sub Daten()
'dieser Code gehört in ein allgemeines Modul
'der Tabelle "BAB.xls"
Dim wks As Worksheet
Dim wksDaten As Worksheet
Dim wkbDaten As Workbook
Dim rng As Range
On Error GoTo FEHLER
'
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
'
Workbooks.Open "D:\Eigene Dateien\Kostenstellen.xls"
Set wkbDaten = Workbooks("Kostenstellen.xls")
Set wksDaten = wkbDaten.Sheets("Kostenstellen")
'
For Each wks In ThisWorkbook.Sheets
If wks.[B1] <> "" Then
Set rng = wksDaten.Columns("A").Find(What:=wks.[B1], LookIn:=xlValues, _
LookAt:=xlWhole)
If Not rng Is Nothing Then
wks.[C1] = rng.Offset(0, 1)
End If
End If
Next
wkbDaten.Close
'
FEHLER:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub

Gruß Sepp
Anzeige
Danke Sepp, bist der Größte !!!
peter
Hallo Sepp!
Wir hatten schon Gestern das vergnügen!! Du bist einfach SPITZENKLASSE!!! Dein Makro funktioniert einwandfrei (Excel-Experte). Hab vielen Dank für Deine Hilfe.
Wünsche Dir noch einen schönen Abend
Gruß
peter
PS: Kannst Du mir vielleicht ein paar Tipps geben, mit welcher Literatur man das lernen Kann ? Oder wie hast Du Dir das beigebracht ?
Anzeige
An Sepp
peter
... ich bins nochmal!!
Kann es mir nicht verkneifen Dich zu folgendem Problem zu fragen.
In meiner Datei mit den ca. 30 Tabellenblättern steht auf jedem Tabellenblatt in der Zelle D1 eine email-Adresse. Ist es mit einem Excel-Makro möglich die einzelnen Tabellenblätter an diese email-Adresse zu versenden ?
Vielleicht fällt Dir ja auch dazu was ein!!
Gruß
peter
Anzeige
AW: An Sepp
Josef
Hallo Peter!
Das versenden der einzelnen Tabellenblätter (mit Outlook)
geht mit nachfolgendem Code.
Es kann aber beim versenden zu Problemen kommen, wenn
z.B. Outlook nicht reagiert!
In dem Makto ist deshalb eine Wartezeit eingebaut, die
auf Outlook wartet um Fehler zuvermeiden.

' **************************************************************
' Modul: Modul1 Typ = Allgemeines Modul
' **************************************************************

Option Explicit
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub BlattKopierenUndVersenden()
'alle Tabellenblätter als Arbeitsmappe
'im Temporären Ordner speichern, als
'Anlage mit Outlook versenden und anschliesend löschen
'Empfängeradresse steht in "D1" der jeweiligen Tabelle
Dim wks As Worksheet
Dim strAddress As String
Dim strPath As String
Dim strName As String
Dim strFile As String
strPath = "C:\Temp\" 'Pfad des Temporären Ordners
Application.ScreenUpdating = False
On Error GoTo FEHLER
For Each wks In ThisWorkbook.Sheets
With wks
strName = wks.Name 'Tabellenname
strFile = strPath & strName & ".xls" 'Dateiname
strAddress = .[D1] 'Empfänger
.Copy
End With
With ActiveWorkbook
.SaveAs strFile
Senden strFile, strAddress 'Datei versenden
.Close
End With
Kill strFile 'Datei löschen
Next
FEHLER:
Application.ScreenUpdating = True
End Sub

Sub Senden(AWS As String, strTo As String)
Dim Nachricht As Object, OutApp As Object
Set OutApp = CreateObject("Outlook.Application")
Set Nachricht = OutApp.CreateItem(0)
With Nachricht
.To = strTo 'Empfänger
.Subject = "Betreffzeile Header" 'Betreff
.attachments.Add AWS 'Anlage(Tabelle)
.Body = "Das ist ein Test." & vbCrLf & "Bitte ignorieren." 'Nachrichtentext
'Hier wird die Mail nochmals angezeigt
'.Display
'Hier wird die Mail gleich in den Postausgang gelegt
.Send
End With
OutApp.Quit
Set OutApp = Nothing
Set Nachricht = Nothing
Sleep 5000 'warten auf Outlook
End Sub

Zu deiner Frage bezüglich Excel/VBA lernen:
Ich beschäftige mich erst seit etwa eineinhalb Jahren
näher mit Excel.
Alles was ich kann (und es gibt viel was ich noch nicht kann und weis!)
habe ich mit Hilfe dieses und anderer Excel-Foren und durch viel
herumprobieren erlernt.
Es gibt zwar sicher einige gute Bücher zum Thema Excel/VBA,
aber ich recherchiere lieber im Internet.
Das beste ist, so glaube ich, "learning by doing" und "try and error"!
Gruß Sepp
Anzeige
AW: An Sepp
An
Guten Morgen Sepp,
habe das mit dem Email-Versand mal ausprobiert, bekomme aber beim ausführen noch folgende Fehlermeldung:
Fehler beim kompilieren. Nach End Sup, End Funktion oder end Property können nur Kommentare stehen.
Im Makro wird daraufhin folgende Zeile makiert:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Woran kann das liegen?
Gruß
peter
Anzeige
AW: An Sepp
Josef
Hallo Peter!
Ich vermute, das du den Code in das Modul einer
Tabelle kopiert hast!
Du musst den Code aber in ein "Allgemeines Modul"
schreiben!(Einfügen &gt Modul)
Dann klappt's auch!
Gruß Sepp
AW: An Sepp
peter
... habe es jetzt nochmal zu Hause versucht und da klappt es. Im Büro will es zur Zeit noch nicht laufen, kann das auch etwas mit der Temp-Datei zutun haben, kann diese nämlich nicht finden. Oder kann ich einfach einnen neuen Ordner "Temp" anlegen?
Gruß
peter
PS: Oder bin ich völlig auf dem Holzweg ?
Anzeige
AW: An Sepp
Josef
Hallo Peter!
Du kannst natürlich auch einen Ordner anlegen!
Du musst im Makro dann nur den Pfad zum entsprechenden
Ordner anpassen.
Gruß Sepp
Es funktioniert, Danke!! o.T.
23.04.2004 10:29:21
peter
.
AW: Werte aus anderer Datei einlesen?
21.04.2004 22:28:55
Hansueli
Hallo Peter,
Solche Operationen erledige ich mit sverweis, hier ein Beispiel
=SVERWEIS(A7;[Mappe2]Tabelle1!$A$4:$B$8;2;WAHR)
Sverweis steht in deinem Fall in C1, A7 steht für B1 Mappe2 für den Dateinamen $A$4:$B$8 das ist der suchbereich; 2 der gesuchte Wert; Wahr , steht dafür dass der Wert identisch sein muss.
hoffe das hilft
Gruss Hansueli
Anzeige
;

Forumthreads zu verwandten Themen

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

Werte aus anderer Datei einlesen mit Excel VBA


Schritt-für-Schritt-Anleitung

Um Werte aus einer anderen Excel-Datei einzulesen, kannst Du ein VBA-Makro verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne die Datei "BAB.xls" und gehe zum VBA-Editor (Alt + F11).

  2. Füge ein neues Modul hinzu: Rechtsklick im Projektfenster auf "VBAProject (BAB.xls)" > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    
    Sub Daten()
       Dim wks As Worksheet
       Dim wksDaten As Worksheet
       Dim wkbDaten As Workbook
       Dim rng As Range
    
       On Error GoTo FEHLER
    
       With Application
           .ScreenUpdating = False
           .EnableEvents = False
           .Calculation = xlCalculationManual
       End With
    
       Workbooks.Open "D:\Eigene Dateien\Kostenstellen.xls"
       Set wkbDaten = Workbooks("Kostenstellen.xls")
       Set wksDaten = wkbDaten.Sheets("Kostenstellen")
    
       For Each wks In ThisWorkbook.Sheets
           If wks.[B1] <> "" Then
               Set rng = wksDaten.Columns("A").Find(What:=wks.[B1], LookIn:=xlValues, LookAt:=xlWhole)
               If Not rng Is Nothing Then
                   wks.[C1] = rng.Offset(0, 1)
               End If
           End If
       Next
    
       wkbDaten.Close
    
    FEHLER:
       With Application
           .ScreenUpdating = True
           .EnableEvents = True
           .Calculation = xlCalculationAutomatic
       End With
    End Sub
  4. Schließe den VBA-Editor und führe das Makro aus (Alt + F8, wähle "Daten" und klicke auf "Ausführen").

Dieses Makro öffnet die Datei "Kostenstellen.xls", sucht in jedem Tabellenblatt der Datei "BAB.xls" nach dem Wert in B1 und übernimmt den entsprechenden Namen in C1.


Häufige Fehler und Lösungen

  • Fehler beim Öffnen der Datei: Überprüfe den Pfad zur Datei "Kostenstellen.xls". Stelle sicher, dass die Datei existiert und der Pfad korrekt ist.

  • Kompilierungsfehler: Achte darauf, dass der Code in einem allgemeinen Modul und nicht in einem Tabellenblatt-Modul eingefügt wird.

  • "Zelle nicht gefunden": Wenn die Zelle B1 leer ist, wird der Fehler ausgelöst. Stelle sicher, dass in B1 ein Wert steht.


Alternative Methoden

Falls Du keine VBA-Makros verwenden möchtest, kannst Du auch die Funktion SVERWEIS() nutzen, um Daten aus einer anderen Excel-Datei zu suchen und zu übernehmen:

=SVERWEIS(B1;[Kostenstellen.xls]Kostenstellen!$A$1:$B$100;2;FALSCH)

Diese Formel sucht den Wert in B1 in der Datei "Kostenstellen.xls" und gibt den entsprechenden Namen zurück. Beachte, dass die Datei geöffnet sein muss, um die Daten abzurufen.


Praktische Beispiele

  1. Werte aus einer anderen Excel-Datei importieren: Nutze das oben genannte Makro, um Werte aus "Kostenstellen.xls" in "BAB.xls" zu importieren.

  2. SVERWEIS für einfache Datenübernahme: Verwende =SVERWEIS() in der Zelle C1 der Datei "BAB.xls", um direkt den Namen basierend auf dem Wert in B1 zu finden.


Tipps für Profis

  • Automatisierung: Du kannst das Makro so anpassen, dass es automatisch beim Öffnen der Datei "BAB.xls" ausgeführt wird, indem Du es im Workbook_Open-Ereignis platzierst.

  • Daten aus mehreren Dateien: Wenn Du Daten aus mehreren Excel-Dateien einlesen möchtest, kannst Du eine Schleife verwenden, die durch ein Verzeichnis iteriert.

  • Fehlerbehandlung: Füge mehr Fehlerbehandlungsroutinen hinzu, um spezifische Fehler besser zu handhaben.


FAQ: Häufige Fragen

1. Wie kann ich Daten aus einer geschlossenen Excel-Datei importieren?
Du kannst die ADODB-Bibliothek verwenden, um Daten aus einer geschlossenen Datei zu lesen, ohne sie zu öffnen.

2. Was ist der Unterschied zwischen SVERWEIS und einer VBA-Lösung?
SVERWEIS ist einfach anzuwenden und erfordert keine Programmierkenntnisse, während VBA mehr Flexibilität und Automatisierung bietet.

3. Kann ich das Makro für andere Excel-Versionen verwenden?
Ja, das Makro sollte in den meisten modernen Excel-Versionen (ab Excel 2007) funktionieren.

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