Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1864to1868
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

Macros aus Textdatei in Excelmappe

Macros aus Textdatei in Excelmappe
25.01.2022 13:35:30
Vincent
Hallo zusammen,
mit diesem Befehl füge ich ein Modul per VBA in eine Excel Arbeitsmappe ein:

Sub Modul_Vorwert_einfügen()
On Error Resume Next
Dim VBKomp As VBComponent
Set VBKomp = ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
VBKomp.Name = "ModulVorwert"
VBKomp.codeModule.AddFromFile ("K:\GCLabor\Macros\Excel-Macros für Labor Heppeler\Pharmabefunde\diese Macro nie löschen\ModVorwerte.txt")
On Error GoTo 0
Application.Visible = True
End Sub
Kann man so ähnlich eine Textdatein auch in "Diese Arbeitsmappe" / Workbook_BeforeClose hineinkopieren?
vielen Dank für eure Hilfe
Vincent Breith

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

Betreff
Datum
Anwender
Anzeige
AW: Macros aus Textdatei in Excelmappe
25.01.2022 13:41:46
Yal
Hallo Vincent,
im Prinzip schon, aber nicht klar ist, ob diese Makro als "BeforeClose"-Event wahrgenommen wird.
Alternativ: als Modul laden und vorab eine BeforeClose-Event in der Form:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.Run "modVorwert.MeinSchlussMakro", Cancel
End Sub
VG
Yal
AW: Macros aus Textdatei in Excelmappe
25.01.2022 14:24:10
Vincent
Hallo Yal,
zunächst einmal vielen Dank. Aber ich habe mich falsch ausgedrückt.
Wie bekomme ich diesen Code aus einer Texdatei in Das Excel.
Momentan kopiere ich ihn in jede Exceldatei.

Private Sub Workbook_Activate()
'dieses Activate Makro wurde durch das Add-In per Makro eingefügt
Dim rngAktiveZelle As Range, Ende_der_Befund_Tabelle As String
Application.ScreenUpdating = False
On Error Resume Next
If ActiveSheet.Name  "Arbeitsunterlagen" Then
ActiveSheet.Unprotect
UserName = LCase(Environ("USERNAME"))
Select Case UserName
Case "josefine.hilpert", "kathrin.lais", "birte.philipp", "katrin.dilger", "felix", "angelika.hofer", "felix.heppeler", "axel.heppeler", "barbara.weber"
Range("A1:G150").Select
Selection.Locked = False
Selection.Font.ColorIndex = xlColorIndexAutomatic
Range("A1").Select
Sheets(1).Select
Case Else
Range("A65536").Select
Ende_der_Befund_Tabelle = ActiveCell.End(xlUp).Row
Range(Range("A1"), Range("E" & Ende_der_Befund_Tabelle)).Select
For Each rngAktiveZelle In ActiveSheet.UsedRange
rngAktiveZelle.Select
If Len(rngAktiveZelle)  0 Or rngAktiveZelle  "" Then
rngAktiveZelle.Select
rngAktiveZelle.Font.ColorIndex = 5
rngAktiveZelle.Locked = True
End If
Next
Sheets(1).Select
Range("A1").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True
If InStr(Application.ActiveWorkbook.Path, "PROBEN Erfassung") > 0 Then
MsgBox ("Achtung, die Probe ist noch in der Datenerfassung. Analysenauftrag kann sich noch ändern")
End If
End Select
End If
Application.ScreenUpdating = True
ThisWorkbook.VBProject.References.AddFromFile "C:\Windows\system32\SHELLLNK.TLB"
End Sub

Anzeige
AW: Macros aus Textdatei in Excelmappe
25.01.2022 17:44:24
Yal
Hallo Vincent,
das dynamisches Anbinden von Code kommt selten vor. Es ist abzuwägen, warum es notwendig sei.
Wie es scheint zu sein, versuchst Du damit einen Schreibsperre einzurichten, wenn der User nicht in der Liste steht.
Schon das wäre nicht optimal: es sollte grundsächlich schreibegeschützt sein und nur dann geöffnet, wenn der User aufgelistet ist und wenn er den Schreibrecht erst überhaupt verlangt.
Man kann die Datei im Modus "Schreibschutz empfehlen" einschalten: auf "Tools" neben "Speichern" beim "Speichern unter", dann "Allgemeine Optionen" und "schreibschutz empfehlen".
Zweitens: möchtest Du wirklich die Spielerei jedemal machen, wenn ein neue Kollege dazukommt?
Sind die Kollege so doof, dass man den Schreibrecht wegnehmen muss? Denk dran, dass Verantwortung zu übergeben die Motivation steigert.
Ausserdem kann man einem Netzlaufwerk so einrichten, dass jede Version einer Datei gespeichert wird. Da sieht man schnell, wer blödsinn gemacht hat und die Daten zurückspielen. (Verantwortung übergeben, Stufe 2, leider zwispältig, je nach dem wie es kommuniziert wird: "es wird entdeckt, wenn ich meiner Verantwortung nicht gerecht bin" oder "ich werde gerettet, falls es schief geht")
VG
Yal
Anzeige
AW: Macros aus Textdatei in Excelmappe
25.01.2022 18:31:29
onur

If Len(rngAktiveZelle)  0 Or rngAktiveZelle  "" Then
Wenn

Len(rngAktiveZelle)  0
dann ist doch immer

rngAktiveZelle  ""
ODER ?
Nix für Ungut, aber Jemand mit "VBA gut" sollte nicht mit "Select" arbeiten.
AW: Macros aus Textdatei in Excelmappe
25.01.2022 19:33:17
Vincent
Sorry leider hast du mich noch nicht verstanden.
Die Makros werden über ein AddIn selbst in viele Excelmappen geschrieben
Dieses ist aber für eine Pflege/Erweiterung der Makros viel zu aufwendig
Einfacher wäre es die Makros in "textBausteine" zu pflegen und dann über das AddIN einzufügen
Auszug des AddIn
With ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe").codeModule
On Error GoTo error_1
x1 = .ProcBodyLine("Workbook_Activate", vbext_pk_Proc)
On Error GoTo 0
With ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe").codeModule
On Error GoTo error_1
x1 = .ProcBodyLine("Workbook_Activate", vbext_pk_Proc)
On Error GoTo 0
Anzahl_der_Zeilen = .CountOfLines
continue_1:
x1 = .CreateEventProc("Activate", "Workbook")
.InsertLines x1 + 1, "'dieses Activate Makro wurde durch das Add-In per Makro eingefügt"
.InsertLines x1 + 2, " Dim rngAktiveZelle As Range, Ende_der_Befund_Tabelle as String"
.InsertLines x1 + 3, " Application.ScreenUpdating = False"
.InsertLines x1 + 4, " On Error Resume Next"
.InsertLines x1 + 5, Macrotext 'If ActiveSheet.Name "Arbeitsunterlagen" Then
.InsertLines x1 + 6, " ActiveSheet.Unprotect"
.InsertLines x1 + 7, Macrotext3 'UserName = LCase(Environ("USERNAME"))
.InsertLines x1 + 8, " Select Case UserName"
.InsertLines x1 + 9, Macrotext5 ' Case "julia.brunner", "renate.ruetsch", "sonja.throm", "angelika.hofer", "felix.heppeler", "axel.heppeler
.InsertLines x1 + 10, Macrotext7 ' Range("A1:G150").Select
.InsertLines x1 + 11, " Selection.Locked = False"
.InsertLines x1 + 12, " Selection.Font.ColorIndex = xlColorIndexAutomatic"
.InsertLines x1 + 13, Macrotext4 'Range("A1").Select
.InsertLines x1 + 14, " Sheets(1).Select"
.InsertLines x1 + 15, " Case Else"
.InsertLines x1 + 16, Macrotext9 ' Range("A65536").Select
.InsertLines x1 + 17, " Ende_der_Befund_Tabelle = ActiveCell.End(xlUp).Row"
.InsertLines x1 + 18, Macrotext2 'Range(Range("A1"), Range("D150").End(xlUp)).ColorIndex = xlColorIndexAutomatic
.InsertLines x1 + 19, " For Each rngAktiveZelle In ActiveSheet.UsedRange"
.InsertLines x1 + 20, " rngAktiveZelle.Select"
.InsertLines x1 + 21, Macrotext8 'If Len(rngAktiveZelle) 0 Or rngAktiveZelle "" Then
.InsertLines x1 + 22, " rngAktiveZelle.Select"
.InsertLines x1 + 23, " rngAktiveZelle.Font.ColorIndex = 5"
.InsertLines x1 + 24, " rngAktiveZelle.Locked = True"
Anzeige
AW: Macros aus Textdatei in Excelmappe
25.01.2022 19:57:43
onur
Und was genau habe ich nicht verstanden?
Egal, ob AddIn oder normales Makro: WO das Makro steht, ist doch völlig unwichtig. Das, worauf ich dich hinwies, gilt für alle Makros.
Offenbar hast du es nicht richtig gelesen oder verstanden.
Auch nicht das, was Yal dir schrieb. Sein Vorschlag ist die einfachste Lösung deines Anliegens.
AW: Macros aus Textdatei in Excelmappe
25.01.2022 20:52:14
Dieter
Hallo Vincent,
unabhängig von der bisherigen Diskussion kannst du rein technisch gesehen deine Textdatei folgendermaßen in den Codemodul "DieseArbeitsmappe" einfügen:

Sub Modul_Vorwert_einfügen()
Dim Pfad As String
Dim VBKomp As Object
Dim wb As Workbook
Pfad = ThisWorkbook.Path & "\"
Set wb = ActiveWorkbook
On Error Resume Next
Set VBKomp = wb.VBProject.VBComponents("DieseArbeitsmappe")
With VBKomp.CodeModule
' Bisherigen Code ggf. löschen
.DeleteLines Startline:=1, _
Count:=.CountOfLines
' Code aus Textdatei einfügen
.AddFromFile Pfad & "ModVorwerte.txt"
End With
On Error GoTo 0
Application.Visible = True
End Sub
Vor dem Einfügen wird jeweils der bisherige Inhalt des genannten Codemoduls gelöscht.
Viele Grüße
Dieter
Anzeige
AW: Macros aus Textdatei in Excelmappe
26.01.2022 09:40:59
Vincent
Hallo Dieter,
Dankeschön, dieses suchte ich.
AW: Macros aus Textdatei in Excelmappe
26.01.2022 08:37:27
Yal
Halllo Vincent, hallo zusammen,
die Klärung ergänzt sich und es geht nicht, um nur Rechtsvergabe.
Ohne ins Details zu gehen (ob Code gut oder nicht), würde ich folgendes empfehlen:
_ immer ein Modul vollständig austauschen, keine einzelne Zeilen (mit Module meine ich Modul, nicht Mappe-Code "Diesearbeitsmappe" oder Blatt-Code).
_ Ereignisse in Workbook ("_BeforeClose", ...) oder Worksheet implementieren nicht selber den Code sondern rufen ein Modul-Sub/Function (Namenskonvention wird nötig)
_ es teilt sich in Code-Modul, die sich nicht ändern und die, die komplett ausgetauscht werden
_ jede Version von ein solche Modul ist identifizierbar auch separat dokumentiert.
_ nur ein Sachverhalt pro austauschbare Modul. Notfalls mehrere, verschiedene Modul verweden. Dementsprechend sollte es keine Abhängigkeit zwischen diesen Modul geben.
Weiterhin Berechtigungen ausserhalb von VBA verwalten.
Es wird die Lösung nicht retten, aber einige Verhaltenslinien, die Dir im Laufe der Zeit viel Nerven sparen. Von was dein Nachfolger machen wird, falls Du den Job wechselst, reden wir lieber nicht.
VG
Yal
Anzeige

42 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige