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

VBE-Problem

VBE-Problem
04.05.2009 13:09:28
Fischer
Hallo zusammen,
sorry das ich für mein Problem nochmal einen Thread auf mache, aber mein alter ist irgendie im Archiv gelandet und ich kann dort nichts mehr posten.
Ich habe folgendes Problem: Ich füge über mein Makro Code in einem anderen Workbook ein. Wenn ich diese Zeile hier einfüge:
.InsertLines 2, "Private Sub CommandButton1_Click()"
hängt sich danach mein Excel auf. Ich kann also jedmöglichen anderen Müll einfügen nur nicht "Private Sub CommandButton1_Click()".
Bsp.:
.InsertLines 1, "TestZeile1 OK"
.InsertLines 2, "TestZeile2 OK
.InsertLines 3, "TestZeile3 OK"
liegt das daran, das ich danach den Button neu ansprechen muss?
Danke euch schon aml

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
genau!!!
04.05.2009 13:31:24
Luschi
Hallo Mike,
denn es kommt hier auf eine saubere Referenzierung der Objekte an, dann klapp es auch mit:
.InsertLines 2, "Private Sub CommandButton1_Click()"
Gruß von Luschi
aus klein-Paris
AW: VBE-Problem
04.05.2009 13:38:01
Rudi
Hallo,
das funktioniert bei mir:
Sub fu_Code_erstellen()
Dim VBProj As VBIDE.VBProject
Dim VBCom As VBIDE.VBComponent
Dim VBcm As VBIDE.CodeModule, _
wb2 As Workbook
Dim sCode As String
sCode = "

Private Sub Commandbutton1_Click()" & vbLf
sCode = sCode & "MsgBox ""Test""" & vbLf
sCode = sCode & "End Sub

"
Set wb2 = Workbooks("Mappe4")
Set VBProj = wb2.VBProject
Set VBCom = VBProj.VBComponents(wb2.ActiveSheet.CodeName)
Set VBcm = VBCom.CodeModule
With VBcm
.AddFromString sCode
End With
Set VBProj = Nothing
Set VBCom = Nothing
Set VBcm = Nothing
Set wb2 = Nothing
End Sub


Gruß
Rudi

Anzeige
AW: VBE-Problem
04.05.2009 14:37:55
Fischer
Servus Rudi,
ich habe das mal ausprobiert wie du, aber leider ohne Erfolg. Excel stüzt noch immer ab. Hier mla mein code:
Sub fu_Code_erstellen()
Dim VBProj As VBProject
Dim VBCom As VBComponent
Dim VBcm As CodeModule
Dim scode As String
Set VBProj = ActiveWorkbook.VBProject
scode = "Option Explicit" & vbLf & "

Private Sub CommandButton1_Click()" & vbLf & _
"Dim strSheetname, strTausch As String" & vbLf & "Dim intStringlaenge As Integer" &  _
vbLf & _
"Dim lngHR, lngProg As Long" & vbLf & vbLf & _
"strSheetname = ActiveSheet.Name 'speichern des Sheetnamen in Stringvariable" _
& vbLf & "intStringlaenge = Len(ActiveSheet.Name) 'länge des namens feststellen" _
& vbLf & vbLf & "lngHR = ActiveSheet.Range(""E6"").Value + ActiveSheet.Range(""J6""). _
Value" & vbLf & _
"lngProg = ActiveSheet.Range(""E6"").Value + ActiveSheet.Range(""K6"").Value" & vbLf &  _
_
"If Month(ActiveSheet.Range(""J1"").Value) 

"
Application.DisplayAlerts = False
With VBProj.VBComponents(ActiveSheet.CodeName).CodeModule
.AddFromString scode
End With
Application.DisplayAlerts = True
End Sub


Anzeige
AW: VBE-Problem
04.05.2009 14:41:03
Fischer
Bei mir hängt sich auch dein Code auf :(
AW: VBE-Problem
04.05.2009 14:59:48
Fischer
hmmm, ok ich habe deinen code nochmal in einer jungfreulichen Datei verucht und da funktioniert er :( Aber ich weiss trotzdem noch nicht warum
AW: VBE-Problem
04.05.2009 16:04:18
Luschi
Hallo Fischer,
den Fehler hatte ich Dir auch schon aufgezeigt. In Rudis und meinem Vba-Code steht:
Set VBCom = VBProj.VBComponents(wb2.ActiveSheet.CodeName)
Dabei kommt es auf den fett gedruckten Zusatz an.
In Deinem Code steht nach wie vor:
With VBProj.VBComponents(ActiveSheet.CodeName).CodeModule
Activesheet zeigt dabei auf die Arbeitsmappe, in dem der gerade auszuführende Code steht (Thisworkbook),
während Set VBProj = ActiveWorkbook.VBProject auf das Vba-Projekt der gerade neu geöffneten Arbeitsmappe zeigt. Da muß es eben knallen - weise den Objekten Variablen zu und setze die Verweise.
Hier noch ein Beispiel: https://www.herber.de/bbs/user/61598.zip
Beide Mappen müssen sich im gleichen Verzeichnis befinden.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBE-Problem
04.05.2009 16:32:09
Fischer
Hi Luschi,
tut mir ja echt leid, aber daran liegt es nicht. Ich habe schon mindestens TAUSEND verschiedene Arten versucht, aber Excel hängt sich immer auf. AUCH bei der Beispieldatei :(
With VBProj.VBComponents(wb2.ActiveSheet.CodeName).CodeModule
.InsertLines 1, "'ich steh ganz oben"
.InsertLines 2, "Private Sub CommandButton1_Click()"
End With
So funktioniert es nicht!!!!
So funktioniert es:
With VBProj.VBComponents(wb2.ActiveSheet.CodeName).CodeModule
.InsertLines 1, "'ich steh ganz oben"
.InsertLines 2, "Lalelu"
.InsertLines 2, "nur der Mann im Mond"
.InsertLines 2, "Schaut zu"
End With
Und nun? Warum? Ich habe folgende Verweise drinne:
Visual Basic For Applications
Visual Basic For Applications Extensibility 5.3
OLE Automation
Microsoft Office 10.0 Objekt Library
Microsoft Excel 10.0 Objekt Library
Ist mein Excel einfach am A.?
Anzeige
AW: VBE-Problem
04.05.2009 17:45:17
Tino
Hallo,
versuche es mal einfach so.
Sub fu_Code_erstellen()
Dim wb2 As Workbook
Dim sCode As String

sCode = _
"

Private Sub Commandbutton1_Click()"
& vbLf sCode = sCode & "MsgBox ""Test""" & vbLf sCode = sCode & "End Sub

" Set wb2 = Workbooks("Mappe2") With wb2.VBProject.VBComponents(wb2.Sheets("Tabelle1").CodeName).CodeModule .AddFromString sCode End With Set wb2 = Nothing End Sub


Gruß Tino

Anzeige
AW: VBE-Problem
04.05.2009 17:50:00
Tino
Hallo,
dieser Teil

sCode = _
Private Sub Commandbutton1_Click()" & vbLf
sCode = sCode & "MsgBox ""Test""" & vbLf
sCode = sCode & "End Sub
"


sollte natürlich so aussehen.


sCode = _
"Private Sub Commandbutton1_Click()" & vbLf
sCode = sCode & "MsgBox ""Test""" & vbLf
sCode = sCode & "End Sub"


Gruß Tino

AW: VBE-Problem
05.05.2009 07:41:52
Fischer
Guten Morgen Tino,
ich habe nur leider das Problem ,das ich nicht immer Mapp2 und nicht immer in Tabelle1 was schreiben möchte. Es ligt auch nicht !!!!! an meinen Code selber glaube ich. So funktiniert er nämlich:

Sub fu_Code_erstellen()
Dim VBProj As VBProject
Dim VBCom  As VBComponent
Dim VBcm As CodeModule
Dim scode As String
ActiveSheet.Unprotect
Set VBProj = wkbinput.VBProject
Application.DisplayAlerts = False
With VBProj.VBComponents(wkbinput.ActiveSheet.CodeName).CodeModule
'        .AddFromString scode
.InsertLines 1, "Option Explicit"
.InsertLines 2, "'Private Suub CommandButton1_Click()"
.InsertLines 3, "Dim strSheetname, strTausch As String"
.InsertLines 4, "Dim intStringlaenge As Integer"
.InsertLines 5, "Dim lngHR, lngProg As Long"
.InsertLines 6, ""
.InsertLines 7, "strSheetname = ActiveSheet.Name 'speichern des Sheetnamen in  _
Stringvariable"
.InsertLines 8, "intStringlaenge = Len(ActiveSheet.Name) 'länge des namens  _
feststellen"
.InsertLines 9, ""
.InsertLines 10, "lngHR = ActiveSheet.Range(""E6"").Value + ActiveSheet.Range("" _
J6"").Value"
.InsertLines 11, "lngProg = ActiveSheet.Range(""E6"").Value + ActiveSheet.Range( _
""K6"").Value"
.InsertLines 12, "If Month(ActiveSheet.Range(""J1"").Value) 


Aber wenn ich in Zeile 2 das ' weg mache ( Suub auch in


Sub umändern (habe das nur hier wegen der Darstellung gemacht)), dann hängt er sich auf!!

Anzeige
AW: VBE-Problem
05.05.2009 08:33:02
Tino
Hallo,
bei mir geht’s so.
Sub fu_Code_erstellen()
Dim scode As String
Dim sTabName As String
Dim myWB As Workbook

scode = _
"

Private Sub CommandButton1_Click()"
& vbLf & _ "Dim strSheetname, strTausch As String" & vbLf & _ "Dim intStringlaenge As Integer" & vbLf & _ "Dim lngHR, lngProg As Long" & vbLf & vbLf & _ "strSheetname = ActiveSheet.Name 'speichern des Sheetnamen in Stringvariable""" & vbLf & _ "intStringlaenge = Len(ActiveSheet.Name) 'länge des namens feststellen" & vbLf & vbLf & _ "lngHR = ActiveSheet.Range(""E6"").Value + ActiveSheet.Range(""J6"").Value" & vbLf & _ "lngProg = ActiveSheet.Range(""E6"").Value + ActiveSheet.Range(""K6"").Value" & vbLf & vbLf & _ " If Month(ActiveSheet.Range(""J1"").Value) < 9 Then 'beiMonaten unter 10, die 0 davor setzen" & vbLf & _ " strTausch = ""0"" & Month(ActiveSheet.Range(""J1"").Value) + 1 & ""-09""" & vbLf & " Else" & vbLf & _ " strTausch = Month(ActiveSheet.Range(""J1"").Value) + 1 & ""-09""" & vbLf & " End If" & vbLf & "" & vbLf & _ "Mid(strSheetname, intStringlaenge - 4, 6) = strTausch 'string für neuen Monat ä" & vbLf & _ "ActiveSheet.Name = strSheetname" & vbLf & vbLf & _ "ActiveSheet.Range(""J1"").Value = DateSerial(2009, Month(ActiveSheet.Range(""J1"").Value) + 2, 1) - 1" & vbLf & vbLf & _ "ActiveSheet.Range(""L6"").Value = lngHR" & vbLf & _ "ActiveSheet.Range(""M6"").Value = lngProg" & vbLf & vbLf & _ "End Sub

" Set myWB = ActiveWorkbook sTabName = myWB.ActiveSheet.CodeName With myWB.VBProject.VBComponents(sTabName).CodeModule .AddFromString scode End With End Sub


Gruß Tino

Anzeige
AW: VBE-Problem
05.05.2009 08:51:03
Fischer
Ich gehe davon aus, das auch mein Code bei dir Funktioniert!
AW: VBE-Problem
05.05.2009 09:02:42
Tino
Hallo,
nein hat nicht funktioniert (xl2007), im Gegenteil die ausführende Datei wurde so stark beschädigt, dass ich diese nicht mehr öffnen konnte, nach dem Excel ein Problem festgestellt hatte und komplett geschlossen wurde.
Was ich noch besser finde, schreibe Deinen Code in ein separates Modul und hole den Code als String von dort.
Der Vorteil, man kann den Code sauber schreiben und im String sich keine Gedanken um
Anführungsstriche und Zeilenumbrüche zu machen, die werden im automatisch gesetzt.
Beispiel, der Code befindet sich hier im Modul2
Dies habe ich jetzt bestimmt 10 mal wiederholt, ohne dass kleinste Problem.
Sub fu_Code_erstellen()
Dim scode As String
Dim mySH As Worksheet
Dim myWB As Workbook

'der Code wird hier vom Modul2 geholt. 
With ThisWorkbook.VBProject.VBComponents("Modul2").CodeModule
 scode = .Lines(1, .CountOfLines)
End With

    Set myWB = ActiveWorkbook
    Set mySH = myWB.Worksheets(1)
    
    With myWB.VBProject.VBComponents(mySH.CodeName).CodeModule
       .DeleteLines 1, .CountOfLines
       .AddFromString scode
    End With

End Sub


Gruß Tino

Anzeige
AW: VBE-Problem
05.05.2009 09:13:20
Fischer
Ich habe den gleichen Fehler schon mal als Post im Forum gefunden :
https://www.herber.de/forum/archiv/936to940/t936319.htm
Leider gab es auch hier nicht die gewünschte Lösung. Jedoch weiß ich genau an Welcher Stelle im Code sich bei mir Excel verabschiedet!! Und zwar wenn ich
lngLineNum = .CreateEventProc("Click", "CommandButton1")
oder
.insertlines 2 , "Private Sub CommandButton1_Click()"
Also immer dann wenn ich eine ereignisprozedur erstelle.
AW: VBE-Problem
05.05.2009 09:29:05
Tino
Hallo,
bei mir kommt bei Deinem Code immer dies.
Userbild
Mein Beispiel läuft ohne Probleme.
Gruß Tino
Anzeige
noch was...
05.05.2009 09:33:16
Tino
Hallo,
, führe den Code nicht in Einzelschritten aus (Taste F8), lass ihn automatisch laufen.
Gruß Tino

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige