Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1592to1596
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
Inhaltsverzeichnis

Makro auf andere Dateien anwenden

Makro auf andere Dateien anwenden
21.11.2017 12:02:59
Kisska
Hallo zusammen,
ist es möglich, ein Makro in einer gesonderten Datei zu erstellen, um dieses dann auf anderen Dateien anzuwenden?
Konkret:
Ich habe mehrere Dateien mit Daten. Aus diesen Daten möchte ich bestimmte Spalten behalten und den Rest löschen, anschließend sollen die Daten als Tabelle formatiert werden. Dies mache ich mit folgendem Code:

Sub Spalte_löschen()
Dim spaltenzähler As Integer
Dim Suchbegriff As String
spaltenzähler = 1
While Cells(1, spaltenzähler)  ""
Suchbegriff = Cells(1, spaltenzähler)
' Hinweis: Bei der Überschrift
If Suchbegriff  "ÜB_1" And Suchbegriff  "ÜB_2" Then
Columns(spaltenzähler).Delete
spaltenzähler = spaltenzähler - 1
End If
spaltenzähler = spaltenzähler + 1
Wend
ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.UsedRange, , xlYes).Name = "Table1"
End Sub
Gerne würde ich diesen Code in einer separaten (leeren) Datei speichern, dann die gewünschte Datei mit den Daten öffnen und den Code darüber laufen lassen, ohne dass das Makro in diese Daten-Datei importiert werden muss. Anschließend möchte ich die formatierten Daten abspeichern als Excel ohne Makros. Für die Prozedur müssen entsprechend 2 Dateien geöffnet sein - die eine Datei mit dem Makro und die zweite Datei mit den Daten.
Ist es umsetzbar?
Viele Grüße
Kisska

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ja, mit Personal.xlsm oder als AddIn ...xlam! orT
21.11.2017 12:50:33
Kisska
Danke für die schnelle Antwort und den Hinweis, Luc! Diese Methode funktioniert aber nur auf dem Privatrechner oder? Oder können damit beliebig viele User das Makro ausführen ?
Nur mit AddIn, über das sie dann auch verfügen ...
21.11.2017 12:53:31
Luc:-?
…müssen, Kisska;
→ mitliefern! Ansonsten siehe Rudis AW.
Luc :-?
danke!
21.11.2017 14:11:22
Kisska
Alles klar, das werde ich mal testen. Vielen Dank :-)
gar kein Problem
21.11.2017 12:34:35
Rudi
Hallo,
du musst das Makro nur aus der zu bearbeitenden Datei heraus starten.
Zeilen/ Spalten löschen immer von unten/ hinten.
Keine Umlaute in VBA verwenden.
Sub Spalte_loeschen()
Dim SpaltenZaehler As Long
Dim Suchbegriff As String
Application.ScreenUpdating = False
SpaltenZaehler = Cells(1, Columns.Count).End(xlToLeft).Column
For SpaltenZaehler = SpaltenZaehler To 1 Step -1
Suchbegriff = Cells(1, SpaltenZaehler)
' Hinweis: Bei der Überschrift
If Suchbegriff  "ÜB_1" And Suchbegriff  "ÜB_2" Then
Columns(SpaltenZaehler).Delete
End If
Next SpaltenZaehler
ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.UsedRange, , xlYes).Name = "Table1"
End Sub
Gruß
Rudi
Anzeige
AW: gar kein Problem
21.11.2017 14:16:11
Kisska
Hallo Rudi,
danke für die Hinweise!
Leider muss ich das Makro aus einer externen Datei starten, aber danke für die Verbesserung des Codes. Den Code, den ich gepostet habe, habe ich aus dem Web übernommen. Als VBA-Anfänger verstehe ich deine Verbesserung leider nicht. Wärest du so freundlich zu sagen, was dein Code besser macht?
VG
Kisska
AW: Makro auf andere Dateien anwenden
21.11.2017 17:33:15
onur
Den Code in ein Modul schreiben, modul exportieren, bei der anderen Datei wieder importieren.
Danke, aber ....
21.11.2017 23:10:35
Kisska
diesen Weg wollte ich eben nicht gehen.
Dennoch Dankeschön!
VG
Kisska
AW: Danke, aber ....
21.11.2017 23:20:53
onur
Versuch das:
Symbolleiste für Schnellzugriff anpassen / Befehle ausdwählen / Makros / Dein Makro auswählen.
Datei speichern und schon steht dir das Makro in jeder Datei zur Verfügung.
Anzeige
gute Idee, aber
22.11.2017 18:54:01
Kisska
Hallo Onur,
das ist eine sehr praktische Funktion! Danke!
Mir stellt sich nur die Frage, ob ich die Schnellfunktion gut gebrauchen kann, wenn ich das Makro ständig anpassen muss. In meinem Code ist folgender Befehl eingebaut:

Range("Table1[Jahr]").Formula = "2017"

Das Jahr muss vor jeder Makro-Ausführung angepasst werden.
Wenn ich die Lösung von Daniel verwende, indem ich das Makro aus der Makroliste auswähle, kann ich dort den Code zuerst bearbeiten und dann ausführen.
Wie müsste ich nach deiner Lösung vorgehen?
VG
Kisska
Anzeige
AW: gute Idee, aber
22.11.2017 19:25:31
onur
Du könntest ja statt
Range("Table1[Jahr]").Formula = "2017"
das Jahr immer in die gleiche Zelle auf dem gleichen Blatt plazieren und von da aus entnehmen lassen.
z.B.A1=2017 und das makro den Wert aus A1 lesen/entnehmen lassen.
hmm
22.11.2017 20:54:25
Kisska
Das würde bedeuten, dass ich einen Verweis auf die externe Makro-Datei setzen muss. Das funktioniert zwar, aber in meiner Datendatei wird es als Formel und nicht als feste Werte einkopiert :/
VG
Kisska
AW: hmm
22.11.2017 21:11:54
onur
In deinem ursprünglichen code stand nix von irgendwelchen Formeln - Da ging es nur darum, bestimmte Spalten zu löschen.
thx
25.11.2017 01:33:47
Kisska
Da hast du recht :)
Inzwischen arbeite ich häufig mit dem Makro-Schnellzugriff und dafür nochmal vielen Dank!
Anzeige
AW: Makro auf andere Dateien anwenden
21.11.2017 23:41:28
Daniel
Hi
ist eigentlich kein Problem.
Du musst das Makro so schreiben, dass es immer das aktive Tabellenblatt bearbeitet.
Dh. der Code sollte sich in einem allgemeinen Modul befinden und du verwendest die RANGE, CELLS, COLUMNS, ROWS immer ohne Tabellenblattangabe davor oder mit ACTIVESHEET als Vorsatz.
zum Ausführen des Makros gehst du dann so vor:
1. beide Dateien müssen geöffnet sein
2. die Datei, die bearbeitet werden soll, muss aktiv und im Vordergrund sein
3. du startest das Makro dann über das Menü: ANSICHT - MAKROS - MAKROS - MAKROS ANZEIGEN
dort dann das gewünschte Makro auswählen und AUSFÜHREN klicken.
ich würde aber noch eine kleine Sicherheitsabfrage einbauen, für den fall das die Datei mit dem Makro bei Makrostart die aktive ist:
Sub SpalteLöschen()
IF ActiveWorkbook.Name = ThisWorkbook.Name then
Msgbox "Bitte aktivieren Sie die zu bearbeitende Datei und starten das Makro über ANSICHT -  _
MAKROS"
Exit Sub
End IF
und hier dann der weitere Code
Gruß Daniel
Anzeige
Da muss der Anwender dann aber selber dran ...
22.11.2017 00:53:05
Luc:-?
…denken oder die Datei muss eine Workbook_Open-Routine enthalten, die das besorgt, und könnte dann nicht mehr als .xlsx gespeichert wdn, Daniel;
das war aber eine Forderung! Ein AddIn dagg muss nur einmal auf dem jeweiligen PC installiert und in Xl aktiviert wdn.
Morrn, Luc :-?
Großartig! Genau das Richtige
22.11.2017 01:15:31
Kisska
Daniel, du bist super! Eigentlich so simpel und man kommt selbst nicht drauf :) Dankeschön!
Angenommen, ich hätte mehrere Dateien geöffnet, die mit der gleichen Makro-Datei bearbeitet werden sollten. Wäre es überhaupt auf irgendeine Weise umsetzbar?
VG
Kisska
AW: Großartig! Genau das Richtige
22.11.2017 11:34:37
Daniel
Hi
ja klar wäre das Umsetzbar.
du musst dann eine Schleife installieren, welche über alle geöffneten Dateien läuft und überprüft, ob die jeweilige Datei auf diese Weise überarbeitet werden darf oder nicht (man könnte z.B. prüfen, ob die beiden Überschriften in der ersten Zeile vorhanden sind) und dann die Bearbeitung ausführen oder eben nicht.
Dann spielt es auch keine Rolle, welche Datei aktiv ist, wenn das Makro gestartet wird, dh du könntest auch einen Startbutton in die Datei mit dem Makro einbauen:
Sub Spalte_löschen()
dim WB as Workbook
Dim SH as Worksheet
Dim spaltenzähler As Integer
Dim Suchbegriff As String
for each WB in Application.Workbooks
for each SH in WB.Worksheets
if Worksheetfunction.CountIf(sh.Rows(1), "ÜB_1") > 0 Then
If worksheetfunction.CountIf(sh.Rows(1), "ÜB2") > 0 Then
spaltenzähler = 1
While SH.Cells(1, spaltenzähler)  ""
Suchbegriff = Cells(1, spaltenzähler)
' Hinweis: Bei der Überschrift
If Suchbegriff  "ÜB_1" And Suchbegriff  "ÜB_2" Then
SH.Columns(spaltenzähler).Delete
spaltenzähler = spaltenzähler - 1
End If
spaltenzähler = spaltenzähler + 1
Wend
SH.ListObjects.Add(xlSrcRange, ActiveSheet.UsedRange, , xlYes).Name = "Table1"
end if
eind if
next SH
wb.Save  '--- die Überarbeitete Mappe speichern
wb.Close '--- die Überarbeitete Mappe schließen
next WB
End Sub
in diesem Fall muss dann natürlich vor jedem Zellbezug die Variable mit dem aktuell zu bearbeitenden Tabellenblatt stehen.
ich habe den code jetzt nicht getestet.
ich würde dich bitten, den Code nicht einfach zu kopieren, sondern versuchen zu verstehen, was da abläuft und dann das ganze selber zu programmieren.
ob du das speichern und schließen drin haben willst, musst du selber entscheiden.
für die Testphase würde ich es auskommentieren, damit man nach dem lauf des Codes testen kann, ob die Dateien korrekt überarbeitet wurden, und erst dann wieder aktivieren, wenn das der Fall ist.
Gruß Daniel
Anzeige
Meldung
25.11.2017 01:36:39
Kisska
Hallo Daniel, deinen Code habe ich noch nicht ausprobiert, das mache ich noch demnächst, wollte aber schon mal mich bedanken für die große Unterstützung!

25 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige