ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] vb.net Excel外接程序如何打开chm帮助文档

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-6-9 09:53 | 显示全部楼层 |阅读模式
在vba中,加载宏xlam,chm帮助文档就放在加载宏xlam同一文件夹中,代码很简单:

Private Sub CommandButton3_Click()
    Application.Help ThisWorkbook.Path & "\MyHelp.chm", 1120
End Sub

其中1120是某个帮助条目在chm文档中的id。点击CommandButton3,打开chm帮助文档,并且可以自动打开相应条目的帮助,非常方便。

转到vb.net,问题就来了,加载宏成了Excel外接程序,ThisWorkbook.Path不能用了,我用Shell函数打开chm文档:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Shell("hh.exe -mapid 1120 D:\MyFolder\MyHelp.chm", AppWinStyle.NormalFocus)
End Sub

在本机点击Button3可以打开这个chm帮助,也可以自动打开相应的帮助条目,可是路径是本机的路径,无法在其他电脑上用。问题:

1. vb.net中自定义帮助文档MyHelp.chm放在哪儿?
2. 打开帮助文档的代码如何写。

请各位高手赐教,非常感谢。

TA的精华主题

TA的得分主题

发表于 2016-6-9 18:53 | 显示全部楼层
System.AppDomain.CurrentDomain.BaseDirectory

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-12 20:51 | 显示全部楼层
本帖最后由 jsz241001 于 2016-6-12 21:11 编辑

感谢excelhomesnake的回复。System.AppDomain.CurrentDomain.BaseDirectory,非常专业的回复。我用

Msgbox(System.AppDomain.CurrentDomain.BaseDirectory)

测试了一下,发现这个变量"System.AppDomain.CurrentDomain.BaseDirectory"的实际路径是:“C:\Users\Administrator\Documents\Visual Studio 2015\Projects\myprojrct\myproject\bin\Debug\”。于是我把帮助文件MyHelp.chm放在这个路径下:

“C:\Users\Administrator\Documents\Visual Studio 2015\Projects\myprojrct\myproject\bin\Debug\MyHelp.chm”

把路径写成实际路径,仍然尝试用Shell+hh.exe打开帮助文件:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Shell("hh.exe -mapid 1120 C:\Users\Administrator\Documents\Visual Studio 2015\Projects\myproject\myproject\bin\Debug\MyHelp.chm", AppWinStyle.NormalFocus)
End Sub

以上代码测试运行没有问题,可以顺利打开MyHelp.chm帮助文件(这是理所当然的)。
可是,如果用变量 "System.AppDomain.CurrentDomain.BaseDirectory"代替实际路径:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Shell("hh.exe -mapid 1120" & System.AppDomain.CurrentDomain.BaseDirectory & "MyHelp.chm", AppWinStyle.NormalFocus)
End Sub

运行时代码并没有出错,但出现帮助信息:“无法打开文件:Visual Studio 2015\Projects\myproject\myproject\bin\Debug\MyHelp.chm”,这好像是hh.exe的信息。奇怪的是以上帮助信息给出帮助文件的路径并不是完全的路径,不知原因在哪里。看excelhomesnake老兄能否帮助分析一下。再次感谢。




TA的精华主题

TA的得分主题

发表于 2016-6-13 20:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jsz241001 发表于 2016-6-12 20:51
感谢excelhomesnake的回复。System.AppDomain.CurrentDomain.BaseDirectory,非常专业的回复。我用

Msgb ...

原:Shell("hh.exe -mapid 1120" & System.AppDomain.CurrentDomain.BaseDirectory & "MyHelp.chm"
新:Shell("hh.exe -mapid 1120 " & System.AppDomain.CurrentDomain.BaseDirectory & "MyHelp.chm"
上面的第一个部分,缺少了空格.
可试试.
另外,路径之间的拼接,可尽量使用System.IO.Path.Combine方法

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-14 16:49 | 显示全部楼层
原:Shell("hh.exe -mapid 1120" & System.AppDomain.CurrentDomain.BaseDirectory & "MyHelp.chm"
新:Shell("hh.exe -mapid 1120 " & System.AppDomain.CurrentDomain.BaseDirectory & "MyHelp.chm"
上面的第一个部分,缺少了空格.

您的回复简明扼要,一语中的。这个空格的确是必需的,否则,hh.exe的参数语法就错了。添加这个空格后,问题迎刃而解。非常感谢您如此快捷而有效的回复,问题看起来简单,但确实反映出要提高自己的水平,还有很长的路要走。System.IO.Path.Combine方法没有用过,我会按照您的指点,去认真学习掌握。再次感谢。

TA的精华主题

TA的得分主题

发表于 2016-6-14 21:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jsz241001 发表于 2016-6-14 16:49
原:Shell("hh.exe -mapid 1120" & System.AppDomain.CurrentDomain.BaseDirectory & "MyHelp.chm"
新:Shel ...

不用客气.其实编写代码出现问题是很正常的,但要学会调试的方法和思路.
建议你系统学习一下使用vs,特别是调试方面的使用.

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-15 08:52 | 显示全部楼层
的确,我的VS知识不系统,就是在做VBA的基础上,遇到问题就到MSDN中搜素求解。VBA的书铺天盖地,但VS的书就少得可怜了,尤其是VS2015,几乎找不到。买了几本VSTO开发者指南,又厚又贵,但几乎没有什么用。能推荐几本好的书吗?谢谢。

TA的精华主题

TA的得分主题

发表于 2016-6-15 20:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jsz241001 发表于 2016-6-15 08:52
的确,我的VS知识不系统,就是在做VBA的基础上,遇到问题就到MSDN中搜素求解。VBA的书铺天盖地,但VS的书就 ...

你对整个体系的概念大概弄错了.
vs(2008,2010,2012,2013,2015),Visual Studio ,也就是一个开发.net项目的界面而已,对于一个.net软件来说,它不是必须的.

vb.net,vc++,c#,.net平台上的语言.至少你要选择一种来使用开发.

开发应用的类型(winform,wpf,asp.net,vsto),vsto你就当做是一个种类的名称而已.

至于你说的资料,其实,你看一本介绍.net的书就可以,大部分是C#语言的,但你可以忽略语言部分的内容,核心的,就是.net的基础库.

至于vsto的,其实就是熟悉一下微软对于office基于.net平台的架构与框架.我当然是建议你从.net入手,而不是从vsto入门.

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-16 17:49 | 显示全部楼层
这些概念,真的没有搞清楚。看来是要静下心来好好学学了。您的这几个帖子对我帮助太大了,再次感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-10-15 16:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
“vb.net Excel外接程序如何打开chm帮助文档”这个老帖子又有了新问题:

用以下的语句:

Shell("hh.exe -mapid 1120 " & System.AppDomain.CurrentDomain.BaseDirectory & "MyHelp.chm")

在VS2015调试时可以打开放在“C:\Users\Administrator\Documents\Visual Studio 2015\Projects\myprojrct\myproject\bin\Debug\MyHelp.chm”下的帮助文件,但这个外接程序发布以后,帮助文件又打不开了。

请问:发布时帮助文件应该放在哪个路径上,发布时会自动将帮助文件打包进去,或者是如何指定新的路径,发布以后帮助文件放在这个路径上就能打开?

敬请再次指教。谢谢。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 21:39 , Processed in 0.039175 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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