Anzeige
Archiv - Navigation
704to708
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
704to708
704to708
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

XL4

XL4
12.12.2005 09:05:30
peterpannbg
Guten Morgen,
ich habe im Forumsarchiv einen Thread gefunden, der die Lösung meines Problems sein könnte, allerdings hat der Autor nur etwas geschrieben von einem xl4 Makro. Ich möchte aus mehreren Dateien Werte aus Spalten in einer Tabelle zusammensammeln, um einen Gesamtüberblick zu bekommen. Was ist hierfür ein sinnvoller Ansatz? Vielen Dank für Feedback.
Gruß Rainer

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: XL4
12.12.2005 09:07:45
Hajo_Zi
Hallo Rainer,
was spricht gegen die Lösung in dem Thread, den wir nicht sehen sollen?


AW: XL4
12.12.2005 09:13:32
peterpannbg
Guten Morgen Hajo,
ich verstehe ihn nicht, das ist mein Problem :-(

Function xl4Value(strParam As String) As Variant
xl4Value = ExecuteExcel4Macro(strParam)
End Function


Sub Holger()
Dim strSource As String
Dim i As Integer
'Tabellenblatt selektieren
Sheets("Tabelle1").Select
Range("A1").Select
For i = 1 To 8 Step 1
strSource = "'C:\TEMP\[Datei.xls]Blatt'!R" & i + 6 & "C2"
ActiveCell.Offset(3, 3 + i).Value = xl4Value(strSource)
Next i
End Sub

Anzeige
AW: XL4
12.12.2005 09:17:13
Hajo_Zi
Hallo Heinz,
ich verstehe Dich auch nicht! Wo ist das Problem?
Gruß Hajo
AW: XL4
12.12.2005 09:39:52
peterpannbg
Also,
er schreibt etwas von einem xl4 Makro. Ist das ein bestimmtes Makro, was bereits als Vorlage in Excel existiert oder ist der Name xl4 Makro einfach nur ein von ihm gewählter Name und hat keinen weiteren Hintergrund. Ich bin auf der Suche nach einem Makro, daß mir aus verschiedenen Dateien definierte Spalten in eine neue Tabelle schreibt, damit ich eine Gesamtübersicht über die Daten habe. Da meine VBA Kenntnisse nur sehr gering sind, ist die Frage, kann dieser Code, den ich oben reinkopiert habe, das abbilden, bzw. was gibt es dabei zu beachten?
Gruß Rainer
Anzeige
AW: XL4
12.12.2005 09:44:47
Hajo_Zi
Hallo Rainer,
das sind Makros die schon in den Excelversionen drin sind seit Version 4. Die werden immer noch mitgeschleift. Es gibt dafür noch keine gleichwertigen Ersatzfunktionen.
Ich vermute mal den Dateinamen, den Tabellennamen und die Zelle hast Du schon angepast.
Gruß Hajo
AW: XL4
12.12.2005 10:06:15
peterpannbg
Die Bezüge habe ich angepaßt, es funktioniert auch so weit, außer daß das Makro die Daten nach rechts, statt nach unten schreibt, mich hat es nur verwundert, weil ich in der Excelhilfe nichts über xl4 gefunden habe, bzw. wie man diese Funktion nutzen kann. Deshalb meine Frage hierzu.
gruß Rainer
Anzeige
AW: XL4
12.12.2005 12:16:04
Erich
Hallo Rainer,
da du hier nicht schreibst, woher und wohin genau die Daten kommen sollen, kann man auch nur allgemein antworten.
Die Daten untereinander auszugeben, ginge z. B. so:

Sub Holger()
Dim strSource As String
Dim i As Integer
'Tabellenblatt selektieren
Sheets("Tabelle1").Select
Range("A1").Select
For i = 1 To 8 Step 1
strSource = "'C:\TEMP\[Datei.xls]Blatt'!R" & i + 6 & "C2"
ActiveCell.Offset(3+i, 3).Value = xl4Value(strSource)
Next i
End Sub

Du hast eingangs geschrieben, dass die Daten aus mehreren Dateien kommen sollen. In diesem Makro steht aber nur eine Quelldatei drin.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: XL4
13.12.2005 15:18:22
peterpannbg
Hallo Erich,
vielen dank für dein feedback. Ich hatte mir das so gedacht, daß ich ein Mastersheet habe, wo von Zelle B15 beginnend, Spalten aus verschiedenen Dateien eingelesen werden und zwar immer in der Range B15:B30 bis E15:E30, die im Mastersheet in Spalte C, Spalte D, Spalte E, Spalte F usw. eingefügt werden. Am Schluß habe ich dann ein Mastersheet in dem von Spalte B bis Spalte Y alle eingelesenen Spalten nebeneinander stehen.
AW: Daten mit XL4-Makro aus and. Mappen
13.12.2005 17:17:27
Erich
Hallo Rainer,
aus "von Spalte B bis Spalte Y alle eingelesenen Spalten nebeneinander stehen" habe ich geschlossen, dass es wohl sechs Quelldateien gibt. Wenn du jetzt noch schreiben würdest, woher VBA die Pfade und Namen dieser Quelldateien nehmen kann/soll, könnte man den Code schreiben.
Noch eine Frage: Was ist, wenn in den Zielzellen schon Werte stehen? Können die einfach überschrieben werden?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: XL4
14.12.2005 08:06:21
peterpannbg
Guten Morgen Erich,
ich habe mal eine Beispieldatei angehängt, aus der die Werte ausgelesen werden sollen. Die Thematik ist die, ich habe die Personalkosten nicht immer in der gleichen Spalte stehen, da es auch Projekte gibt, die nur aus 2 Einzelprojekten bestehen, d.h. im Endeffekt müßten sogar 2 Abfragen passieren, nämlich einmal die Umsätze je Einzelprojekt für den einzelnen Kalendertag in nebeneinader liegende Spalten geschrieben und die Personalkosten in einer Spalte aufaddiert.
https://www.herber.de/bbs/user/29232.xls
Gruß rainer
Anzeige
AW: XL4
14.12.2005 09:35:38
Erich
Hallo Rainer,
die Aufgabenstellung ist mir nach wie vor nicht wirklich klar. Ich versuche sie mal zu formulieren:
1.
Es gibt (WO?) eine Liste von Quelldateien. (Das war eine Frage in meinem letzten Beitrag.)
2.
In jeder Quelldatei stehen in Zeile 16 Spaltenüberschriften:
C16: Werktage (uninteressant)
D16: Umsatz Projekt 1
E16: Umsatz Projekt 2
F16: Umsatz Projekt 3
G16: Summe Umsatz (uninteressant)
H16: Personalkosten
oder
C16: Werktage (uninteressant)
D16: Umsatz Projekt 1
E16: Umsatz Projekt 2
F16: Summe Umsatz (uninteressant)
G16: Personalkosten
3.
Die 3 oder 4 Überschriften, die mit "Umsatz Projekt" oder "Personalkosten" anfangen, und die Tageswerte (AUCH DIE FORMATE ?) unter diesen Überschriften sollen in ein Mastersheet übertragen werden.
4.
Das Einfügen der Werte in die Materdatei beginnt in Spalte C (IN WELCHER ZEILE ?).
5.
Was ist, wenn in den Zielzellen schon Werte stehen? Können die einfach überschrieben werden? (Das war die zweite Frage in meinem letzten Beitrag.)
6.
Ich sehe zwei mögliche Probleme:
a.
Bislang sollen die Tage in Spalte A der Quelldateien nicht übertragen werden. Woher kommen die Tage in der Masterdatei? Sind in allen Quelldateien genau die selben Tage enthalten?
b.
In der Masterdatei ist nicht erkennbar, woher die Daten kommen. Du hättest vielleicht mehrere Spalten "Umsatz Projekt 1" und mehrere Spalten "Personalkosten". Woran willst du in der Masterdatei erkennen, was wozu gehörte?
Habe ich das so richtig verstanden? Du müsstest schon ALLE Fragen beantworten, wenn du eine Lösung haben möchtest - vor der Lösung muss die Aufgabenstellung klar sein. Dieses Problem hast du auch, wenn du einen Profi mit der Umsetzung beauftragst - das könnte letztlich effektiver sein.
Noch ein Tipp:
Den Wochentag in B17 der Quelldatei kannst du mit der Formel
=A17
und dem Format TTTT herstellen.
Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: XL4
14.12.2005 12:08:27
Rainer
Hallo erich,
vielen Dank für deine ausführliche Antwort. Ok, ich versuch mal die Fragen nacheinander zu beantworten:
In dem Mastersheet sind die selben Tage wie in den Auslesesheets, der Schreibvorgang in das Mastersheet könnte somit in der Spalte B bereits beginnen, wobei es eigentlich egal ist, ob das jetzt in B2 oder B15 ist. Was ich heute mache, ist, ich öffne alle 8 Dateien von Hand, markiere den Bereich, wo die einzelnen Projektumsätze stehen, (die Überschriften sind alle verschieden, also es gibt kein Projekt mit dem gleichen Namen) kopiere diese nebeneinaner , somit habe ich 23 Spalten mit Umsätzen und in der 16. Spalte habe ich eine Summenformel für die Personalkosten, die ich am 1. eines Monats für alle 8 Dateien einmal erstelle und dann einfach Tag für Tag runterziehe.
Zu Frage 1. Die Dateien liegen alle in einem Ordner auf meiner Festplatte C:\Umsatz\
Zu Frage 2. Das Projekt mit den meisten Unterprojekten hat 6 verschiedene Teilprojekte. Wichtig sind hier nur die Umsätze der Einzelprojekte (ich habe sie nur aus Datenschutzgründen Projekt 1,2,3 genannt, wir können sie auch Mercedes, Opel, VW oder wie auch immer nennen)und die Gesamtpersonalkosten.
Zu Frage 3 siehe oben
Zu Frage 4 das ist eigentlich egal, ich hab es nur in meiner bisherigen Datei auch in Zeile 15 begonnen wegen der Summenformel.
Zu Frage 5 Werte können überschrieben werden, da ja die Tabelle jeden Tag weitergeführt wird.
zu Frage 6 in den Quelldateien ist die gleiche Form wie in dem Mastersheet, d.h. auch die Tage sind die gleichen.
Im Endeffekt sieht das Mastersheet genauso aus wie die Einzelsheets, nur mit mehr Spalten, weil ja da die Einzelumsätze drin stehen, einer Gesamtumsatzspalte und einer Summenspalte für die Personalkosten.
Ich hoffe, ich hab jetzt nichts vergessen.
Gruß rainer
Anzeige
AW: XL4
14.12.2005 19:17:51
Erich
Hallo Rainer,
mit deinen Antworten sind sind wir jetzt schon ein ganzen Stück weiter - aber alle hast du doch nicht beantwortet:
Frage 1:
Die Frage war nicht, wo die Quelldateien liegen, sondern, wo es eine Liste der Queölldateien gibt.
Die Quelldateien-Liste wird jetzt dynamisch aufgebaut - aus ALLEN xls-Dateien in C:\Umsatz.
2. - neue Version:
In jeder Quelldatei stehen in Zeile 16 Spaltenüberschriften:
C16: "Werktage" (uninteressant)
D16 und rechts daneben "Umsatz ..." (unterschiedliche Anzahl, mindestens eine)
rechts daneben: Summe Umsatz (uninteressant)
rechts daneben: Personalkosten
3.
Die Überschriften, die mit "Umsatz" anfangen oder gleich "Personalkosten" sind, und die Tageswerte (AUCH DIE FORMATE ?) unter diesen Überschriften sollen in ein Mastersheet übertragen werden.
## Sollen AUCH DIE FORMATE übertragen werden? (ist jetzt so)
Folgendes Modul tut das:

Option Explicit
Sub Kopie_aus_Mappen()
Dim intSpZ%, intSp%
Dim wks As Worksheet, fs As FileSearch, ii%, lngLast&
'                                                                 Vorgaben
Const strVerz = "c:\umsatz"   ' Quellverzeichnis
Const lngZeQ = 16       ' Zeile mit Überschriften in Quelldateien
Const intSpQ = 4        ' 1. mögliche Quellspalte (Umsatz ...)
Const lngZeZ = 15       ' Zeile mit Überschriften in Zieldatei
intSpZ = 2              ' 1. Zielspalte
'                                                                 Vorgaben Ende
Set wks = ActiveSheet
Set fs = Application.FileSearch
fs.NewSearch
fs.LookIn = strVerz
fs.Filename = "*.xls"
fs.SearchSubFolders = False
fs.MatchTextExactly = True
fs.FileType = msoFileTypeAllFiles
If fs.Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
For ii = 1 To fs.FoundFiles.Count
Workbooks.Open Filename:=fs.FoundFiles(ii), UpdateLinks:=False
intSp = intSpQ
While Left(Cells(lngZeQ, intSp), 6) = "Umsatz"
lngLast = Cells(lngZeQ, intSp).End(xlDown).Row
Range(Cells(lngZeQ, intSp), Cells(lngLast, intSp)).Copy _
Destination:=wks.Cells(lngZeZ, intSpZ)
intSpZ = intSpZ + 1
If intSpZ > Columns.Count Then
MsgBox "Spalten der Zieldatei reichen nicht aus."
Exit Sub
End If
intSp = intSp + 1
Wend
While Not IsEmpty(Cells(lngZeQ, intSp))
If Cells(lngZeQ, intSp) = "Personalkosten" Then
lngLast = Cells(lngZeQ, intSp).End(xlDown).Row
Range(Cells(lngZeQ, intSp), Cells(lngLast, intSp)).Copy _
Destination:=wks.Cells(lngZeZ, intSpZ)
intSpZ = intSpZ + 1
If intSpZ > Columns.Count Then
MsgBox "Spalten der Zieldatei reichen nicht aus."
Exit Sub
End If
End If
intSp = intSp + 1
Wend
ActiveWorkbook.Close False
Next ii
Else
MsgBox "Keine Dateien in '" & strVerz & "' gefunden!"
End If
End Sub

Die Master-Mappe habe ich mal beigefügt: https://www.herber.de/bbs/user/29267.xls
Nachbemerkung:
Warum antwortest du immer auf deinen eigenen und nicht auf meinen letzten Beitrag? Praktischer wäre, Fragen und Antworten zusammen auf einer Webseite zu sehen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: XL4
15.12.2005 10:04:48
Rainer
Hallo Erich,
ich weiß auch nicht, warum das mit dem Antworten nicht so klappt, ich geh immer auf Vorschau und dann senden, aber ich glaub, ich muß den oberen Senden Knopf drücken, um die Antwort hinzubekommen. Erstmal vielen Dank für die Datei, hab es auch mal ausprobiert, alllerdings kommt ein Fehler Laufzeitfehler 5, ungültiger Prozeduraufruf oder unzulässiges Argument, geh ich dann auf testen, steht der Pfeil an folgender Stelle
fs.Filename = "*.xls"
Hilft das weiter?
Gruß rainer
AW: XL4
15.12.2005 16:00:06
Erich
Hallo Rainer,
ein Test:
Wenn du in die Prozedur gehst und in eine neue Zeile hinter der Zeile "fs.NewSearch" einmal fs. (also fs und einen Punkt) eintippst - klappt an der Stell dann eine Liste der Eigenschaften und Methoden des FileSearch-Objekts auf (fängt mit Application an, der vierte Eintrag in der Liste ist Filename)? (Nach diesem Test natürlich die Eingabe wieder löschen.)
Schau mal bitte in Extras - Verweise.
Ist die Bibliothek "Microsoft Office 8.0 Object Library" (evtl. 9.0 oder wie bei mir 10.0 statt 8.0, aber du hast ja Office 97) aktiviert? Wenn nicht, müsstest du das noch tun.
Dass die Prozedur gerade in der Zeile
fs.Filename = "*.xls"
aussteigt, kann ich mir nicht erklären.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: XL4
16.12.2005 08:02:18
Rainer
Hallo Erich,
also das Dropdownmenü klappt auf und auch die Library ist aktiviert. Ich habe auch mal die Tabellenblätter wieder umbenannt auf Tabelle1 und die Dateibezeichnung auf A.xls und B.xls geändert, aber es kommt der selbe Fehler. Er stoppt mit dem Laufzeitfehler 5, hab auch das fs.filename noch mal gelöscht und neu geschrieben, aber keine Änderung.
Was könnte ich noch probieren?
Vielen Dank für deine Geduld.
Rainer
AW: XL4
16.12.2005 10:39:34
Erich
Hallo Rainer,
inzwischen hab ich den Code auch mal auf meiner alten Kiste (Win98, Office97) ausprobiert - und auch dort funzt es. Wir haben also noch keine Erklärung.
Probierst du mal bitte in einer neuen, leeren Mappe folgende Prozedur aus?

Option Explicit
Sub Kopie_aus_Mappen()
Dim fs As FileSearch
'                                                                 Vorgaben
Const strVerz = "c:\umsatz"   ' Quellverzeichnis
'                                                                 Vorgaben Ende
Set fs = Application.FileSearch
fs.NewSearch
fs.LookIn = strVerz
fs.Filename = "*.xls"
fs.SearchSubFolders = False
fs.MatchTextExactly = True
fs.FileType = msoFileTypeAllFiles
If fs.Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
MsgBox fs.FoundFiles.Count & " Dateien gefunden."
Else
MsgBox "Keine Dateien in '" & strVerz & "' gefunden!"
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: XL4
16.12.2005 10:52:52
Rainer
Hallo Erich,
auch hier genau das Gleiche Laufzeitfehler 5 und bleibt in der fs.filename Zeile stehen. Ich hab jetzt mal nen Überwachungsausdruck gemacht auf die Zeile und da steht dann
Watch : : FileName : Ausdruck in Kontext nicht definiert : Empty : DieseArbeitsmappe.Kopie_aus_Mappen
Watch : : xls : Ausdruck in Kontext nicht definiert : Empty : DieseArbeitsmappe.Kopie_aus_Mappen
Watch : : "*." : "*." : String : DieseArbeitsmappe.Kopie_aus_Mappen
Watch : + : fs : : FileSearch/FileSearch : DieseArbeitsmappe.Kopie_aus_Mappen
Grüße rainer
AW: XL4
16.12.2005 11:25:37
Rainer
Hallo Erich,
auch hier genau das Gleiche Laufzeitfehler 5 und bleibt in der fs.filename Zeile stehen. Ich hab jetzt mal nen Überwachungsausdruck gemacht auf die Zeile und da steht dann
Watch : : FileName : Ausdruck in Kontext nicht definiert : Empty : DieseArbeitsmappe.Kopie_aus_Mappen
Watch : : xls : Ausdruck in Kontext nicht definiert : Empty : DieseArbeitsmappe.Kopie_aus_Mappen
Watch : : "*." : "*." : String : DieseArbeitsmappe.Kopie_aus_Mappen
Watch : + : fs : : FileSearch/FileSearch : DieseArbeitsmappe.Kopie_aus_Mappen
Grüße rainer
AW: XL4
16.12.2005 19:18:41
Erich
Hallo Rainer,
da fällt mir jetzt fast nichts mehr zu ein. Vielleicht könntest du noch mal in VBA unter Extras - Verweise schauen, ob da nicht zu viele unnötige und vielleicht störende Bibliotheken geöffnet werden.
Wenn nichts hilft, kannst du FileSearch z. B. durch die gute alte Dir-Funktion ersetzen:

Sub Kopie_aus_Mappen()
Dim strFile As String
Dim intSpZ%, intSp%
Dim wks As Worksheet, ii%, lngLast&
'                                                                 Vorgaben
Const strVerz = "c:\umsatz"   ' Quellverzeichnis
'   Const strVerz = "f:\exc\w-w-w\tmp\rainer"   ' Quellverzeichnis
Const lngZeQ = 16       ' Zeile mit Überschriften in Quelldateien
Const intSpQ = 4        ' 1. mögliche Quellspalte (Umsatz ...)
Const lngZeZ = 15       ' Zeile mit Überschriften in Zieldatei
intSpZ = 2              ' 1. Zielspalte
'                                                                 Vorgaben Ende
Set wks = ActiveSheet
strFile = Dir(strVerz & "\*.xls")
If strFile = "" Then
MsgBox "Keine Dateien in '" & strVerz & "' gefunden!"
Else
While Len(strFile) > 0
Workbooks.Open Filename:=strVerz & "\" & strFile, UpdateLinks:=False
intSp = intSpQ
While Left(Cells(lngZeQ, intSp), 6) = "Umsatz"
lngLast = Cells(lngZeQ, intSp).End(xlDown).Row
Range(Cells(lngZeQ, intSp), Cells(lngLast, intSp)).Copy _
Destination:=wks.Cells(lngZeZ, intSpZ)
intSpZ = intSpZ + 1
If intSpZ > Columns.Count Then
MsgBox "Spalten der Zieldatei reichen nicht aus."
Exit Sub
End If
intSp = intSp + 1
Wend
While Not IsEmpty(Cells(lngZeQ, intSp))
If Cells(lngZeQ, intSp) = "Personalkosten" Then
lngLast = Cells(lngZeQ, intSp).End(xlDown).Row
Range(Cells(lngZeQ, intSp), Cells(lngLast, intSp)).Copy _
Destination:=wks.Cells(lngZeZ, intSpZ)
intSpZ = intSpZ + 1
If intSpZ > Columns.Count Then
MsgBox "Spalten der Zieldatei reichen nicht aus."
Exit Sub
End If
End If
intSp = intSp + 1
Wend
ActiveWorkbook.Close False
strFile = Dir
Wend
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige