- 題名: vb .net Excel Open命令でメモリ例外エラー発生
- 日時: 2010/11/10 20:30:31
- ID: 27545
- この記事の返信元:
- (なし)
- この記事への返信:
- [27546] Re[1]: vb .net Excel Open命令でメモリ例外エラー発生2010/11/10 21:31:39
- [27547] Re[1]: vb .net Excel Open命令でメモリ例外エラー発生2010/11/11 0:04:19
- ツリーを表示
■No27545に返信(ganganさんの記事) > 【環境】Excel 2000 SP3 > XP Excel2003では正常に動作する。 XP というのは Office の事でしょうか。Windows の事でしょうか。 > ExcelのOpen命令でAccessViolationException エラーの直接の要因であるかどうかは分かりませんが、 Workbooks.Open メソッドは、Excel バージョンごとに違いがあります。 参照設定している場合は、タイプライブラリの差異に注意してください。 ・開発環境には、複数の Office バージョンを導入しない。 ・実行環境と開発環境の Office バージョンは統一させる。 ・複数バージョンに対応させたい場合は、レイトバインドを使うか、 型定義を自分で定義して使うか、バージョン別にアプリを作るかして対応。 ======================================================================================== 《Excel 5.0》 ---------------------------------------------------------------------------------------- <DispId(&H2AA)> _ Function Open(Filename, UpdateLinks, ……, Converter) ======================================================================================== 《Excel 97/2000》 ---------------------------------------------------------------------------------------- <DispId(&H2AA)> _ Function Open(Filename, UpdateLinks, ……, Converter, AddToMru) ======================================================================================== 《Excel 2002/2003/2007》 ---------------------------------------------------------------------------------------- <DispId(&H783)> _ Function Open(Filename, UpdateLinks, ……, Converter, AddToMru, Local, CorruptLoad) <DispId(&H2AA), Hidden()> _ Function _Open(Filename, UpdateLinks, ……, Converter, AddToMru)
分類:[.NET]
こんにちわ。 【環境】/Windows 2000 SP4/ .NET 2.0/ VB2005 Expess Edition /Excel 2000 SP3 C/Sプログラムです。 下記メモリ例外の原因を調査しましたが、分からず投稿しました。 どなたか、ご教示頂ければ助かります。 【エラー内容】 今までは(ここ数日)は正常に動作していましたが、2日前から 下記コードを実行すると、ExcelのOpen命令でAccessViolationExceptionクラスの 「保護されているメモリに読み取りまたは書き込み操作を行おうとしました。 他のメモリが壊れていることが考えられます。」 が必ず発生する様になりました。 【コード】 Imports excel Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Ex_App As New Excel.Application Dim Ex_Wbks As Excel.Workbooks = Ex_App.Workbooks Dim Ex_BkName As String Ex_BkName = "c:\ファイル名.xls" Dim Ex_Wbk As Excel.Workbook = Ex_Wbks.Open(Ex_BkName, ReadOnly:=True) Ex_App.Visible = True System.Runtime.InteropServices.Marshal.ReleaseComObject(Ex_Wbk) Ex_Wbk = Nothing System.Runtime.InteropServices.Marshal.ReleaseComObject(Ex_Wbks) Ex_Wbks = Nothing System.Runtime.InteropServices.Marshal.ReleaseComObject(Ex_App) Ex_App = Nothing End Sub End Class 【発生の経緯】 1.既存のプログラムをバージョンアップの為、プロジェクトフォルダごとコピー。 2.コピーしたプロジェクトフォルダーを使用してVアップ作業。 3.2日前にデバッグ時、上記メモリ例外エラーが発生 【エラー発生前に通常と異なる?ソースの変更】 1.1つのフォームモジュールの中に2つのクラスを作成した。 ※現在は1つのクラスにしている。 【調査して分かっている事】 1.エラーが発生するVアップ版は、同一環境の他PCでも必ず発生する。 2.コピー元(旧バージョン版)は、エラーが発生する環境のPCでも 正常に動作する。 3.エラーが発生するVアップ版は、XP Excel2003では正常に動作する。 【実施した事】 1.VB2005 Express版の再インストール 2.旧バージョン版のエラーが発生しないモジュール(○○.vb ○○.Designer.vb ○○.resx)をエラーが発生するプロジェクトフォルダにコピーして実施→エラー 発生 【例外の詳細】 System.AccessViolationException はハンドルされませんでした。 Message="保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。" Source="Interop.Excel" StackTrace: 場所 Excel.Workbooks.Open(String Filename, Object UpdateLinks, Object ReadOnly, Object Format, Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin, Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad) 場所 ○○プログラム.Form1.Button1_Click(Object sender, EventArgs e) 場所 D:\userfiles\Visual Studio 2005(Vup3.0)\Projects\○○プログラム\○○プログラム\Form1.vb:行 11 場所 System.Windows.Forms.Control.OnClick(EventArgs e) 場所 System.Windows.Forms.Button.OnClick(EventArgs e) 場所 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 場所 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 場所 System.Windows.Forms.Control.WndProc(Message& m) 場所 System.Windows.Forms.ButtonBase.WndProc(Message& m) 場所 System.Windows.Forms.Button.WndProc(Message& m) 場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 場所 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 場所 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 場所 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) 場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 場所 System.Windows.Forms.Application.Run(ApplicationContext context) 場所 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() 場所 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() 場所 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) 場所 ○○プログラム.My.MyApplication.Main(String[] Args) 場所 17d14f5c-a337-4978-8281-53493378c1071.vb:行 81 場所 System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args) 場所 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 場所 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 場所 System.Threading.ThreadHelper.ThreadStart() 以上です。宜しくお願い致します。