在VBA中可以使用API函数来拓展VBA的功能。
比如在VBA中插入一个标准模块,然后输入如下的代码:
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Public Const SW_SHOWNORMAL = 1 Sub exceloffice() Dim sUrl As String sUrl = "https://www.baidu.com/" ShellExecute 0, "open", sUrl, vbNullString, vbNullString, SW_SHOWNORMAL End Sub
就可以用api函数ShellExecute打开指定的网页。
如果要把上述的API函数迁移到VSTO、VB.NET中,直接拷贝复制进去是不行的,需要做以下几个步骤
1.单击“项目”菜单,“添加模块”,选择”模块”,确定。
2.拷贝上述代码到
Module Module1
End Module
之间,如下所示
Module Module1 Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Public Const SW_SHOWNORMAL = 1 Sub exceloffice() Dim sUrl As String sUrl = "https://www.baidu.com/" ShellExecute 0, "open", sUrl, vbNullString, vbNullString, SW_SHOWNORMAL End Sub End Module
3.最关键的,也是最重要的一步,单击Ctrl+H组合快捷键,把API函数声明部分的”As Long”批量替换为”AS Integer”。
如下所示
替换后的代码如下所示
Module Module1 Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Integer, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As Integer Public Const SW_SHOWNORMAL = 1 Sub exceloffice() Dim sUrl As String sUrl = "https://www.baidu.com/" ShellExecute 0, "open", sUrl, vbNullString, vbNullString, SW_SHOWNORMAL End Sub End Module
为什么要做这个动作呢?
因为在VB.NET中Integer变量类型使用4个字节存储有符号的整数(也就是32位),同VBA中的Long变量类型是一样的。
而VB.NET中Long变量类型是使用8个字节存储有符号的整数(也就是64位)。
4.最后还需要将API函数的参数用括号括起来,这是VB.NET与VBA的一个最显著的区别。
将
ShellExecute 0, “open”, sUrl, vbNullString, vbNullString, SW_SHOWNORMAL
改成
ShellExecute(0, “open”, sUrl, vbNullString, vbNullString, SW_SHOWNORMAL)
VBA中如果是对象的方法,函数的调用等可以不带括号使用,但是在VB.NET中括号是不能缺少的。
最后的代码如下
Module Module1 Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Integer, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As Integer Public Const SW_SHOWNORMAL = 1 Sub exceloffice() Dim sUrl As String sUrl = "https://www.baidu.com/" ShellExecute(0, "open", sUrl, vbNullString, vbNullString, SW_SHOWNORMAL) End Sub End Module
通过上述几个步骤,就可以顺利地在VB.NET、VSTO中使用API函数了。
怎么样,将VBA中的API代码迁移到VB.NET中就是这么简单,你学会了吗?
发表评论