Automatisiertes Zugreifen auf Daten
Hallo,
ich habe eine Menge verschiedener Excel-files (alle gleich aufgebaut) von denen ich jeweils einige Daten zur Weiterverwendung brauche. Ich möchte nun ein Excel-file schreiben, in welchem ich die benötigten Daten eines (ich brauche immer nur ein File pro Aufruf) files aufrufen und weiterverarbeiten kann. Ist es möglich, dies 'automatisiert' zu machen, d.h. in dem ich in eine Zelle den Namen des files eingebe, sucht es mir die Daten des passenden files heraus?
Ich hoffe, ich habe mich verständlich ausgedrückt...
Vielen Dank im Vorraus
Antwort schreiben
Antwort 1 von nighty vom 29.05.2019, 17:42 Options
hi all
ein beispiel :-)
gruss nighty
einzufuegen alt + f11/projektexplorer/DeineTabelle
Private Sub Worksheet_Change(ByVal Target As Range)
Rem zur Zeit A1 die Eingabe des Dateinamens
If Target.Column = 1 And Target.Row = 1 Then
Call EventsOff
Dim Dateien As Integer
Dim DateiName As String
With Application.FileSearch
.NewSearch
Rem Dein Pfad
.LookIn = "D:\Temp\"
.SearchSubFolders = False
Rem zur Zeit A1 die Eingabe des Dateinamens
.Filename = Range("A1") & ".xls"
If .Execute() > 0 Then
For Dateien = 1 To .FoundFiles.Count
DateiName = Dir(.FoundFiles(Dateien))
If DateiName <> ThisWorkbook.Name Then
Workbooks.Open Filename:=.FoundFiles(Dateien)
Rem dein Bereich der Quelle und des Zieles
Workbooks(DateiName).Sheets(1).Range("A1:B1").Copy ThisWorkbook.Sheets(1).Range("A2:B2")
Workbooks(DateiName).Close
End If
Next Dateien
End If
End With
Call EventsOn
End If
End Sub
einzufuegen alt + f11/projektexplorer/Allgemeines Modul
Public Sub EventsOff()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub
Public Sub EventsOn()
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Antwort 2 von nighty vom 29.05.2019, 18:04 Options
hi all :-)
alternativ wenn es nur 1 oder 2 zellen sind
gruss nighty
Option Explicit
Sub makro01()
ActiveWorkbook.SaveAs Filename:=ExecuteExcel4Macro _
("'C:\DeinPfad\" & "[DeineDatei]Tabelle1" & "'!" & Range("DeineZelle") _
.Address(, , xlR1C1)), FileFormat:=xlNormal, Password:="", _
WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
End Sub
Antwort 3 von nighty vom 29.05.2019, 18:16 Options
hi all :-)
oder besser so grrr
falsche code genommen :(
gruss nighty
Sub makro01()
Cells(2, 1) = ExecuteExcel4Macro("'D:\temp\" & "[" & Range("A1") & ".xls" & "]Tabelle1" & "'!" & Range("A1").Address(, , xlR1C1))
End Sub
Antwort 4 von schnepat vom 30.05.2019, 09:03 Options
Vielen Dank für die Antworten. Bei der letzten Variante klappt bei mir etwas mit dem Finden des Pfades nicht. Das habe ich schon richtig verstanden, dass ich da den Pfad angeben muss, wo das file liegt, oder. Muss der Apostroph sein vor der Addresse?
Sorry, bin wirklich kein Experte...
Ich arbeite übrigens mit Mac, weiss nicht, ob das relevant ist
Antwort 5 von nighty vom 30.05.2019, 12:36 Options
hi schnepat :-)
kein zeichen weglassen sind steuerzeichen,wobei mac ich mich nicht auskenne :-)
bei misslingen sind dann andere user gefragt :-)
ohne frage ist mac der bessere computer vs pc :-)))
gruss nighty
Antwort 6 von schnepat vom 30.05.2019, 13:32 Options
Hallo nighty,
ich habe mir dein erstes Script nochmals genauer angeschaut und probiert mit Hilfe von
Google und der Help die Funktion zu verstehen. Ziemliches Stück Arbeit für einen Laien...
Jetzt habe ich ein paar Fragen:
Das erste file habe ich im Projekteexplorer bei Tabelle1 reinkopiert, das zweite beim
Modul1 das oberhalb steht. Soweit richtig oder?
Dann habe ich meinen Pfad ersetzt. (Macintosh HD:Users:schneider:Desktop:)
Nun sollte doch, wenn ich etwas ändere in Zelle A1, das darin reingeschriebene als
Dateiname verwendet werden. Jedoch passiert überhaupt nichts.
Zur Kontrolle habe ich folgende Zeile eingefügt:
Target.Font.ColorIndex = 5 (noch vor der if-Abfrage)
Nun sollte doch die Farbe der Zelle ändern, wenn ich irgendwo etwas reinschreibe, aber
auch das geschieht nicht...
Muss ich noch irgendwo etwas einstelle, das das Programm aktiviert ist oder so?
Dann noch eine Frage (hoffe, ich nerve dich noch nicht zu sehr...):
Die Funktion des Eventoff und on files kapiere ich nicht wirklich. Was macht das?
Vielen Dank
Gruss Patrick
Antwort 7 von nighty vom 30.05.2019, 14:47 Options
hi patrick :-)
dieses ereignis Worksheet_Change(ByVal Target As Range)
(automatismus)reagiert auf veränderung einer zelle in der jeweiligen tabelle,wie auch z.b. beforeopen bzw beforesave ein makro auslöen kann auf deine Arbeitsmappe bezogen
eventon bzw eventoff schaltet automatische ereignisse wie bilfschirmaktualisierung und formelberechnung etc aus bzw an ,hat den vorteil einer rasanten beschleunigung eines makros da die routinen nun ausgeschaltet sind innerhalb der laufzeit.könnte man weglassen doch dann wäre wie schon beschrieben das makro um einiges langsamer.
eventon und eventoff beide in ein allgemeines modul das andere makro wie du es beschrieben hattest hinter der tabelle1 bzw deiner wunschtabelle in der der automatismus greifen soll.
sollte das makro aus beliebigen grund unterbrochen werden,so sind nun alle automatismen ausgeschaltet und excel ist nun lahmgelegt,in solchen fall ist eventon mit hand zu starten um excel wieder in den normalzustand zu bringen
noch sehr hilfreich ist die taste f8 im vbeditor,einzelschrittabarbeitung im makro mit der möglichkeit die variablen der aktuellen laufzeit zu kontrollieren,wobei ,bei einem ereignis ein haltepunkt im code gesetzt werden sollte(im vbeditor ganz links linksclick)
dein beispiel der einfaerbung der schriftfarbe ist soweit korrekt(excel2007 ausgeschlossen)
zu den anderen problemen weil macvariante von excel kenne ich mich leider nicht aus,hier sind auf jedenfall mac user gefragt
office 2007 sind beide varianten nicht lauffähig
als info fuer die macuser solltest du noch deine excelversion angeben
viel glueck
gruss nighty
code wurde mit excel2000 erstellt und getestet
Antwort 8 von nighty vom 30.05.2019, 15:02 Options
hi patrick :-)
uebrigens bin ich der laie :-))
hatte mal einen laufzeitwettbewerb provoziert in einem forum
folgende laufzeiten kamen zu stande
bei abtastung von 7 620 000 zellen
excelbenutzer=16 min
amatuer nighty=4 min
versierte amatuere ca 2 sek
profis legten eins drauf,bei abtastung von ca 16 510 000 zellen
unter 1 sekunde war nicht mehr messbar
somit gnadenlos verloren hab :-(
gruss nighty
Antwort 9 von schnepat vom 30.05.2019, 16:33 Options
So, jetzt hab ich dann einen Kopf wie eine Wassermelone, fühlt sich auf jeden Fall langsam so an...
Das mit dem Einfärben klappt jetzt, war ein Syntaxfehler.
Beim Kompilieren kommt das Programm aber nur bis zum Punkt:
With Application.FileSearch. Hier gibt es eine Fehlermeldung:
Laufzeitfehler 445, Objekt unterstützt Aktion nicht.
Sagt dir, oder sonstwem was?
Ich hab übrigens Office 2004 auf Mac
Antwort 10 von nighty vom 30.05.2019, 17:49 Options
hi patrick :-)
sollte dir hier keiner weiterhelfen können dann waere dieses forum auch nicht schlecht,profis satt
www.ms-office-forum.netmein faforit in diesem ist jinx,er kann zu 100% alles beantworten ,doch er ist nicht leicht zu nehmen :-))
oder auch das,das ist auch klasse
http://www.office-loesung.deich hoffe man verzeiht mit die links zur konkurenz,ist sonst nicht meine art,aber vielleicht fuer patrick hilfreich wenn keiner weiter helfen kann
gruss nighty
Antwort 11 von nighty vom 30.05.2019, 17:51 Options
hi patrick :-)
der fehler liegt an der filesearchmethode die bei dir nicht vorhanden ist oder in der syntax abweicht
gruss nighty