Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
768to772
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Arbeiten mit zwei Mappen

Arbeiten mit zwei Mappen
03.06.2006 11:45:36
Kira
Hallo,
hab mal wieder ein Problem und hoffe, es kann mir auch diesmal wieder jemand weiterhelfen.
Habe anbei eine Beispiel-Datei zur Verdeutlichung angehängt.
Problem ist folgendes:
Ich arbeite mit zwei Mappen, die eine heißt "Liste" mit der Tabelle "Menge", die andere heißt "Februar_2006" mit der Tabelle "Februar_2006".
Beide Tabellen enthalten in der 1.Spalte Nummern, die unterschiedlich lang und teils mit Buchstaben sind. In der 2. Spalte stehen Namen (alphabetisch geordnet). Allerdings kann es sein, dass manche Namen aus der Tabelle "Menge" in "Februar_2006" nicht mehr vorkommen.
Die 3. Spalte der Tabelle "Februar_2006" enthält Zahlen zwischen 0 und 100. Diese sollen in die Spalte M der Tabelle "Menge" kopiert werden. Problem hierbei ist eben, dass ich die Werte nicht einfach so herüber kopieren kann, da in der "Menge"-Tabelle mehr Namen (2. Spalte) stehen als in der "Februar_2006"-Tabelle sind. D.h. es sollte immer überprüft werden, ob die Nr bzw. der Name beider Tabellen übereinstimmen und dann entsprechend die Werte einkopiert werden. Fehlt eine Nr bzw. Name in Tabelle "Februar_2006" dann sollte in der "Menge"-Tabelle das entsprechende Feld in Spalte M entweder leer oder mit 0 befüllt werden.
In der Beispiel-Datei habe ich einfachheitshalber die Tabellen der zwei Mappen in eine Mappe gefügt, tatsächlich wird aber mit zwei Mappen gearbeitet.
Ich hoffe, es kann mir jemand einen VBA-Vorschlag machen, wie ich das in den Griff kriegen kann.
https://www.herber.de/bbs/user/34143.xls
Gruß
Kira

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arbeiten mit zwei Mappen
03.06.2006 13:23:13
Josef Ehrensberger
Hallo Kira!
Wenn der Tabellenaufbau deiner Beispiele stimmt und die Tabelle immer
den Namen der Datei trägt, dann sollte das Klappen!
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Extern()
Dim strFile As String, strSheet As String
Dim dDate As Date
Dim varValues As Variant
Dim objFSO As Object
Dim rngFind As Range, rng As Range
Dim lngR As Long

strFile = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlt; *.xla)," & _
  "*.xls; *.xlt; *.xla")

If strFile = "Falsch" Then Exit Sub

Set objFSO = CreateObject("Scripting.FileSystemObject")

strSheet = objFSO.GetBaseName(strFile)

dDate = DateValue("01/" & Replace(strSheet, "_", " "))

With ExcelTable(strFile, strSheet, "A1:D65536")
  varValues = .GetRows
  .Close
End With

With Sheets("Menge")
  Set rngFind = .Rows(2).Find(dDate)
  
  If Not rngFind Is Nothing Then
    For Each rng In .Range(.Cells(3, 2), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 2))
      For lngR = 0 To UBound(varValues, 2)
        If rng = varValues(1, lngR) Then
          .Cells(rng.Row, rngFind.Column) = varValues(2, lngR)
          Exit For
        End If
        .Cells(rng.Row, rngFind.Column) = 0
      Next
    Next
  End If
  
End With

Set objFSO = Nothing
Set rngFind = Nothing
End Sub



Public Function ExcelTable(ByRef Path As String, ByRef Table As String, ByRef SourceRange As String) As Object
Dim SQL As String
Dim Con As String

SQL = "select * from [" & Table & "$" & SourceRange & "]"
Con = "Provider=Microsoft.Jet.OLEDB.4.0;" _
  & "Extended Properties=Excel 8.0;" _
  & "Data Source=" & Path & ";"
Set ExcelTable = CreateObject("ADODB.Recordset")
ExcelTable.Open SQL, Con, 1, 3
End Function


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: Arbeiten mit zwei Mappen
03.06.2006 14:50:00
Kira
Hallo Sepp,
danke für den Code, funktioniert super.
Ich hätte jedoch noch ein paar Ergänzungen, sofern das möglich ist.
Bei dir wird ja angenommen, dass der Tabellenname=Dateiname ist. Geht das auch, dass der Tabellenname immer "Tabelle1" lautet und der Dateiname dann je nachdem "Februar_2006", "März_2006" usw. (also immer Monat_Jahr)?
Und noch etwas: In der "Menge"-Tabelle gibt es ja Nr bzw. Namen, die in der "Tabelle1" (andere Mappe) nicht mehr vorhanden sind. Hier wird ja dann in die entsprechende Zelle eine 0 gesetzt. Nun kann es aber auch sein, dass in der "Tabelle1" neue Namen enthalten sind, die es in der "Menge"-Tabelle noch nicht gibt. Können diese dann als neue Zeile in der "Menge"-Tabelle ergänzt werden (alphabetisch!)? Und dann gleich noch für diese neuen Namen jeweils ein Diagrammblatt erstellt werden, dessen Tabellenname=Name lautet?
Und zum Schluss noch eine allgemeine Fragen bezüglich der alphabetischen Sortierung. Kann man das irgendwie auch trennen, dass man z.b. nur mit Namen von M-Z arbeitet? Meine Mappe geht nämlich nur von M-Z, Daten für A-L stehen in einer anderen Mappe. Wenn nun aber neue Namen hinzugefügt werden sollen, werden ja alle Namen von A-Z ergänzt, obwohl meine Mappe bei M erst beginnt.
Gruß und danke für deine Hilfe
Kira
Anzeige
AW: Arbeiten mit zwei Mappen
03.06.2006 15:45:45
Kira
Hallo Sepp,
danke für den Code, funktioniert super.
Ich hätte jedoch noch ein paar Ergänzungen, sofern das möglich ist.
Bei dir wird ja angenommen, dass der Tabellenname=Dateiname ist. Geht das auch, dass der Tabellenname immer "Tabelle1" lautet und der Dateiname dann je nachdem "Februar_2006", "März_2006" usw. (also immer Monat_Jahr)?
Und noch etwas: In der "Menge"-Tabelle gibt es ja Nr bzw. Namen, die in der "Tabelle1" (andere Mappe) nicht mehr vorhanden sind. Hier wird ja dann in die entsprechende Zelle eine 0 gesetzt. Nun kann es aber auch sein, dass in der "Tabelle1" neue Namen enthalten sind, die es in der "Menge"-Tabelle noch nicht gibt. Können diese dann als neue Zeile in der "Menge"-Tabelle ergänzt werden (alphabetisch!)? Und dann gleich noch für diese neuen Namen jeweils ein Diagrammblatt erstellt werden, dessen Tabellenname=Name lautet?
Und zum Schluss noch eine allgemeine Fragen bezüglich der alphabetischen Sortierung. Kann man das irgendwie auch trennen, dass man z.b. nur mit Namen von M-Z arbeitet? Meine Mappe geht nämlich nur von M-Z, Daten für A-L stehen in einer anderen Mappe. Wenn nun aber neue Namen hinzugefügt werden sollen, werden ja alle Namen von A-Z ergänzt, obwohl meine Mappe bei M erst beginnt.
Gruß und danke für deine Hilfe
Kira
Anzeige
AW: Arbeiten mit zwei Mappen
03.06.2006 17:45:16
Josef Ehrensberger
Hallo Kira!
Nächstesmal bitte gleich die richtige Beschreibung der Aufgabe,
dann braucht man nicht einen laufenden Code wieder umbauen!
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Extern()
Dim strFile As String, strSheet As String, strDate As String
Dim dDate As Date
Dim varValues As Variant
Dim objFSO As Object
Dim rngFind As Range, rng As Range
Dim lngR As Long, lngLast As Long, lngNew As Long

strFile = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlt; *.xla)," & _
  "*.xls; *.xlt; *.xla")

If strFile = "Falsch" Then Exit Sub

Set objFSO = CreateObject("Scripting.FileSystemObject")

strDate = objFSO.GetBaseName(strFile)

dDate = DateValue("01/" & Replace(strDate, "_", " "))

strSheet = "Tabelle1"

With ExcelTable(strFile, strSheet, "A1:D65536")
  varValues = .GetRows
  .Close
End With

With Sheets("Menge")
  lngLast = .Cells(Rows.Count, 1).End(xlUp).Row
  lngNew = lngLast + 1
  Set rngFind = .Rows(2).Find(dDate)
  
  If Not rngFind Is Nothing Then
    For lngR = 0 To UBound(varValues, 2)
      Set rng = .Range(.Cells(3, 2), .Cells(lngLast, 2)).Find(varValues(1, lngR), lookat:=xlWhole)
      If Not rng Is Nothing Then
        .Cells(rng.Row, rngFind.Column) = varValues(2, lngR)
      Else
        If Left(UCase(varValues(1, lngR)), 1) Like "[M-Z]" Then ' [A-L] für A bis L
          .Cells(lngNew, 1) = varValues(0, lngR)
          .Cells(lngNew, 2) = varValues(1, lngR)
          .Cells(lngNew, rngFind.Column) = varValues(2, lngR)
          lngNew = lngNew + 1
        End If
      End If
    Next
  End If
  
  .Range(.Cells(2, 1), .Cells(lngNew, .Cells(2, Columns.Count).End(xlToLeft).Column)).Sort _
    Key1:=Range("B3"), _
    Order1:=xlAscending, _
    Header:=xlYes
End With

Set objFSO = Nothing
Set rngFind = Nothing
End Sub



Public Function ExcelTable(ByRef Path As String, ByRef Table As String, ByRef SourceRange As String) As Object
Dim SQL As String
Dim Con As String

SQL = "select * from [" & Table & "$" & SourceRange & "]"
Con = "Provider=Microsoft.Jet.OLEDB.4.0;" _
  & "Extended Properties=Excel 8.0;" _
  & "Data Source=" & Path & ";"
Set ExcelTable = CreateObject("ADODB.Recordset")
ExcelTable.Open SQL, Con, 1, 3
End Function


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
Danke, läuft super!!!
03.06.2006 18:53:01
Kira
Ich hab noch ein problem
06.06.2006 17:09:30
Matthias Merkle
Hallo Sepp,
in einem anderen Thread habe ich noch ein Problem.
Vielleicht kannst Du mir helfen, da es sich eigentlich hauptsächlich um Deinen Code handelt:
https://www.herber.de/forum/messages/770536.html
Ich hoffe Du kannst mir dabei helfen.
Wäre echt super.
Gruß
Matthias
noch ne Frage
07.06.2006 09:46:23
Kira
Hallo Sepp,
der Code funktioniert soweit ganz toll. Allerdings wollte ich noch eine andere Spalte aus der externen Datei einlesen.
Hierzu müsste ich doch lediglich folgende Zeile umformen:
Set rng = .Range(.Cells(3, 2), .Cells(lngLast, 2)).Find(varValues(1, lngR), lookat:=xlWhole)
Wenn ich die Werte nicht aus Spalte 3 sondern 4 haben möchte kann ich diese Code-Zeile doch einfach folgendermaßen umformen:
Set rng = .Range(.Cells(4, 2), .Cells(lngLast, 2)).Find(varValues(1, lngR), lookat:=xlWhole)
oder wurde noch inrgendwo im Code spziell auf Spalte 3 hingewiesen?
Da ich gerne zwei spalten aus einer externen Datei auslesen und in die Hauptdatei schreiben möchte.
Für die Spalte 3 klappt das alles auch wunderbar. Nur eben nicht für Spalte 4.
Gruß
Kira
Anzeige
AW: Arbeiten mit zwei Mappen
03.06.2006 13:29:31
Erich G.
Hallo Kira,
warum mit VBA? Es geht auch mit einer Formel:
(in M9 ist die Formel kürzer, ohne Fehlerabfänger)
AW: Arbeiten mit zwei Mappen
03.06.2006 13:32:53
firmus
Hi Kira,
ich habe dein xls mit einer formel ergänzt.
da ich nicht wußte, ob die nr bereits eindeutig ist, habe ich nr+name zusammengenommen und dann verglichen auf "vorhanden".
Voraussetzung: nr+name zusammen müssen eindeutig sein.
https://www.herber.de/bbs/user/34145.xls
Hilft das Teil.
Gruss,
Firmus

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige