我将解释我发现的所有内容,但总之我只想想要在代码后面设置单元格A1的值。我试过Create Excel Add-in - get cell value加上其他链接,所有这些技术只有在宏上运行它们时才起作用,但我想从函数中执行它们。设置单元格的值加入
所以让我开始解释:
我不明白为什么我得到一个奇怪的行为,当我在一个函数与一个Sub运行相同的代码。看看下面的例子:
Dim TimeToRun
Sub Macro1()
'Dim addIn As COMAddIn
'Dim automationObject As Object
'Set addIn = Application.COMAddIns("ProbeAddIn")
'Set automationObject = addIn.Object
'automationObject.ImportData
MsgBox "Hello world"
End Sub
Sub Macro2()
TimeToRun = Now + TimeValue("00:00:01")
Application.OnTime TimeToRun, "Macro1" ' run Macro1 on 1 seconds
End Sub
Function Test()
TimeToRun = Now + TimeValue("00:00:01")
Application.OnTime TimeToRun, "Macro1" ' run Macro1 on 1 seconds
End Function
注意Macro2
和功能Test
有相同的代码。为什么如果我运行Macro2,它工作正常(消息框显示)。但是,如果我去一个单元格并输入=Test()
,那么即使我有相同的代码,我也会得到一个错误!
我之所以展示这个例子的原因是因为我已经在Macro1上注释过的代码在我直接运行宏的情况下运行时效果很好。如果我将该代码放入函数Test中不起作用。这个代码执行下面的方法在我的外接程序项目上的Visual Studio:
唯一的例外是:
System.Runtime.InteropServices.COMException是由用户代码 未处理的HResult = -2146827284 Message = Exception from HRESULT:0x800A03EC
Source =“”ErrorCode = -2146827284 StackTrace: at System.RuntimeType.ForwardCallToInvokeMember(String memberName,BindingFlags flags,Object target,Int32 [] aWrapperTypes, MessageData & msgData) at Microsoft.Office.Interop.Excel.Range.set_Value2(Object value) at ReadWrite.ImportData()in C:\ Users \ Antonio \ Dropbox_Temp \ visual studio \ Probe add in test \ ProbeAddIn \ ProbeAddIn \的Class1.cs:线82的InnerException:
我得到的异常,因为我跑:
Function Test()
Dim addIn As COMAddIn
Dim automationObject As Object
Set addIn = Application.COMAddIns("ProbeAddIn")
Set automationObject = addIn.Object
automationObject.ImportData
End Function
而不是
Sub Test()
Dim addIn As COMAddIn
Dim automationObject As Object
Set addIn = Application.COMAddIns("ProbeAddIn")
Set automationObject = addIn.Object
automationObject.ImportData
End Function
如何使宏内的代码和函数以同样的方式运行?当用户键入公式时,而不是用户运行宏时,我想触发该方法的执行。 即使我有功能运行宏我得到相同的异常我没有得到一个例外的唯一方法是,如果第一件事是运行宏是...
Excel VBA Sub不返回,但函数确实。所以你的'功能测试'不...... – bonCodigo
最后一个'Function Test()'怎么办?那一个返回。它调用ImportData方法。该方法不能改变单元格A1的值为什么?如果我从宏运行相同的方法,它工作正常。谢谢您的帮助! –
你真的想要做什么,让一个加载项在特定时间更改单元格值?每秒之后? – bonCodigo