这个代码工作VB,但在VB.NET中,例外,为什么?

目标达成:我想改变数据透视表的SourceData。

我想从'C:\[file.xlsx]SheetName'!RangeName 'SheetName'!RangeName'SheetName'!RangeName

我有以下的实现:

 For Each table In sheet.PivotTables Dim str = "'" + Split(table.SourceData, "]")(1) table.SourceData = str // Gives Exception here Next table // Exception: Exception from HRESULT: 0x800A03EC 

在错误str有值'SheetName'!RangeName (这很好..)

我也得到一个消息框之前的exception: Can not open the source file C:\file.xlsx (这不是很明显,因为它在使用中)

请帮助..这在VB中作为一个macros。

这是VB.Net版本,就像你会在vb.net-exe中使用它。 它不会在EXCEL.VBA,但据我所知,你想要一个VB.Net版本?

 Imports Microsoft.Office.Interop Sub ChangePivotTableSourceData() Dim e As New Excel.Application e.Workbooks.Open("c:\testdoc.xlsx", , True) 'Open the doc readonly Dim sheet As Excel.Worksheet = e.ActiveSheet For Each table As Excel.PivotTable In sheet.PivotTables table.SourceData = "'" + Split(table.SourceData, "]")(1) Next e.ActiveWorkbook.SaveAs("c:\testdoc_changed.xlsx") 'Save under another name e.ActiveWorkbook.Close() e.Quit() sheet = Nothing e = Nothing End Sub 

通过Marc Gravell的build议,我把我的评论变成了一个答案:

我可以想象为什么你的代码在VB.NET中断的两个原因:

  • 如果在VB中你使用代码中的某个地方在错误恢复下一个(哦,恐怖),那么你不会看到它在VB中,但会看到它在VB.NET(因为它不允许错误被忽略)。

  • 你标记了Excel。 我假设你从一个较旧的Excel版本升级到一个更新的版本,或者你将你的代码从Excel移到独立的VB.NET。 一大堆非VB相关的更改可能会导致错误popup。

为什么你得到关于打印机不可用的错误(或Jon给你的任何其他指针),我不知道,但是你可以在http://superuser.com上尝试这个特定的问题。

据说,这个错误是没有打印机可用 。 我不知道为什么你会在VB.NET中得到它,但不是在VB中…但是你可能想看看你的打印机权限等

编辑: 这个职位也可能是有用的,显示DCOM服务的变化与身份。

编辑:哦,看起来像错误可能意味着多个事情。 此MSDN页面在区域设置上下文中提到它…

Interop基本上很烂。 检查你的进程(任务pipe理器)…至less应该有一个excel.exe进程在桌面上不可见。 杀死他们,因为他们可能有文件在使用。 这会导致您的“无法打开源文件C:\ file.xlsx”错误。 谁知道这也可能会解决你的其他错误。

如果没有,请检查是否安装了最新的互操作程序集并使用它们。 这有助于处理Office产品。 http://msdn.microsoft.com/en-us/library/15s06t57(v=VS.100).aspx