广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 3738 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
qoo98756
个人头像
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x1 鲜花 x13
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[Basic][求助] 搜GOOGLE一个晚上了 关于巨集的问题
小弟不才

最近在改一个程式

关于Word巨集的 如何能让巨集做 ..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容



献花 x0 回到顶端 [楼 主] From:台湾硕网网路娱乐股份有限公司 | Posted:2011-06-30 07:26 |
ebolaman 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖

级别: 副版主 该用户目前不上站
版区: 程式设计
推文 x38 鲜花 x458
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

不管是巨集(Macros)的模组(.bas)还是文件的模组

只要加入 Sub main 即可,接着用 Sub main 去呼叫你想要的 程序或函数即可


Tips : 在 Word 2003 里面,点工具列右键 >> Visual Basic 这样编辑会比较快


复制程式
Sub main()

  MsgBox "testing"

End Sub

你可以再详细描述一点


My BOINC stats :

献花 x0 回到顶端 [1 楼] From:台湾宽频通讯顾问股份有限公司 | Posted:2011-06-30 08:42 |
qoo98756
个人头像
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x1 鲜花 x13
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

抱歉 我还是不太懂...

能不能请您帮小弟做一个范本 借我参考...

Sub main()

  MsgBox "testing"

End Sub

这串程式 我要直接贴我的巨集放在?

还有 我VB是想做成一个按键 然后启动 我的巨集

抱歉 问题有点多... 有请高手包我解答 我会很感激你的...


献花 x0 回到顶端 [2 楼] From:台湾硕网网路娱乐股份有限公司 | Posted:2011-06-30 21:22 |
ebolaman 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖

级别: 副版主 该用户目前不上站
版区: 程式设计
推文 x38 鲜花 x458
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

啊啊,抱歉,我误会了你的意思

我以为你是在说 Word 里面的巨集




因为程式都必须要 "程序进入点",所以如果你的程式没有 表单(Form) 之类的东西

只剩模组的话,就要在模组里面加一个 主程序 Sub main 来当作起始点

就像 C++ Console的 由 int main() 来起始一样



你遇到的是这个吧





只要加入 Sub main() 即可解决,找一个空白的地方贴上即可





范例程式码 (只有一个 .bas ,在此模组 .bas 中):
复制程式
Option Explicit

Public Sub main()

  Dim d As Double
  
    d = calc_factorial(5)
    
    MsgBox d '计算 5! = 5*4*3*2*1

End Sub

Public Function calc_factorial(ByRef max As Double) As Double

  Dim d As Double
  
    calc_factorial = 1
    For d = 2 To max
      calc_factorial = calc_factorial * d
    Next d

End Function




但是你的意思是不是要做出一个 程式(有表单,互动式的那种)

那么就要加入一个表单,用表单的程序来呼叫 .bas 里面的函数才行了


专门在 Word 上执行的巨集有些到 VB 都无法执行,大概只能用一些单纯资料转换的函数了


[ 此文章被ebolaman在2011-07-01 00:32重新编辑 ]

此文章被评分,最近评分记录
财富:50 (by 三仙) | 理由: ^^ 因为您的参与,让程式设计更容易!!


My BOINC stats :

献花 x1 回到顶端 [3 楼] From:台湾宽频通讯顾问股份有限公司 | Posted:2011-07-01 00:04 |
qoo98756
个人头像
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x1 鲜花 x13
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用 ebolaman 于 2011-07-01 00:04 发表的 : 到引言文
啊啊,抱歉,我误会了你的意思
我以为你是在说 Word 里面的巨集



因为程式都必须要 "程序进入点",所以如果你的程式没有 表单(Form) 之类的东西
.......

谢谢你 抱歉欧

我vb6还不是很熟= =

我是想做成这种



按GO!就执行我的.bas

尽量说简单一点 我大脑有点转不太过来 拍谢= =


献花 x0 回到顶端 [4 楼] From:台湾硕网网路娱乐股份有限公司 | Posted:2011-07-01 06:08 |
ebolaman 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖

级别: 副版主 该用户目前不上站
版区: 程式设计
推文 x38 鲜花 x458
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

恩,这样就要用表单来设计了

我试做了一个 VB6 专案 : Run macros



可以以特定 巨集名称 批次执行大量 Word 文件,请参考

但是你将 NewMacros 从 Word 抽取出来了吧,其实不需要那个模组

将 巨集 直接储存在 Word 文件里面 即可从 外部执行




底下附的档案解压缩后,到 [Program] 找已经编译的程式 Run macros.exe

可以将 [VB6 Project]\[Documents] Test\testing.doc  这个我做的测试文件拖曳到 程式里面 试试看





由于巨集包含在 testing.doc 里面,因此只需要特定的巨集名称就能执行大量的 文件

唯一的缺点是 巨集名称是固定的 (底下的程式设定为 macro1 ) ,我有看到其他人能取得 文件内 巨集的程式码

但我刚刚测试,他说不允许用外部程式编辑,我可能能力不足,也只好作罢



VB6 专案在 [VB6 Project] 内,可以自行编辑


要注意,里面的三个模组都是程式本身自行使用的,并非抽取出来的巨集

核心程式码: (位于 mod_macros 模组)

复制程式
Public Sub run_macros_prebuild()
  
  On Error GoTo Err1
  
  Set objapp = CreateObject("Word.Application")
  
  With objapp
    .Visible = set_appvisible
  End With
  
  appstatus = 1

Exit Sub
Err1:

  MsgBox "发生未知错误,无法建立 Word 元件 " & vbNewLine & Err.Description

End Sub

Public Sub run_macro(ByRef name As String, ByRef dir As String, ByRef outputdir As String)
  
    If appstatus = 0 Then run_macros_prebuild
  
  On Error GoTo Err1
  
  With objapp
    .Documents.Open FileName:=dir
    
    .Run name 'Run macros
    
      With objapp.ActiveDocument.Content.Find
        'Add something here
      End With
    
    .ActiveDocument.SaveAs force_dir(Replace(outputdir, "%Appdir%", App.Path)) & get_filename(dir)
    .Documents.Close
    
  End With

Exit Sub
Err1:

  MsgBox "发生未知错误 " & vbNewLine & Err.Description

End Sub


最主要的程式码是这一行,建立 Word 的元件

Set objapp = CreateObject("Word.Application")


接着就能用 objapp 去控制 Word 的周遭环境
举凡 开启档案、关闭档案、控制 Word视窗、控制文件内容等 都能以 objapp 的成员来控制

可以上网搜寻 Word.Application, VB 控制 Word 等关键词来找更详细的文章





另外我参考的一些网页 (也附在 [VB6 Project]\[References]\Word.Application.txt ):


http://tw.knowledge.yahoo.com/quest...d=1508050802551

http://phorum.study-area.org...opic=34203.0

http://tw.knowledge.yahoo.com/quest...d=1508051901894

http://blog.tenyi.com/2007/...dmacro.html


本帖包含附件
zip Run_macros.rar   (2022-06-09 14:18 / 56 KB)  
说明: Run_macros | Filetype : RAR | CRC-32 : AF13FC22
下载次数:3


[ 此文章被ebolaman在2011-07-01 09:42重新编辑 ]

此文章被评分,最近评分记录
财富:50 (by 三仙) | 理由: ^^ 因为您的参与,让程式设计更容易!!


My BOINC stats :

献花 x1 回到顶端 [5 楼] From:台湾宽频通讯顾问股份有限公司 | Posted:2011-07-01 09:13 |
qoo98756
个人头像
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x1 鲜花 x13
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用 ebolaman 于 2011-07-01 09:13 发表的 : 到引言文
恩,这样就要用表单来设计了
我试做了一个 VB6 专案 : Run macros

可以以特定 巨集名称 批次执行大量 Word 文件,请参考
但是你将 NewMacros 从 Word 抽取出来了吧,其实不需要那个模组
.......

高手 WOW

不能做成按GO!直接执行巨集吗~"~

因为我拿到别台电脑用时 那台电脑没装WORD


献花 x0 回到顶端 [6 楼] From:台湾硕网网路娱乐股份有限公司 | Posted:2011-07-02 06:15 |
ebolaman 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖

级别: 副版主 该用户目前不上站
版区: 程式设计
推文 x38 鲜花 x458
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用 qoo98756 于 2011-07-02 06:15 发表的 : 到引言文


高手 WOW

不能做成按GO!直接执行巨集吗~"~

因为我拿到别台电脑用时 那台电脑没装WORD



没装 Word 将会造成很大的困扰,并非不可行

因为巨集的原先 "执行环境" 是在 Word 下,没有了 Word,那么 CreateObject("Word.Application") 就当场失效

后面也不能做任何事情


这么一来就只能自行解析 doc 文件,有些像是 免费软体 OpenOffice, Total Commander, Free Opener 都能自行开启 doc 文件

这个对我而言太难,而且还要执行巨集这是难上加难


My BOINC stats :

献花 x0 回到顶端 [7 楼] From:台湾宽频通讯顾问股份有限公司 | Posted:2011-07-02 12:17 |
qoo98756
个人头像
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x1 鲜花 x13
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用 ebolaman 于 2011-07-02 12:17 发表的 : 到引言文




没装 Word 将会造成很大的困扰,并非不可行

因为巨集的原先 "执行环境" 是在 Word 下,没有了 Word,那么 CreateObject("Word.Application") 就当场失效

后面也不能做任何事情


这么一来就只能自行解析 doc 文件,有些像是 免费软体 OpenOffice, Total Commander, Free Opener 都能自行开启 doc 文件

这个对我而言太难,而且还要执行巨集这是难上加难

但是我的巨集是用WORD的VB写的

照理说 我把程式码换到VB6在+上一个表单应该就可以了啊~"~


献花 x0 回到顶端 [8 楼] From:台湾硕网网路娱乐股份有限公司 | Posted:2011-07-03 01:26 |
ebolaman 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖

级别: 副版主 该用户目前不上站
版区: 程式设计
推文 x38 鲜花 x458
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用 qoo98756 于 2011-07-03 01:26 发表的 : 到引言文


但是我的巨集是用WORD的VB写的

照理说 我把程式码换到VB6在+上一个表单应该就可以了啊~"~


原来你是要这样做

那么在有安装 Word 的电脑上,ActiveDocument 只要转换成 objapp 的成员就 OK 了


你可以将其中一小段 巨集 程式码贴上来看看

如果我想的没错的话,只要在模组加上一个程序及几个变数即可


你认为不管 Word 还是 VB,都是用相同的程式码

问题是在 Word 制作的巨集 通常都是控制 Word 环境的东西 (所以你最好把一小段巨集贴上来看看,免得我不知道如何去修改)

VB6 预设里面可没有 ActiveDocument 的控制项,所以直接将 巨集从 Word 拖到 VB6 里面就直接执行是不可行的







[ 此文章被ebolaman在2011-07-04 18:01重新编辑 ]


My BOINC stats :

献花 x0 回到顶端 [9 楼] From:台湾宽频通讯顾问股份有限公司 | Posted:2011-07-03 06:32 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.066987 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言