Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2323|回复: 6

[已解决]不打开工作簿,用代码向类模块中写入代码?

[复制链接]
发表于 2016-6-15 22:20 | 显示全部楼层 |阅读模式
本帖最后由 乐乐2006201506 于 2016-6-18 18:12 编辑

能不能实现用VBA代码向类模块中写入代码?

下面代码可以实现用代码新增模块,能不能实现红色字体的要求呢?
Sub 新增模块()
    Dim I As Long
    Dim S As String
    On Error Resume Next
    Do
        I = I + 1
        S = ThisWorkbook.VBProject.VBComponents("新模块" & I).Name
    Loop Until Err
    ThisWorkbook.VBProject.VBComponents.Add(1).Name = "新模块" & I
End Sub
最佳答案
2016-6-18 17:21
乐乐2006201506 发表于 2016-6-17 14:46
1.能不能向模块1中插入一个完整代码?
2.能不能向已有模块1中指定位置插入一句代码?
  1. Sub 在模块1中插入过程()
  2.     Dim str$
  3.     str = "sub 测试()" & vbCrLf & "end sub"
  4.     With ThisWorkbook.VBProject.VBComponents("模块1").CodeModule
  5.         .AddFromString str
  6.     End With
  7. End Sub
  8. Sub 在模块1中插入代码()
  9.     Dim str$
  10.     With ThisWorkbook.VBProject.VBComponents("模块1").CodeModule
  11.         .InsertLines 2, "msgbox ""你好!"""
  12.     End With
  13. End Sub
复制代码
发表于 2016-6-16 09:21 | 显示全部楼层
代码如下,方法都是一样的,只是.VBProject.VBComponents.Add(2)中Add的参数要进行设置;
参数为1则为模块,2为类模块,3是窗体
  1. Sub 新建类模块()
  2.     ThisWorkbook.VBProject.VBComponents.Add(2).Name = "模4块"
  3. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-6-16 10:54 | 显示全部楼层
能不能实现用VBA代码向类模块中写入代码?谢谢!
回复

使用道具 举报

发表于 2016-6-17 11:10 | 显示全部楼层
乐乐2006201506 发表于 2016-6-16 10:54
能不能实现用VBA代码向类模块中写入代码?谢谢!

不管是像类模块,还是其他标准模块对象等插入代码请参考下列代码:
  1. Sub 在类1中插入代码()
  2.     Dim str$
  3.     str = "sub 测试()" & vbCrLf & "end sub"
  4.     With ThisWorkbook.VBProject.VBComponents("类1").CodeModule
  5.         .AddFromString str
  6.     End With
  7. End Sub
复制代码
上述代码是在类模块“类1”中插入名为“测试”的过程
回复

使用道具 举报

 楼主| 发表于 2016-6-17 14:46 | 显示全部楼层
本帖最后由 乐乐2006201506 于 2016-6-17 14:48 编辑

1.能不能向模块1中插入一个完整代码?
2.能不能向已有模块1中指定位置插入一句代码?
回复

使用道具 举报

发表于 2016-6-18 17:21 | 显示全部楼层    本楼为最佳答案   
乐乐2006201506 发表于 2016-6-17 14:46
1.能不能向模块1中插入一个完整代码?
2.能不能向已有模块1中指定位置插入一句代码?
  1. Sub 在模块1中插入过程()
  2.     Dim str$
  3.     str = "sub 测试()" & vbCrLf & "end sub"
  4.     With ThisWorkbook.VBProject.VBComponents("模块1").CodeModule
  5.         .AddFromString str
  6.     End With
  7. End Sub
  8. Sub 在模块1中插入代码()
  9.     Dim str$
  10.     With ThisWorkbook.VBProject.VBComponents("模块1").CodeModule
  11.         .InsertLines 2, "msgbox ""你好!"""
  12.     End With
  13. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-6-18 18:11 | 显示全部楼层
老司机带带我 发表于 2016-6-18 17:21

        自己修改运用起来很好,唯一一点就是不直观。谢谢您,我会和下面代码一起组合使用,有问题再向各位大师请教!
  • Sub NowModule()
  •       Dim VBC As VBComponent
  •       Set VBC = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
  •       With VBC.CodeModule
  •           If .Lines(1, 1) <> "Option Explicit" Then
  •              .InsertLines 1, "Option Explicit"
  •           End If
  •           .InsertLines 2, "Sub 选择性粘贴值()"
  •           .InsertLines 3, "Sheets.Select"
  •           .InsertLines 4, "    Cells.Copy"
  •           .InsertLines 5, "    Cells.PasteSpecial Paste:=xlPasteValues"
  •           .InsertLines 6, "    Application.CutCopyMode = False    '取消复制后边框虚线闪烁问题"
  •           .InsertLines 7, "    Sheets(""测试 (4)"").Activate"
  •           .InsertLines 8, "    Sheets(""管理 (模板) (2)"").Activate"
  •           .InsertLines 9, "    Range(""A6"").Select"
  •           .InsertLines 10, "End Sub"
  •           .AddFromString "Sub Process2()" & Chr(13) & vbTab _
  •               & "MsgBox ""这是第二个过程!""" & Chr(13) & "End Sub"
  •       End With
  •       Set VBC = Nothing
  • End Sub

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 09:24 , Processed in 0.366458 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表