ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
123
返回列表 发新帖
楼主: WNRLXF

[求助]如何通过一个工作簿的VBA对新生成的工作簿添加VBA代码?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-7-22 09:32 | 显示全部楼层
hiyou 发表于 2014-7-22 09:16
赋值部分,前面两个标红的错句给你示例,最后一个自已试试.
就是在引号部分断开,用 chr(34) & "内容" & chr( ...

朋友,谢谢你方法,但还有没有其它的方法啊,因为我定义的数组BJ = Array("3001", "3002", "3003", "3004", "3005", "3006", "3007", "3008", "3009", "3010", "3011")特别长,这里我省略了好多元素,实际上有好几十个元素,如果每个元素都用strproc = strproc & vbCrLf & Chr(34) & 3005 & Chr(34) & ","的话,那每个数组就得几十行,而且我不只一个数组,总共有4个数组,总共有200多元素...
不管怎样还是非常感谢你耐心详细的讲解,谢谢....!

TA的精华主题

TA的得分主题

发表于 2014-7-22 11:31 | 显示全部楼层
快捷的方法是有的,把你的VB模块代码做成一个文本文件,然后在VBA中打开这个文件读进去赋值给一个字符变量,就是你那个strProc什么的
这样做的好处是没那么烦琐转代码,缺点是普通的算法缺乏安全性,不过VBA本身就是脚本式,大部分同学都不在乎安全性就是。

另一个简单的方法是从工作表——比如sheet1.rang("a1")之类读出内容,你把代码写到那个单元格。
麻烦的地方一是工作表安全性(用户打开工作表会看到,你还得考虑怎么锁定或隐藏),另外呢在单元格打回车换行需设定一下,操作时得用ALT+ENTER之类,要么就粘贴上去

上传一个附件,两种方法都做了示范,里面有两个文件,除了XLS,还有一个TXT用来读取。


读出代码.rar

9.7 KB, 下载次数: 54

TA的精华主题

TA的得分主题

发表于 2014-7-22 11:37 | 显示全部楼层
打开信任VBA的办法:
  1. Sub test()

  2.     Dim oWshell
  3.     Set oWshell = CreateObject("WScript.Shell")
  4.         
  5.         oWshell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office" & Application.Version & "\Excel\Security\AccessVBOM", 1, "REG_DWORD"
  6.         oWshell.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Office" & Application.Version & "\Excel\Security\AccessVBOM", 1, "REG_DWORD"


  7. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-7-22 14:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hiyou 发表于 2014-7-22 11:31
快捷的方法是有的,把你的VB模块代码做成一个文本文件,然后在VBA中打开这个文件读进去赋值给一个字符变量,就 ...

朋友谢谢你的回复,我还想请教个问题,关于checkbox的。我录制了一段添加checkbox的宏,当我按下宏的快捷键时当前工作表中就会添加一个checkbox,但此checkbox并没有事件代码,每次还得手动为其添加我已编写好的事件代码。
如何改这个录制的宏当,当我按下宏的快捷键时,checkbox添加后自动带上我编写好的事件代码...?
以下就是我添加checkbox的宏代码。
    Set BeiJ = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
        DisplayAsIcon:=False, Left:=409.5, Top:=0, Width:=30, Height:=19.5)
    With BeiJ
        .Object.Value = True
        .Object.BackColor = &HFFFF&
        .Object.Caption = "BJ"
        '.Object.(Name) = "BJ"
    End With


我为其编写的事件代码如下:
Private Sub checkbox1_Click()
    Dim BJ, i&
    On Error Resume Next
    BJ = Array("3001", "3002", "3003", "3004", "3005", "3006", "3007", "3008", "3009", "3010", "3011", "3012", "3013", "3014", "3015", "3016", "3018", "3019", "3020", "3021", "6202", "6224", "6230", "6232", "6233", "6234", "6236", "6237", "6238", "6240", "6241", "6242", "6243", "6244", "6245")
    If CheckBox1.Object.Value = True Then
        For i = 1 To UBound(BJ)
            With ActiveSheet.PivotTables("PivotTable1").PivotFields("T")
                .PivotItems(BJ(i)).Visible = True
            End With
        Next i
    Else
        For i = 1 To UBound(BJ)
            With ActiveSheet.PivotTables("PivotTable1").PivotFields("T")
                .PivotItems(BJ(i)).Visible = False
            End With
        Next i
    End If
End Sub


TA的精华主题

TA的得分主题

发表于 2014-9-19 16:00 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-27 06:07 , Processed in 0.042370 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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