Programmatisch code toevoegen opent VBA, en dat wil ik niet....maar hoe ?

Status
Niet open voor verdere reacties.

phloks

Nieuwe gebruiker
Lid geworden
15 dec 2017
Berichten
3
Hi,

Ben nieuw op dit forum en ik hoop dat iemand me in de goede richting kan duwen.

Ik heb een Excel met veel macro's. Een knop op 1 van de eerste sheets maakt alle andere sheets aan
die ik nodig heb, en er wordt een subroutine aangeroepen om programmatisch code toe te voegen aan een sheet code blok.

De sub is als volgt:
Code:
Sub make_code()

Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim LineNum As Long
Const DQUOTE = """"

Set VBProj = ActiveWorkbook.VBProject
Set VBComp = VBProj.VBComponents(Sheets("Laatste 16").CodeName)
Set CodeMod = VBComp.CodeModule

With CodeMod
  LineNum = .CreateEventProc("Change", "Worksheet")
  LineNum = LineNum + 1
  .InsertLines LineNum, "  Dim r As Range, c As Range"
  LineNum = LineNum + 1
  .InsertLines LineNum, "  Set r = Intersect(Target, Range(" & DQUOTE & "H20:H22" & DQUOTE & "))"
  LineNum = LineNum + 1
  .InsertLines LineNum, "  If Not r Is Nothing Then"
  LineNum = LineNum + 1
  .InsertLines LineNum, "    For Each c In r"
  LineNum = LineNum + 1
  .InsertLines LineNum, "      If Len(c.Value) = 0 Then"
  LineNum = LineNum + 1
  .InsertLines LineNum, "        Call DropDownListToDefault"
  LineNum = LineNum + 1
  .InsertLines LineNum, "      End If"
  LineNum = LineNum + 1
  .InsertLines LineNum, "    Next c"
  LineNum = LineNum + 1
  .InsertLines LineNum, "  End If"
End With

Set VBProj = Nothing
Set VBComp = Nothing
Set CodeMod = Nothing

End Sub

Dit doet precies wat ik wil, maar op het moment dat de sub wordt aangeroepn wordt automatisch VBA (de macro editor zeg maar) geopend.
Dit gebeurt ook als ik alleen het Excel workbook heb geopend.
Ik kan echter niet achterhalen waar en of en hoe ik kan voorkomen dat VBA wordt geopend als dit stukje code runt.

Heeft iemand hier een idee ?
Alvast bedankt,

Hans
 
na
Code:
End With
invoegen
Code:
VBProj.VBE.MainWindow.Visible = False
 
Waarom niet een Workbook_SheetChange routine in dat document?
Dan hoef je helemaal geen event routine per nieuw blad toe te voegen
 
Dank u....

na
Code:
End With
invoegen
Code:
VBProj.VBE.MainWindow.Visible = False

Dat was 'm !
Ik had het bijna goed....i.p.v. VBProj had ik VBComp staan. Klaagt ie niet over, maar dan werkt het ook niet. :shocked:

Nu wel...
Thanks !
 
Waarom niet een Workbook_SheetChange routine in dat document?
Dan hoef je helemaal geen event routine per nieuw blad toe te voegen

OK.
Ik genereer alle sheets mbv VBA, ook de sheet waar het stukje code aan moest worden toegevoegd.
Ben er dus van uit gegaan dat dat niet anders kon, omdat ik me niet heb gerealiseerd dat ik ook op workbook niveau idd een stukje code kan zetten.
Is wel makkelijker....

Thanks voor de tip !
 
Ik ben het helemaal met Edmoor eens.

Had je hier al eens gekeken ?

http://www.snb-vba.eu/VBA_Excel_VBproject.html#L_3.4.3.5

Code:
Sub M_snb()
   c00 = "  If not Intersect(Target, Range(""H20:H22"")) is nothing then|    For each it in Intersect(Target, Range(""H20:H22""))|      if it="""" then DropDownListToDefault|    Next|  End If"

   With ActiveWorkbook.VBProject.VBComponents(Sheets(Sheets.Count).CodeName).CodeModule
      .insertlines .CreateEventProc("Change", "Worksheet") + 1, Replace(c00, "|", vbCr)
   End With
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan