怎么从bookmark开始执行vba 程序执行时间vba

别怕,Excel VBA其实很简单(第2版)完整版 带书签目录 中文pdf扫描版[72MB]
别怕excel vba其实很简单下载
书籍大小:71.8MB
书籍语言:简体中文
书籍类型:
书籍授权:免费软件
更新时间:
书籍类别:VBA
购买链接:
网友评分:
应用平台:
8.7MB | 简体中文
744KB | 简体中文
15MB | 简体中文
99MB | 简体中文
119MB | 简体中文
79.2MB | 简体中文
3.88MB | 简体中文
71.8MB | 简体中文
下载错误?
别怕,Excel VBA其实很简单(第2版)完整版 带书签目录 中文pdf扫描版[72MB]在VBA中调用其它程序并等待程序执行结束 | 0x24 years old engineer
› 在VBA中调用其它程序并等待程序执行结束
这两天在用Excel写一个小工具,就是把给定文件夹下的所有文件里的压缩文件解压,并根据文件名做一定规则的文件删除。
之所以选择Excel,因为这个东西必须在Windows下使用,考虑到Excel的普遍性,而且还可以方便的添加Form来做简单的界面,就选择了它。不过最根本的原因是上次用VS开发Native的Windows程序还是2005年的事情吧。
解压程序开始的时候用的是rar.exe,即标准winrar提供的命令行工具,最后发现.zip的文件不能解压缩(也许是我没找到正确的参数),反正是对rar再也没有爱了。
后来换到7zip,强烈推荐,开源,免费,文件体积小,速度快。
解压是通过Shell函数调用7z.exe,然后就进行类似Dir的操作。
问题是,测试几次后发现每次程序执行的结果都不一样。
多线程?不应该啊,VBA没那么机灵和强大吧。
而且每次断点的时候,结果都趋于正常。
想来想去最后考虑是不是Shell的问题,网上一查果然,这厮调用后立即返回一个PID,后面的VBA代码会立即执行。。。
所以,为了正确使用Shell,必须等它执行结束后才能进行自己程序后面的处理。
网上搜了下发现,至少在我测试的XP+Office2004和Windows Server2008+Office2011上没啥问题。
具体方法就是在头部加入API声明:
Private Declare Function OpenProcess Lib &kernel32& (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib &kernel32& (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib &kernel32& (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
然后在需要执行其它命令的地方像下面这样写:
PID = Shell(strRunExe, 1)
If PID && 0 Then
hProcess = OpenProcess(&H100000, True, PID)
WaitForSingleObject hProcess, -1
CloseHandle hProcess
–end–
Tagged with: , , , , , , , ,
powered byvba 执行另外程序_百度知道
vba 执行另外程序
我有一个A程序的窗口已经打开,依次按F3键、Tab键、Ctrl+V键、回车键就能达到目的,现在我想用vba代码达到同样的效果,即执行vba代码后相当于依次:激活A程序窗口——按F3键——按Tab键——按Ctrl+V键——按回车键。望哪位高手指点。
我有更好的答案
例子代码:Sub&xxx()&&&&AppActivate&&记事本&&&&&SendKeys&&{F3}{Tab}^V{enter}&End&Sub第一个语句激活窗口,你需要修改标题,第二个语句发送按键。
第一句可以的,但是第二句没有反应啊,然后我用以下代码分开试试也没反应
SendKeys &{enter}&
SendKeys &{Tab}&这是为什么
我在记事本里面执行是成功的,你查查帮助看看特殊键的写法,或者你的程序是否对这些键盘的反映有特殊限制,可以试试看发送普通按键是否成功。
我在记事本中执行也不行啊,我打开记事本,把光标放在第一行,再点别的窗口让别的窗口激活,执行第一句后,记事本窗口会顺利显示,但光标没有显示,而且我执行 SendKeys &{enter}&后,再点记事本标题栏激活后看光标也没变化,还是在第一行,这样还是不行啊,执行第一句后,怎么样能让光标出来,可能就行了
你sendkeys&&abc&看看abc显示在哪里了,可能是appactivate失败了。有的窗口标题比较特殊,可以使用PID来精准定位,例如我下面的代码测试成功:Sub&x()&&&&AppActivate&1812,&True&&&&SendKeys&&{enter}&,&TrueEnd&Sub1812是我机器记事本的PID(进程对话框查看)
执行很不稳定,每执行一次应该会显示一行“abc”Sub xx()
AppActivate 2348, True
SendKeys &a&, True
SendKeys &b&, True
SendKeys &c&, True
SendKeys &{enter}&, TrueEnd Sub执行效果:大多数显示:bc,少数为:abc,或:c再次请求你的帮助,谢谢
为您推荐:
其他类似问题
您可能关注的内容
vba的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。已解决问题
excel vba中如何等待外部程序执行结束?
浏览次数:3553
用手机阿里扫一扫
最满意答案
使用API函数SetTimer循环查询是否执行完外部程序。'1.&Copy&the&following&code&to&the&Code&window&of&Module1:Option&ExplicitDeclare&Function&SetTimer&Lib&&user32&&_(ByVal&hwnd&As&Long,&_ByVal&nIDEvent&As&Long,&_ByVal&uElapse&As&Long,&_ByVal&lpTimerFunc&As&Long)&As&LongDeclare&Function&KillTimer&Lib&&user32&&_(ByVal&hwnd&As&Long,&_ByVal&nIDEvent&As&Long)&_As&LongPrivate&Declare&Function&FindWindow&_Lib&&user32&&Alias&&FindWindowA&&_(ByVal&lpClassName&As&String,&_ByVal&lpWindowName&As&String)&_As&LongPublic&lngTimerID&As&LongPublic&BlnTimer&As&BooleanSub&TimerProc(ByVal&hwnd&As&Long,&_ByVal&uMsg&As&Long,&_ByVal&idEvent&As&Long,&_ByVal&dwTime&As&Long)iCounter&=&iCounter&+&1Call&FindAppEnd&SubSub&FindApp()'On&Error&Resume&Next&&&&Dim&path_hwnd&As&Long&&&&&&&&lpClassName&=&Space(255)&&&&nMaxCount&=&255&&&&&&&&path_hwnd&&=&FindWindow(vbNullString,&&myapp窗口名称&)&'获得窗口句柄&&&&If&path_hwnd&=&0&Then&&&&&&&&'myapp没有打开&&&&Else&&&&&&&&lngTimerID&=&KillTimer(0,&lngTimerID)&&&&&&&&If&lngTimerID&=&0&Then&&&&&&&&MsgBox&&couldn't&kill&the&timer&&&&&&&&&End&If&&&&&&&&BlnTimer&=&False&&&&&&&&'写后续程序&&&&End&IfEnd&Sub'2.&Copy&the&following&code&to&the&Code&window&of&Form1:Option&ExplicitPrivate&Sub&Command1_Click()'Starts&and&stops&the&timer.Dim&oShell&As&ObjectSet&oShell&=&CreateObject(&WSCript.shell&)ret&=&oShell.Run(&myapp&,&0,&True)If&BlnTimer&=&False&ThenlngTimerID&=&SetTimer(0,&0,&200,&AddressOf&TimerProc)If&lngTimerID&=&0&ThenMsgBox&&Timer&not&created.&Ending&Program&Exit&SubEnd&IfBlnTimer&=&TrueEnd&IfEnd&Sub
答案创立者
以企业身份回答&
正在进行的活动
生意经不允许发广告,违者直接删除
复制问题或回答,一经发现,拉黑7天
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题
扫一扫用手机阿里看生意经
问题排行榜
当前问题的答案已经被保护,只有知县(三级)以上的用户可以编辑!写下您的建议,管理员会及时与您联络!
server is ok怎么从bookmark开始执行程序 vba_百度知道
怎么从bookmark开始执行程序 vba
我有更好的答案
例子代码:Sub xxx()AppActivate &记事本&SendKeys &{F3}{Tab}^V{enter}&End Sub第一个语句激活窗口,你需要修改标题,第二个语句发送按键。
采纳率:83%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 vba 可执行程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信