ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] flash和office vba 交互问题的解决方案

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-5-24 23:03 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:媒体交互应用
ldhyob大侠老早以前发表过“借助FLASH技术美化VBA操作界面”(excelhome中:http://club.excelhome.net/viewth ... hlight=flash&page=1,officefans中:http://www.officefans.net/cdb/viewthread.php?tid=15539&highlight=%BD%E8%D6%FAFLASH%BC%BC%CA%F5%C3%C0%BB%AFVBA%B2%D9%D7%F7%BD%E7%C3%E6)的文章,
让OFFCE vba编程界面得到了很好的改观。
但是FLASH PLAYER8之后的版本和VBA交互往往不成功。问题根源就是Flash的FSCommand()函数向vba发消息VBA接收不到。网上无数的网友都为这个问题困惑。一直以来没有这方面的需求,就没有去好好琢磨。最近由于工作中需要用到这方面的东西,所以抽空学习并试验了一下,FSCommand函数传递信息问题,引起的原因是:flash9和flash10的安全设置问题。
解决这个问题,我总结了一下有如下几个种解决方案:
方法1:通过flashplayer官方网站在线修改“全局安全设置”,
链接为:http://www.macromedia.com/suppor ... ings_manager04.html
在其中设置:“全局安全性设置”面板中选择“始终允许”(默认方式是始终询问)
未命名.JPG
这种方式设置的好处是:可以保证不出错
这种方式设置的坏处是:比较麻烦,必须要上网才能修改。另外设置成“始终允许”存在一定安全隐患(当然这里也能修改信任位置,但总觉得比较麻烦)。
方法2:使用手动修改或者bat批处理方式设置
建立批处理bat文件如下:
echo off
cls
echo 设置相关运行环境
pause
c:
cd %windir%\system32\Macromed\Flash
md FlashPlayerTrust
cd FlashPlayerTrust
echo C:\ >myTrustFiles.cfg
cd %userprofile%\Application Data\Macromedia\Flash Player\#Security
md FlashPlayerTrust
cd FlashPlayerTrust
echo C:\ >myTrustFiles.cfg
echo 设置完成。
将上述代码放到bat文件中,双击自动运行后即可
这样做,就必须要单独一个bat文件,往往使用起来不方便。于是有了方法3
方法3:通过VBA程序自动处理
在thisworkbook中放入如下代码
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub myflashTrustFiles_creater()
    Dim systemdisk As String
    systemdisk = GetSysDir()
    Dim yyy, a As Object
    Set yyy = CreateObject("Scripting.FileSystemObject")
    If yyy.FolderExists(systemdisk & "\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust") = True Then yyy.DeleteFolder systemdisk & "\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust"
    yyy.CreateFolder (systemdisk & "\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust")
    If yyy.FileExists(systemdisk & "\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust\myTrustFiles.cfg") = True Then
        Kill systemdisk & "\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust\myTrustFiles.cfg"
    End If
    Set yyy = CreateObject("Scripting.FileSystemObject")
    Set a = yyy.CreateTextFile(systemdisk & "\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust\myTrustFiles.cfg", True)
    a.WriteLine (systemdisk & "\")
    a.Close
    If yyy.FolderExists(systemdisk & "\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust\FlashPlayerTrust") = True Then yyy.DeleteFolder systemdisk & "\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust\FlashPlayerTrust"
    yyy.CreateFolder (systemdisk & "\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust\FlashPlayerTrust")
   
    If yyy.FileExists(systemdisk & "\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust\FlashPlayerTrust\myTrustFiles.cfg") = True Then
        Kill systemdisk & "\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust\FlashPlayerTrust\myTrustFiles.cfg"
    End If
    Set yyy = CreateObject("Scripting.FileSystemObject")
    Set a = yyy.CreateTextFile(systemdisk & "\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust\FlashPlayerTrust\myTrustFiles.cfg", True)
    a.WriteLine (systemdisk & "\")
    a.Close
    Set yyy = Nothing
    Set a = Nothing
End Sub
Private Function GetSysDir() As String
    Dim sSave     As String
    Dim Ret     As Long
    sSave = Space(255)
    Ret = GetSystemDirectory(sSave, 255)
    GetSysDir = Left$(sSave, 2)
End Function
然后在Workbook_Open中调用即可,即是插入如下代码:
    Call myflashTrustFiles_creater
附件:
方法3-程序自动处理.rar (115.73 KB, 下载次数: 995)
方法4:使用webbrowser控件
这种方法是
通过webbrowser控件方式调用swf文件,
其中flash点击按键弹出窗口:
on (release) {
geturl("javascript:openwindow(’’http://www.webjx.com’’,’’’’,’’toolbars=no,location=no,scrollbars=no,status=no,resizable=no,width=500,height=500’’)")
}
然后在vba中通过BeforeNavigate2事件获得该url地址并分析处理,得到传递消息的目的;
附件(这是直接用了网上一位朋友的东西)
方法4——使用webbrowser控件.rar (20.44 KB, 下载次数: 584)
这种做法需要独立的swf文件(当然也可以在office以对象方式嵌入,然后通过vba提取出来,不过相当麻烦)


几种方法各有千秋,不过我更习惯方法三。

[ 本帖最后由 LEIZI_Y 于 2009-5-29 10:32 编辑 ]

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-5-24 23:30 | 显示全部楼层
终于解决了。

TA的精华主题

TA的得分主题

发表于 2009-5-27 14:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享,收藏了,可能以后能用到。

TA的精华主题

TA的得分主题

发表于 2009-5-27 02:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-5-27 13:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢分享,下来学习学习。

TA的精华主题

TA的得分主题

发表于 2009-5-28 06:44 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-5-28 08:52 | 显示全部楼层
怎么这么多高手啊?我什么时候也成为高手?

TA的精华主题

TA的得分主题

发表于 2009-6-1 19:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习了!!

TA的精华主题

TA的得分主题

发表于 2009-6-1 20:22 | 显示全部楼层
高手啊,我可是连基本的都还不行哦。哎,什么时候才能做出自己的东西来啊

TA的精华主题

TA的得分主题

发表于 2009-6-4 15:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
excel真是神通广大,学习了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-4 01:28 , Processed in 0.060220 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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