注册 登录
编程论坛 VFP论坛

求助:VFP的PRG中用什么语句可以执行EXCEL中宏

xs591222 发布于 2021-10-17 09:38, 2439 次点击
我的问题是这样的:
1、先在EXCEL中制作好工资表的模板,模板中有生成员工工资条的宏;
2、用VFP算好员工(有1000余人)的工资,生成下属(有上百家)单位的EXCEL工资表;
3、执行PRG时,生成一家,复制粘贴到模板表上,另存为……。
4、发送给相应的下属单位。

现在问题是:想要在粘贴到模板表后,另存为……之前,执行一下模板表上的宏,以生成员工工资条,再另存为……。这个PRG文档中要添加的语句不会写了,特来此处求教。请各位大能 赐教!谢谢!
12 回复
#2
laowan0012021-10-17 10:08
上百家下属单位的工资表,难道每一家都生成一下然后另存为?
为啥不在VFP里加工好结果直接导出上百家的工资表
EXCEL中的宏也就是工资中和各项数据的各种计算吧,这个在VFP里实现多好
#3
sdta2021-10-17 11:07
楼上说的非常正确,上百家单位,用VFP导出到EXCEL中也就几分钟吧(估计,最好上传相关数据方便测试)
#4
laowan0012021-10-17 13:52
如果是按楼主所说的那样,PRG里生成完一家之后,加个等待语句wait 或 inkey(0),EXCLE操作完了之后,按任意键继续下一家,大概就是这样
#5
xuminxz2021-10-17 17:28
似乎原始数据在VFP中,要按单位导出到不同的Excel表中。这个可以直接导出啊。如果是要通过邮件发送,只要建立地址表,可以直接发送。如果是网盘也可能直接复制到相应位置。
#6
厨师王德榜2021-10-18 14:15
参考如下代码:
程序代码:
* 注意:此方法成功的关键是用户必须允许EXCEL宏的运行。并且允许对VBA工程对象的访问。
* 假定EXCEL文档中已经有了一个叫做Sub ArrayFill()的宏.


    myexcel = CREATEOBJECT("Excel.Application")
    myexcel.DisplayAlerts = .F.  &&  不弹出警告框   
    wb = myexcel.Workbooks.open(cExlFullPath)
   

* 请确认勾选了: 可靠发行商中的 “信任对 Visual Basic 项目”的访问
myexcel.Run('ArrayFill', @arrEsj)  && @arrEsj是这个宏的参数.
        myexcel.save()   
        myexcel.quit()
        RELEASE myexcel


[此贴子已经被作者于2021-10-18 14:29编辑过]

#7
gs25367856782021-10-18 15:06
我的经验,这EXCEL中的宏,不能直接在VFP中使用,很多时候需要另外加工。
#8
吹水佬2021-10-18 15:45
如果EXCEL表模板不是自己写的,还真有点无奈。
否则,既然要用VFP来生成EXCEL表, 应该不会自找麻烦。
#9
laowan0012021-10-18 16:17
估计EXCEL模板早就有了,早先是直接在EXCEL表里做工资,后来做了VFP程序管理工资的基础数据,导出到EXCEL里然后运行宏来完成计算工作,算是进了一步。如果是这样,其实还可以再进一步,由VFP直接完成工资的计算工作
#10
xs5912222021-10-19 21:18
以下是引用sdta在2021-10-17 11:07:22的发言:

楼上说的非常正确,上百家单位,用VFP导出到EXCEL中也就几分钟吧(估计,最好上传相关数据方便测试)

企业数据都是加密的,上传了是一片乱码
#11
xs5912222021-10-19 21:23
以下是引用laowan001在2021-10-18 16:17:42的发言:

估计EXCEL模板早就有了,早先是直接在EXCEL表里做工资,后来做了VFP程序管理工资的基础数据,导出到EXCEL里然后运行宏来完成计算工作,算是进了一步。如果是这样,其实还可以再进一步,由VFP直接完成工资的计算工作


百余个EXCEL工资表是用VFP生成的。如果生成工资条,对每个E表打开执行一下宏,那就太麻烦了。

当然了,工资条也可以用VFP来生成,感觉代码有点难。而宏是以前就存在的,所以想在VFP的PRG中加个语句,调用VBA的宏。以为可以省力一点。
#12
xs5912222021-10-19 21:25
以下是引用厨师王德榜在2021-10-18 14:15:07的发言:

参考如下代码:
* 注意:此方法成功的关键是用户必须允许EXCEL宏的运行。并且允许对VBA工程对象的访问。
* 假定EXCEL文档中已经有了一个叫做Sub ArrayFill()的宏.


    myexcel = CREATEOBJECT("Excel.Application")
    myexcel.DisplayAlerts = .F.  &&  不弹出警告框   
    wb = myexcel.Workbooks.open(cExlFullPath)
   

* 请确认勾选了: 可靠发行商中的 “信任对 Visual Basic 项目”的访问
myexcel.Run('ArrayFill', @arrEsj)  && @arrEsj是这个宏的参数.
        myexcel.save()   
        myexcel.quit()
        RELEASE myexcel

感谢王大厨,我抽时间测试来着。谢谢!
#13
laowan0012021-10-20 07:49
回复 11楼 xs591222
方便的话,可以放出一些EXCEL的宏,大家帮你看看是否麻烦
1