ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-6-2 22:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
同时看了2个同样类型的案例,上个保存了就不行,http://club.excelhome.net/thread-847204-1-1.html

初次接触,了解不深,下次耐心看,用心记。这个不错,感谢各位高手。

TA的精华主题

TA的得分主题

发表于 2013-8-27 17:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hiyou 发表于 2007-10-11 13:19
又发了一次,重复了....多余的编辑掉,留下新加的一点点注释注意黑体的两行,VBCOMPONENTS(1)是取第一个模块 ...

请教,我在练习把代码  x.CodeModule.InsertLines 3, "strMsg=" & Chr(34) & "hello,this is " & mybook.Name & Chr(34) 写入所打开的文件时出错,请问怎样解决(新建工作薄没有问题)。另外,怎样一次性把同样代码写入一个文件夹中的所有文件中?

TA的精华主题

TA的得分主题

发表于 2013-8-27 16:30 | 显示全部楼层
正需要这样的功能,多谢讲解

TA的精华主题

TA的得分主题

发表于 2013-8-27 15:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-7-21 15:40 | 显示全部楼层
本帖最后由 bearhee 于 2014-7-21 15:41 编辑
hiyou 发表于 2007-10-12 23:03
AddFromString并不确定插入的位置,它只认定一个字符串,在插入"dim a as string"这个声明时,它自作主张把插入 ...


我也按照你的方法这样写,但为何报错啊,其中显红的几行代码都报错,这是啥问题啊..? QQ截图20140721153844.jpg

TA的精华主题

TA的得分主题

发表于 2014-7-21 15:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
bearhee 发表于 2014-7-21 15:40
我也按照你的方法这样写,但为何报错啊,其中显红的几行代码都报错,这是啥问题啊..?

没有附件,只看图的话....

你自已注意一下,报错的都是引号中带引号的语句。
VBA对字符串常量的界定以双引号为标识,你可以这么写
  1. strX="aaa'b'"   '<==字符串是aaa'b',里面用单引号
复制代码
但是呢这样写就出错了
  1. strX="aaa"b""  ‘〈==字符串是aaa"b"
复制代码
为什么会错,是因为VBA把后面的表达式识别成
"aaa"  和   b""
在赋值语法上不正确。

要把双引号包含进去,得到   aaa"b"  
需用类似下面的语法
strX="aaa" & chr(34) & "b" & chr(34)   '<==”aaa“的引号是代码识别的引号,chr(34)就是转换的引号,VBA不会认错

以上,领会一下,再看你自已标红的地方

TA的精华主题

TA的得分主题

发表于 2014-7-21 16:17 | 显示全部楼层
hiyou 发表于 2014-7-21 15:56
没有附件,只看图的话....

你自已注意一下,报错的都是引号中带引号的语句。

QQ截图20140721161538.jpg 非常感谢你的提示,对我很有启发,但我按照你的意思改完之后还是报错出来了啊,麻烦帮我看看是不是哪又出错了..谢谢,不甚感激..

TA的精华主题

TA的得分主题

发表于 2014-7-21 16:40 | 显示全部楼层
你用图片......没法粘贴代码真辛苦,

看看你的第一个chr(34) &,被双引号包进去了 &和CHR(34)都没有解析,当成普通字符串 *_*  比如下面的

strX="a&chr(34)&b"                ’〈==得到的字串是 a&chr(34)&b
strX="a" & chr(34) &  "b"        ’〈==得到的字串是 a"b

每一对引号把中间的字符围起来识别,在各个成对引号中间的 &、chr(34) 才是代码
你再看看自已的    pivotables(chr(34)&
真正的连接应该是下面的形式,请再作理解
"xxxx"  & chr(34)  & "oooo"  
"xxxx" + chr(34)  + "oooo"     ‘<==这种不是很推荐,有数字时容易搞混

TA的精华主题

TA的得分主题

发表于 2014-7-21 16:42 | 显示全部楼层
hiyou 发表于 2014-7-21 15:56
没有附件,只看图的话....

你自已注意一下,报错的都是引号中带引号的语句。

Sub addcode()
Set x = ActiveWorkbook.VBProject.VBComponents(1)
strProc = "Private Sub checkbox1_Click()"
strProc = strProc & vbCrLf & "Dim BJ()"
strProc = strProc & vbCrLf & "Dim i As Intege"
strProc = strProc & vbCrLf & "BJ = Array("3001", "3002", "3003", "3004", "3005", "3006", "3007", "3008", "3009", "3010", "3011")"
strProc = strProc & vbCrLf & "On Error Resume Next"
strProc = strProc & vbCrLf & "If CheckBox1.Object.Value = True Then"
strProc = strProc & vbCrLf & "        For i = 1 To UBound(BJ)"
strProc = strProc & vbCrLf &"            With ActiveSheet.PivotTables("PivotTable1").PivotFields("T")"
strProc = strProc & vbCrLf & "                .PivotItems(BJ(i)).Visible = True"
strProc = strProc & vbCrLf & "            End With"
strProc = strProc & vbCrLf & "        Next i"
strProc = strProc & vbCrLf & "    Else"
strProc = strProc & vbCrLf & "        For i = 1 To UBound(BJ)"
strProc = strProc & vbCrLf &"            With ActiveSheet.PivotTables("PivotTable1").PivotFields("T")"
strProc = strProc & vbCrLf & "                .PivotItems(BJ(i)).Visible = False"
strProc = strProc & vbCrLf & "            End With"
strProc = strProc & vbCrLf & "        Next i"
strProc = strProc & vbCrLf & "    End If"
strProc = strProc & vbCrLf & "End Sub"
x.CodeModule.AddFromString strProc
End Sub

朋友,请教下我上面代码中的双引号应该怎么处理,才能不报错...?


TA的精华主题

TA的得分主题

发表于 2014-7-22 09:16 | 显示全部楼层
本帖最后由 hiyou 于 2014-7-22 09:18 编辑

赋值部分,前面两个标红的错句给你示例,最后一个自已试试.
就是在引号部分断开,用 chr(34) & "内容" & chr(34) 代替
  1. strproc = "Private Sub checkbox1_Click()"
  2. strproc = strproc & vbCrLf & "Dim BJ()"
  3. strproc = strproc & vbCrLf & "Dim i As Intege"
  4. strproc = "Private Sub checkbox1_Click()"
  5. strproc = strproc & vbCrLf & "Dim BJ()"
  6. strproc = strproc & vbCrLf & "Dim i As Intege"

  7. strproc = strproc & vbCrLf & "BJ = Array("
  8. strproc = strproc & vbCrLf & Chr(34) & 3001 & Chr(34) & ","
  9. strproc = strproc & vbCrLf & Chr(34) & 3002 & Chr(34) & ","
  10. strproc = strproc & vbCrLf & Chr(34) & 3003 & Chr(34) & ","
  11. strproc = strproc & vbCrLf & Chr(34) & 3004 & Chr(34) & ","
  12. strproc = strproc & vbCrLf & Chr(34) & 3005 & Chr(34) & ","
  13. strproc = strproc & vbCrLf & Chr(34) & 3006 & Chr(34) & ","
  14. strproc = strproc & vbCrLf & Chr(34) & 3007 & Chr(34) & ","
  15. strproc = strproc & vbCrLf & Chr(34) & 3008 & Chr(34) & ","
  16. strproc = strproc & vbCrLf & Chr(34) & 3009 & Chr(34) & ","
  17. strproc = strproc & vbCrLf & Chr(34) & 3010 & Chr(34)

  18. strproc = strproc & vbCrLf & "On Error Resume Next"
  19. strproc = strproc & vbCrLf & "If CheckBox1.Object.Value = True Then"
  20. strproc = strproc & vbCrLf & "        For i = 1 To UBound(BJ)"

  21. strproc = strproc & vbCrLf & "            With ActiveSheet.PivotTables("
  22. strproc = strproc & Chr(34) & "PivotTable1" & Chr(34) & ").PivotFields("
  23. strproc = strproc & Chr(34) & "T" & Chr(34) & ")"

  24. MsgBox strproc  '<==这个句子是我加上去的,弹出一个框显示结果,你可以检查
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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