Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
456to460
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
456to460
456to460
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

code kopieren die 2.

code kopieren die 2.
21.07.2004 09:45:56
Volker
Hallo Leidensgenossen,
habe folgendes Problem:
Ich will den code des aktiven worksheets in alle sheets eines anderen workbooks,
hier Mappe3, kopieren.

Sub copy_code()
Dim scode As String
Dim i As Integer
For i = 1 To Workbooks("Mappe3.xls").Sheets.Count
With ThisWorkbook.VBProject.VBComponents("Tabelle1").CodeModule
scode = .Lines(1, .CountOfLines)
End With
x = Workbooks("Mappe3.xls").Sheets(i).Name
Workbooks("Mappe3.xls").VBProject.VBComponents(x).CodeModule.AddFromString scode
Next
End Sub

1. Wie kann ich die Krücke mit der Zuweisung das sheet-Namens an die Variable
x umgehen?
Workbooks("Mappe3.xls").VBProject.VBComponents(sheets(i)). ......
gibt einen Syntaxfehler
2. Excel stürzt am Ende des 1. Schleifendurchganges ab. Produziere ich da
vielleicht einen Stacküberlauf oder geht so was prinzipiell nicht mt einer
Schleife
Viele Grüße und danke im Voraus
Volker

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Einsetzungsverfahren
21.07.2004 10:13:52
peh
Hi,
das was du für x geschrieben hast
einfach anstatt sheets(i) einsetzen ;-)
Gruß Peter
Ergänzend
21.07.2004 10:17:05
peh
Hi,
imho solltest du auch besser mit:
codename
anstatt name
arbeiten.
Workbooks("Mappe3.xls").Sheets(i).codename
Gruß Peter
AW: Ergänzend
21.07.2004 13:42:22
Volker
Hallo Peter,
ich hab jetzt
Workbooks("Mappe3.xls").VBProject.VBComponents(Workbooks("Mappe3.xls").Sheets(i).CodeName).CodeModule.AddFromString scode
verwendet.
Leider stürzt Excel immer noch ab. Allerdings auch wenn ich keine Schleife verwende,
sondern nur z.B. in sheet(1) kopiere. Der Absturz erfolgt übrigens nicht
bei Ausführung der Zeile sondern beim Ausführen des nächsten Befehls.
Kannst Du damit ev. was anfangen?
Gruß
Volker
Anzeige
XP
21.07.2004 14:32:06
peh
Hi,
hat das überhaupt schonmal irgendwie funktioniert.
(ich kenn ja deinen eingefügten Code nicht)
Hast du unter Makros und Sicherheit- Vertrauenswürdige Quellen
den Zugriff auf VBA Projekt freigegeben ?

Teste es als erstes mal mit etwas simplen wie
sCode = " ' Debug.Print"
Gruß Peter
AW: XP
21.07.2004 16:39:48
Volker
Hallo Peter,
die Freigaben sind und waren gemacht.
Hiernoch mal der code im ganzen
Sub copy_code()
Dim scode As String
With ThisWorkbook.VBProject.VBComponents("Tabelle1").CodeModule
scode = .Lines(1, .CountOfLines)
End With
Workbooks("Mappe3.xls").VBProject.VBComponents(Workbooks("Mappe3.xls").Sheets(1).CodeName).CodeModule.AddFromString scode
End Sub
kopieren möchte ich:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
< bliebiger code >
End Sub

Du hast Recht: wenn ich mit scode="willi" ;-) nur irgendwelchen Text übergebe, funktioniert's.
Vielleicht liegt es an den Schlüsselwörtern in der sub.
Jedenfalls dauert es einige Sekunden bis zum Absturz ? und wenn ich schnell genug
in der Zieltabelle, also Mappe3.Tabelle1 nachsehe, steht der code auch drin.
Und was noch besser ist: wenn ich im Editor in Mappe3 bleibe, gibt's keinen Absturz,
gehe ich zur Quelltabelle zurück, sofort.
Komisch, das kopieren von Modulen geht doch auch per string-Variable.
Rätsel über Rätsel
Hast Du noch eine Idee
Gruß
Volker
Anzeige
Teste Mal
21.07.2004 18:29:04
peh
Hi,
rahm das ganze mal in ein
Application.enableevents = false
Application.enableevents = true
ein.
Musst mal selbst rumtesten, ich hab keine Lust das nachzubauen.
Scheint aber an den Events liegen zu können.
(Dein beliebiger Code ist vielleicht auch ein ansatz, aber lass auch erstmal den beliebigen code weg um zu sehen ob die Prozedur geschrieben wird)
Gruß Peter
AW: Teste Mal
22.07.2004 15:13:27
Volker
Hallo Peter,
Sorry, dass ich erst jetzt reagiere, aber iregndwie klappts mit der mail-Benachrichtigung nicht.
Ich bin im Archiv auf das Stichwort "CreateEventProc" gestoßen, war aber kein Beitrag hinterlegt. Über Google hab ich den folgenden Link gefunden:
http://www.cpearson.com/excel/vbe.htm
Da war genau, was ich suchte. Ich mach's jetzt so:

Private Sub eventprozedur_erzeugen()
With ActiveWorkbook.VBProject.VBComponents(ThisWorkbook.CodeName).CodeModule
StartLine = .CreateEventProc("SheetSelectionChange", "Workbook") + 1
.InsertLines StartLine, _
"ziel = ActiveCell"
.InsertLines StartLine + 1, _
"If ActiveSheet.index = 1 Then"
.InsertLines StartLine + 2, _
"If Len(ActiveCell) > 1 And Len(ActiveCell) < 7 Then Sheets(ziel).Activate"
.InsertLines StartLine + 3, _
"ElseIf ActiveCell = """"Then"
.InsertLines StartLine + 4, _
"Sheets(1).Activate"
.InsertLines StartLine + 5, _
"End If"
End With
End Sub

Durch Eingabe der Stichwörter in der Klammer in der 3. Zeile wird direkt die richtige Syntax im Worksheetobjekt angelegt.
Ich erzeuge z.B. eine Ereignisprozedur im workbook für alle worksheets, die genauso funktioniert, als hätte ich sie zu Fuß eigegeben.
Einen Haken hat die Sache noch: Nach dem Einfügen des Codes in die Zieldatei öffnet sich der VBA-Editor an der entsprechenden Stelle, was den gemeinen Anwender natürlich irritieren könnte. Außerdem sollja keiner in dem Projekt rumpfuschen.
Kann ich das öffnen des Editors irgendwie unterdrücken oder ihn direkt wieder schließen?
Leider weiß ich nicht, wie ich das Fenster/die Anwendung anzusprechen habe.
Hast Du ev. noch eine Idee?
Wenn nicht, trotzdem großen Dank für deine Mühe
Gruß
Volker
Anzeige
Test
23.07.2004 09:25:51
peh
HI,
ich habe jetzt mal getestet:
Option Explicit

Sub Uebertrag()
Dim oQuelle As Workbook, oZiel As Workbook, sCopyText As String
Dim iLines As Long
Set oQuelle = ThisWorkbook
Set oZiel = Workbooks("ziel.xls")
With oQuelle.VBProject.VBComponents(oQuelle.CodeName).CodeModule
sCopyText = .Lines(1, .CountOfLines)
iLines = .CountOfLines
'Debug.Print sCopyText
End With
Application.EnableEvents = False
With oZiel.VBProject.VBComponents(oZiel.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString sCopyText
End With
Application.EnableEvents = True
End Sub

Bis auf das mein FProt (Virenwarner) angesprungen ist, hat es funktioniert.
Ohne irgendwelche Abflüge.
Aber Virenprotektoren könnten da schon Probleme bereiten.
Das ganze ist auch nicht wirklich gut.
Ich bin der Meinung, dass man niemals in eine bestehende Mappe per Code Code einfügen sollte. Gibt nur Probleme.
Wenn du eine Mastermappe hast, die geöffnet ist wenn die Zielmappen geöffnet sind,
dann ist es sinnvoller über ein Klassenmodul die Ereignisse aller Mappen abzufangen.
Damit wollen wir es dann in diesem Thread belassen.
Ich wünsche dir viel Erfolg
Gruß Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige