Herbers Excel-Forum - das Archiv

Modul einfügen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
TextBox UserForm
Bild

Betrifft: Modul einfügen
von: Matthias

Geschrieben am: 13.04.2005 08:16:01
Hallo Leute
Ich habe zwei Probleme:
1. Ich muss mit einem Makro ein neues Modul einfügen.
2. Ich muss in dieses Modul mit einem Makro etwas reinschreiben.
Vermutlich ziemlich simpel. Aber ich habe bisher trotzdem nichts gefunden.
Ich danke euch für eure Tipps.
Grüsse
Bild

Betrifft: AW: Modul einfügen
von: Rolf Beißner

Geschrieben am: 13.04.2005 09:18:57
Hallo Matthias,
besorg' dir mal das Tutorial von Hans Herber -
da findest du solche Sachen
fG
Rolf
'Standardmodul in der aktiven Arbeitsmappe anlegen
Sub modul_anlegen()
Dim mdl As Object
Dim mdlName As String
mdlName = "NeuesModul"   'keine Leerzeichen im Namen!!!
Set mdl = ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
With mdl
.Name = mdlName
.Activate
End With
End Sub

'Code in bestehendes Standardmodul einfügen
Sub code_in_Standardmodul_einfügen()
Dim mdl As Object
Dim feld As Range
Dim sCode As String
Dim mdlName As String
mdlName = "NeuesModul"
sCode = "
Sub Message" & vbLf
sCode = sCode & "   MsgBox ""Ich bin der neue Code!""" & vbLf
sCode = sCode & "End Sub
"
Set mdl = ActiveWorkbook.VBProject.VBComponents(mdlName).CodeModule
With mdl
.AddFromString sCode
.CodePane.Show
End With
End Sub

Und hier ein Beispiel von Michael Kofler
zu deiner 2. Frage
Sub AddWorksheetWithEvents()
Const newname$ = "neues Tabellenblatt"
Dim ws As Worksheet
Dim vbc As VBComponent
Dim wsname$, linenr, dummy
' testen, ob Tabellenblatt schon existiert
On Error Resume Next
dummy = ThisWorkbook.Worksheets(newname).Name
If Err = 0 Then
MsgBox "Das Tabellenblatt " & newname & " existiert schon. Bitte löschen Sie das Tabellenblatt und führen Sie die Prozedur nochmals aus."
Exit Sub
End If
Err = 0
On Error GoTo 0
' Tabellenblatt erzeugen, den Namen »neues Tabellenblatt« zuweisen
Set ws = ThisWorkbook.Worksheets.Add
ws.Name = newname
' VBE-internen Namen für dieses Tabellenblatt ermitteln
For Each vbc In ThisWorkbook.VBProject.VBComponents
If vbc.Type <> 3 Then 'Userforms übergehen/von mir eingefügt wg.Excel2000 rb
If vbc.Properties("Name").Value = newname Then
wsname = vbc.Name
Exit For
End If
End If
Next
' Prozedur hinzufügen
With ThisWorkbook.VBProject.VBComponents(wsname).CodeModule
linenr = .CreateEventProc("Activate", "Worksheet")
.InsertLines linenr + 1, "  MsgBox ""Ereignisprozedur"""
End With
End Sub

Bild

Betrifft: Hilfe!!!
von: Matthias

Geschrieben am: 13.04.2005 21:03:07
Hallo
Ich danke für die Beispiele. Aber ich komme trotzdem nicht einen Schritt weiter. Ich habe immer und ewig Fehler im Zusammenhang mit VBComponents und VBProject. Und wenn der Fehler einmal nach einer Anpassung nicht auftritt habe ich einen "Anwendungs- oder Objektdefinierter Fehler".
Also mal von vorne. Ist es denn so schwer
Sub makro generieren()
suchen = "HNN9008A"
suchen_in_parts
End Sub

in den Codebereich von "Tabelle1" einzutragen.
Ich steh im Moment total auf der Leitung.
Danke für eure Hilfe.
Bild

Betrifft: AW: Hilfe!!!
von: Rolf Beißner
Geschrieben am: 14.04.2005 08:59:16
Hallo Matthias,
damit die Beispiele funktionieren,
musst du einen Verweis setzen auf
Microsoft Visual Basic for Applications Extensibility x.x (x.x ist bei mir 5.3)
fG
Rolf
Bild

Betrifft: AW: Hilfe!!!
von: Matthias

Geschrieben am: 14.04.2005 13:55:12
Hallo
Ich danke für den Hinweis mit der Microsoft Visual Basic for Applications Extensibility. Ich kann jetz etwas mit dem Code anfangen. Habe eine weitere Frage:
.CreateEventProc("Activate", "Worksheet") erzeugt eine Private Sub. Ich kann aber damit nichts anfangen, da ich die Prozedur später als Makro finden muss. Es darf also nur eine sub makroname () sein.
Kannst du mir ein weiteres mal helfen.
Gruss
Bild

Betrifft: AW: Hilfe!!!
von: Rolf Beißner

Geschrieben am: 14.04.2005 14:50:16
Hallo Matthias,
deine Frage war so:
Und noch einmal hallo
Ich habe noch eine weitere Frage: Kann mir jemand sagen, wie ich etwas per VBA Makro in den Codebereich eines Tabellenblattes einfügen kann? Ist dies überhaupt möglich?
Danke und Grüsse
Matthias
Im Codebereich eines Tabellenblatts wird üblicherweise Ereigniscode hinterlegt -
dafür war das Kofler Beispiel gedacht.
"Normalen" Code legst du einfach gemäß meinem 2. Beispiel an.
fG
Rolf
Bild

Betrifft: AW: Hilfe!!!
von: Matthias

Geschrieben am: 14.04.2005 19:42:17
Hallo Rolf
Der Grund weshalb ich den Code unbedingt in der Tabelle haben möchte ist recht simpel. Ich habe 12 Blätter in der Arbeitsmappe und in jedem Blatt brauche ich immer das gleiche Makro:
Sub gp300_01 ()
suchen = partnummer 'Variable für eine Artikelnummer
suchen_in_parts 'Makro in einem anderen Modul
sheets(come_from).select
End Sub

Es ändert nur immer nur der Wert in der Variable suchen. Es werden in Zukunft weitere Tabellen hinzukommen und für diesen Zweck will ich eine Userform durch welche das Makro oben generiert wird. gp300_01 und partnummer sind Variablen, welche aus textboxen übernommen werden. Meine Idee war es halt das Tabellenobjekt als Container für die dazugehörenden Makros zu verwenden.
Es mag vieleicht der falsche Weg sein aber mir erschien es nicht so abwegig.
Nur so mal als Feedback und Erklärung für meine Fragen.
Gruss Matthias
Bild

Betrifft: AW: Modul einfügen
von: ChrisSp

Geschrieben am: 13.04.2005 09:22:23
Hi Matthias,
https://www.herber.de/mailing/images/code/164502.gif
habe ich hier irgendwann mal irgendwo in der Recherche gefunden - frag mich bloß nicht wo :o)
mit: Application.VBE.VBProjects() kommst du an alle VBA-Projekte ran,
mit: Application.VBE.VBProjects().VBComponents() wären dann die einzelnen Komponenten, also auch die Module dran
der Rest sollte mit dem Beispiel klappen, oder????
Gruss
Chris
 Bild