旨在实现: 我想更改数据透视表的SourceData。
我想将其从'C:\[file.xlsx]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
(这很好..)
我也在异常之前收到一个消息框:
Can not open the source file C:\file.xlsx
(不是很明显,因为它正在使用中)
请帮助..这在VB中作为宏工作。
答案 0 :(得分:3)
根据Marc Gravell的建议,我将评论改为答案:
我可以想到你的代码在VB.NET中断的两个原因:
如果在VB中使用代码中的某处On Error Resume Next(哦恐怖),那么你在VB中看不到它,但会在VB.NET中看到它(因为它不允许出错)被忽略)。
您已标记Excel。我假设您从较旧版本的Excel转到较新版本,或者您将代码从Excel移动到独立的VB.NET。大量非VB相关的更改可能会导致弹出错误。
为什么你得到一个关于打印机不可用的错误(或Jon给你的任何其他指示),我不知道,但你可以在http://superuser.com上尝试这个特定的问题。
答案 1 :(得分:1)
据说,此错误与no printer being available有关。我不知道你为什么要在VB.NET中使用它而不是在VB中...但是你可能想查看你的打印机权限等。
编辑:This post也可能有用,显示DCOM服务在身份方面的变化。
编辑:噢,看起来错误可能意味着多件事。 This MSDN page在区域设置环境中提到它......答案 2 :(得分:0)
这是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
答案 3 :(得分:0)
Interop基本上很糟糕。检查您的进程(任务管理器)......应该至少有一个在桌面上看不到的excel.exe进程。杀死他们,因为他们可能正在使用该文件。这导致您的'无法打开源文件C:\ file.xlsx'错误。谁知道它也可以解决你的其他错误。
如果没有,请检查是否安装了最新的互操作程序集并使用它们。当您处理Office产品时,它会有所帮助。 http://msdn.microsoft.com/en-us/library/15s06t57(v=VS.100).aspx