Modul einfügen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm TextBox MsgBox
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

Beiträge aus den Excel-Beispielen zum Thema "mehrere bedingungen"