在 Excel VBA 中定义类模块,要如何才能自定义 Open 方法... excel中VBA如何在模块中自定义函数,定义好了之后如何在...
\u5728 Excel VBA \u4e2d\u5b9a\u4e49\u7c7b\u6a21\u5757\uff0c\u8981\u5982\u4f55\u624d\u80fd\u81ea\u5b9a\u4e49 Open \u65b9\u6cd5\u6216\u51fd\u6570\uff1f \uff08\u56e0\u4e3a\u5728 VBE \u4e2d Open \u662f\u4fdd\u7559\u5b57\uff09\u4e0d\u80fd\u7684\uff0c\u5728 VB \u4e2d Open \u53ea\u80fd\u662f\u5173\u952e\u5b57\uff0c
\u5728\u8c03\u7528\u65f6\u5982\u679c\u67d0\u4e00\u8fc7\u7a0b\u540d\u4e0d\u7b26\u5408 VB \u7684\u8981\u6c42\uff0c\u5219\u9700\u8981\u5728\u5176\u4e24\u4fa7\u52a0\u65b9\u62ec\u53f7\uff1a
Dim MyCollection As New Collection
Dim NextEnum As Object
Set NextEnum = MyCollection.[_NewEnum]
\u7167\u7406\u8bf4\uff0c\u4e0e\u5173\u952e\u5b57\u53ef\u80fd\u53d1\u751f\u51b2\u7a81\uff0c\u4e5f\u9700\u8981\u52a0\u65b9\u62ec\u53f7\uff0c
\u4f46\u6211\u8bd5\u4e86\u4e00\u4e0b\uff0c\u5b9e\u9645\u4e0d\u7528\u3002
\u53ef\u662f\uff0c\u5982\u679c\u5728\u58f0\u660e\u4e00\u4e2a\u4e0d\u7b26\u5408 VB \u7684\u8981\u6c42\u7684\u8fc7\u7a0b\u540d\u79f0\u65f6\uff0c
\u52a0\u65b9\u62ec\u53f7\u5374\u9047\u5230\u4e86\u95ee\u9898\uff1a
Public Sub [Open]() '\u7f16\u8bd1\u9519\u8bef
\u56e0\u6b64 VB 6.0\uff08\u6216\u662f VBA 6.0\uff09\u662f\u4e0d\u652f\u6301\u58f0\u660e\u4e0d\u7b26\u5408\u8981\u6c42\u7684\u8fc7\u7a0b\u540d\u79f0\u7684\u3002
\u4f46\u5728 VB.NET \u4e2d\u662f\u53ef\u4ee5\u7684\uff08\u867d\u7136\u8fd9\u4e48\u505a\u4e0d\u88ab\u63a8\u8350\uff09\uff0c\u4f8b\u5982\uff1a
Public Sub [Sub]()
Public Function [Property]() As Object
Dim [___] As Long
\u4e0d\u8fc7\u76ee\u524d\u8fd8\u6ca1\u6709\u89c1\u5230 VB.NET \u53d6\u4ee3 VBA \u7684\u4f4d\u7f6e\u3002
\u9664\u8fc7\u5728 Office 2010 \u7684 InfoPath \u4e2d\u7684\u4ee3\u7801\u53ef\u4ee5\u5728 VB.NET \u73af\u5883\u4e2d\u7f16\u8f91\u4ee5\u5916\uff0c
\u751a\u81f3 Office 2010 \u7684 Word \u8fd8\u5728\u7528 VBA 6.0\u2026\u2026
\u800c\u81f3\u4e8e\u4eba\u5bb6 Workbooks\uff0c
\u56e0\u4e3a\u4eba\u5bb6\u7528\u7684\u4e0d\u662f VB\uff0c\u800c\u662f C\uff0c
\u56e0\u6b64\u6ca1\u6709\u8fd9\u4e48\u4e25\u683c\u7684\u9650\u5236\u3002
\u6240\u4ee5\u53ea\u80fd\u5c06\u5c31\u4e00\u4e0b\u4e86\u2026\u2026
\u8d77\u4e2a OpenWorkbook \u6216\u662f OpenSheet \u4e4b\u7c7b\u7684\uff0c
\u53ea\u8981\u907f\u5f00\u5173\u952e\u5b57\u5c31\u884c\u2026\u2026
vb\u51fd\u6570\u5206sub\uff08\u65e0\u8fd4\u56de\u503c\uff09\u4ee5\u53cafunction\uff08\u6709\u8fd4\u56de\u503c\uff09
\u7b80\u5355\u8303\u4f8b
Public Function ss() As String
ss = "\u6211\u662f"
End Function
\u6ce8\u610f\uff0c\u60f3\u5b9a\u4e49\u7684\u51fd\u6570\u80fd\u591f\u5728\u7a97\u4f53\u6216\u522b\u7684\u6a21\u5757\u8c03\u7528\uff0c\u8be5\u51fd\u6570\u5fc5\u987b\u662fpublic\u7684\uff0c\u4e5f\u5c31\u662f\u7b2c\u4e00\u4e2a\u5173\u952e\u5b57\u5fc5\u987b\u4e3apublic
function\u7684\u8c03\u7528\u5f88\u7b80\u5355\uff0c\u76f4\u63a5\u5199\u51fd\u6570\u540d\u548c\u53c2\u6570
\u5982 msgbox ss
\u800csub\u7684\u8c03\u7528\u76f4\u63a5call\uff0c\u5982\uff1a
Public Sub ss()
ss = "\u6211\u662f"
End Sub
\u8c03\u7528call ss
\u53e6\u5916\u4e00\u70b9\u9700\u8981\u6ce8\u610f\uff0c\u8c03\u7528\u6a21\u5757\u5b9a\u4e49\u7684\u51fd\u6570\uff0c\u76f4\u63a5\u5199\u51fd\u6570\u540d\u3002\u4f46\u5982\u679c\u8c03\u7528\u7a97\u4f53\u7684\u51fd\u6570\uff0c\u5c31\u5f97\u628a\u7a97\u4f53\u52a0\u4e0a\u3002\u6bd4\u5982\uff0c\u6211\u8981\u8c03\u7528sheet1\u4e0b\u7684bb\u51fd\u6570\uff0c\u5219\u8be5\u5199\u6210 call sheet1.bb
在调用时如果某一过程名不符合 VB 的要求,则需要在其两侧加方括号:
Dim MyCollection As New Collection
Dim NextEnum As Object
Set NextEnum = MyCollection.[_NewEnum]
照理说,与关键字可能发生冲突,也需要加方括号,
但我试了一下,实际不用。
可是,如果在声明一个不符合 VB 的要求的过程名称时,
加方括号却遇到了问题:
Public Sub [Open]() '编译错误
因此 VB 6.0(或是 VBA 6.0)是不支持声明不符合要求的过程名称的。
但在 VB.NET 中是可以的(虽然这么做不被推荐),例如:
Public Sub [Sub]()
Public Function [Property]() As Object
Dim [___] As Long
不过目前还没有见到 VB.NET 取代 VBA 的位置。
除过在 Office 2010 的 InfoPath 中的代码可以在 VB.NET 环境中编辑以外,
甚至 Office 2010 的 Word 还在用 VBA 6.0……
而至于人家 Workbooks,
因为人家用的不是 VB,而是 C,
因此没有这么严格的限制。
所以只能将就一下了……
起个 OpenWorkbook 或是 OpenSheet 之类的,
只要避开关键字就行……
扩展阅读:十大免费excel网站 ... excel vba 查询 ... vba case ... excel vba入门 ... excel vba find ... excel vba 循环 ... vba rows 多行 ... vba能干什么厉害的事情 ... vba 导入 另一个工作簿 ...