我有一个. NET Windows应用程序(它是用VB.Net编写的,但用C#也会发生同样的情况),在这个应用程序中我遇到了一个This command is unavailable because the license to use this application has expired
错误。
此错误的堆栈跟踪为:at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) at Microsoft.Office.Interop.Excel.Range.Select()
失败的代码行是:wrksht.Range("A2").Select()
。它并不总是失败!它可以在失败前工作几次,也可以在第一次调用时失败。
要了解该过程的工作原理:
1.打开Word文档
1.找到图表(通过形状)
1.图表数据即被激活
1.访问工作表
Dim chrt As _word.Chart = shp.Chart
chrt.ChartData.Activate()
Dim wrksht As _excel.Worksheet = chrt.ChartData.Workbook.WorkSheets(1)
wrksht.Range("A2").Select() 'Line that errors
Windows应用程序正在终端服务示例上运行,Office 365正在使用共享激活许可证(已激活)。同一应用程序在使用Office 365的独立PC上成功运行,但使用标准许可证。
有什么想法吗?
- 附加信息**
我在Word中创建了一个简单的宏来绕过任何. Net/应用程序问题。宏每次在.Select
上都会出错。但是,如果我将.Select
更改为.FormulaR1C1 = "TEST"
,它就会完成。事实上,各种Word和Excel自动化都在工作,似乎只有在使用Word图表对象的工作表时,.Select
才会出现问题。
参见代码:
Sub Test()
Dim shp As InlineShape
Dim chrt As Chart
Dim wrksht As Excel.Worksheet
Set shp = getInlineShapeFromTitle("Score_Graph_Question_15964_4")
Set chrt = shp.Chart
chrt.ChartData.Activate
Set wrksht = chrt.ChartData.Workbook.Worksheets(1)
'wrksht.Range("A1").FormulaR1C1 = "TEST 1"
wrksht.Range("A1").Select
chrt.ChartData.Workbook.Application.Quit
End Sub
Private Function getInlineShapeFromTitle(title As String) As InlineShape
Dim shp As InlineShape
Dim shp1 As InlineShape
For Each shp1 In ActiveDocument.InlineShapes
If shp1.title = title Then
Set shp = shp1
Exit For
End If
Next
Set getInlineShapeFromTitle = shp
End Function
- 进一步调查结果**
Office许可证有效且已激活,但是,当Word打开Excel(通过chrt.ChartData.Activate
命令)时,Excel的标题栏中显示"未授权的产品"。如果手动打开Excel,则显示为已授权且已激活。下图显示Word打开Excel时显示的内容:
如果我选择从Word手动设置图表的数据源(不使用VBA),Excel将打开,并且标题栏中没有未授权产品消息。
1条答案
按热度按时间yqlxgs2m1#
这不是答案,但可能有用,它展示了如何在不使用允许启用Option Strict的后期绑定的情况下做类似的事情。
添加COM引用(项目=〉添加引用... =〉COM)
添加以下Imports语句:
Imports Microsoft.Office.Interop
用法(假设有一个名为“ButtonRun”的按钮)
资源: