ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 高人帮忙看看vsto的自定义函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-5-10 16:50 | 显示全部楼层 |阅读模式
按照高人的例子做联系,在vs2010里面自定义函数可以生成,但是在excel调用的时候看不到,不清楚是什么问题,但是是因为
在弹出的窗口中点击编译页面,勾起“为
COM
互操作注册”,见下图
在弹出的窗口中点击编译页面,勾起“为
COM
互操作注册”,见下图

“在弹出的窗口中点击编译页面,勾起“为COM互操作注册”的原因吗?,代码如下

Imports System
Imports System.Runtime.InteropServices
Imports Microsoft.Win32
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Text
<ClassInterface(ClassInterfaceType.AutoDual), ComVisible(True)>
<Guid("207DF2C7-9773-4FB1-A50C-2A2515C3F8FA")>
Public Class Class1
    Public Function MYFUNCTION(ByVal number1 As Double, ByVal number2 As Double) As Double
        Return number1 * number2
    End Function
    <ComRegisterFunctionAttribute()> Public Shared Sub RegisterFunction(ByVal Type As Type)
        Dim rk As RegistryKey
        Registry.ClassesRoot.CreateSubKey(GetSubKeyName(Type, "Programmable"))
        rk = Registry.ClassesRoot.OpenSubKey(GetSubKeyName(Type, "InprocServer32"), True)
        rk.SetValue("", Environment.SystemDirectory + "\mscoree.dll", RegistryValueKind.String)
    End Sub
    <ComUnregisterFunctionAttribute()> Public Shared Sub UnregisterFunction(ByVal Type As Type)
        Registry.ClassesRoot.DeleteSubKey(GetSubKeyName(Type, "Programmable"), False)
    End Sub
    Private Shared Function GetSubKeyName(ByVal Type As Type, ByVal SubKeyName As String) As String
        Dim b As StringBuilder = New StringBuilder
        b.Append("CLSID\{")
        b.Append(Type.GUID.ToString().ToUpper())
        b.Append("}\")
        b.Append(SubKeyName)
        GetSubKeyName = b.ToString()
    End Function
End Class

TA的精华主题

TA的得分主题

发表于 2014-5-12 08:47 | 显示全部楼层
试试注册dll,

x86版本
%windir%\Microsoft.NET\Framework\v4.0.30319\regasm.exe /codebase "你的dll名字"

x64版本
%windir%\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /codebase "你的dll名字"

TA的精华主题

TA的得分主题

发表于 2014-5-16 13:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 pntming 于 2014-5-16 13:41 编辑

如果是win7系统,把COM互操作注册去掉,之后按2楼的方法注册,点开发工具—加载项—自动化—点击 “你的vs项目名—class1”那行,在可用宏勾选,确定,点击函数Fx—在常用函数下就可以见到自定义的函数了.另<Guid("207DF2C7-9773-4FB1-A50C-2A2515C3F8FA")>这行代码是为dll指定注册表的值,建议删除。不删除的话不要复制别人的。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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