VS2005でExcel操作でエラーが
- VS2005のBasicを使用してExcel操作のシステムを作成しています。エラーが発生し、その原因が分かりません。
- 開発環境での試験では正常に動作しましたが、別の環境でのインストール時にエラーが発生します。
- ファイルのオープンやロックの状態に問題はありません。同様の現象を経験した方の情報をお待ちしています。
- ベストアンサー
VS2005でExcel操作でエラーが
ご教授をよろしくお願いいたします。 現在、VS2005のBasicを使用してExcel操作のシステムを作っています。 行う事は、指定のExcelファイルをオープンし、指定のシートのセルにあるデータを格納してそのまま上書き保存をするだけです。 参照設定の追加 Microsoft Excel 11.0 Object Library 以下がそのソースの抜粋です。 Dim objExcel As Microsoft.Office.Interop.Excel.Application Dim objExcelBook As Microsoft.Office.Interop.Excel.Workbook Dim objExcelSheet As Microsoft.Office.Interop.Excel.Worksheet objExcel = CreateObject("Excel.Application") objExcel.Visible = False objExcelBook = objExcel.Workbooks.Open(FileName) objExcelSheet = objExcelBook.Worksheets(SheetName) objExcelSheet.Cells(row, col).Value = intData objExcel.DisplayAlerts = False objExcelBook.SaveAs(FileName) 開発環境はXP Pro SP2/VS2005/Visual Basic/Excel2003です。 開発環境で試験をした時はちゃんとファイルが保存されて正常に処理が完了するのですが、セットアッププログラム(VS付属のインストーラー)で別のパソコンにインストールしたプログラムは、以下のエラーが発生します。 「保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れている事が考えられます」 違う環境のパソコンの複数台に試したのですが、同じ現象でした。 (Windows2000/XP/Excel2000/Excel2003) もちろん、Excelでそのファイルを開いている状態でシステムを起動したり、ファイルにロックが掛かっている状態で無い事も確認しました。 読み取り専用の属性もファイルにはありません。 同じような現象を経験した方がいらっしゃれば是非とも情報をよろしくお願いいたします。
- tatumi4
- お礼率69% (9/13)
- Visual Basic
- 回答数1
- ありがとう数3
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 > 違う環境のパソコンの複数台に試したのですが、同じ現象でした。 Microsoft Excel 11.0 Object Library が参照不可なら > Dim objExcel As Microsoft.Office.Interop.Excel.Application > Dim objExcelBook As Microsoft.Office.Interop.Excel.Workbook > Dim objExcelSheet As Microsoft.Office.Interop.Excel.Worksheet このコードはエラーになりそうな気がしますけど…参照パスが違うのでは? > objExcel = CreateObject("Excel.Application") このコードなら参照設定は解除して、変数を Object 型に変えてみたら? 確認してませんが。 余談ですが・・・ > objExcelSheet.Cells(row, col).Value = intData row も col も Excel VBA の予約語なので今のうちに変更しておいた方が 良いですよ。 lRow とか。
関連するQ&A
- CreateObjectでエラー発生(Excel2007が悪い?)
下記の環境、プログラムで"ActiveXコンポーネントを作成できません。"のエラーが出て困っています。 毎回ではなく、「1回目はエラーで、2回目以降は出ない」「たまに出る」など、動作が一定ではありません。 Excel2003では問題なく動作するので、Excelのバージョンを変更しようかとも考えています。(高価で入手しにくいので踏み切れずにいます。) Excel2007とVBの問題なのでしょうか? プログラムの変更で解決すればいいのですが…。 ご教示ください! ****** 環境 ****** OS:WindowsXP Professional Ver.2002 SP2 (Microsoft .NET Framework 2.0 Configuration) Excel:Microsoft Office Excel 2007 言語:VB2005 SP1 参照先:Microsoft Excel 12.0 Object Library ****** プログラム ****** Dim xlApp As Microsoft.Office.Interop.Excel.Application Dim xlBook As Microsoft.Office.Interop.Excel.Workbook Dim xlSheet1 As Microsoft.Office.Interop.Excel.Worksheet Try xlApp = CType(CreateObject("Excel.Application"),Microsoft.Office.Interop.Excel.Application) xlBook = CType(xlApp.Workbooks.Open("C:\File\OutPutSheet_1System.xls"),Microsoft.Office.Interop.Excel.Workbook) xlSheet1 = CType(xlBook.Worksheets(1),Microsoft.Office.Interop.Excel.Worksheet) ↓↓以下省略 (開放は行っています。)
- 締切済み
- Visual Basic
- TextBoxに入力した文字をExcelに書き込むには?
VB2008を使用しています。 VBフォーム内のTextBox1に入力した内容(例 りんご)をBottanを押すことによりExcelの指定したセル(例 A1)に書き込んで保存する方法はありますでしょうか? 現在、以下のところまでは出来ています。 ' excelを定義 Dim excel As New Microsoft.Office.Interop.Excel.Application ' excel testをファイルから開く Dim book As Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open("C:\test.xls") ' 1枚目のワークシートを取得 Dim sheet As Microsoft.Office.Interop.Excel.Worksheet sheet = CType(book.Worksheets.Item(1), Microsoft.Office.Interop.Excel.Worksheet) Excelの開放からsheetの取得までは出来たのですが、ここから先がわかりません。よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- Excelのシートをコピー
環境は,Visual Studio 2005 Standard Editionです. プログラムを実行後,以下の例外が発生しました. 「HRESULT からの例外: 0x800A03EC」 発生場所は★の位置です. ここから------- Dim xlApp As Microsoft.Office.Interop.Excel.Application = Nothing Dim xlBook As Microsoft.Office.Interop.Excel.Workbook = Nothing Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet = Nothing xlBook = xlApp.Workbooks.Open("ファイルのパスが入ります") xlSheet = xlBook.Worksheets("シート名が入ります") Dim xlBook2 As Microsoft.Office.Interop.Excel.Workbook = Nothing Dim xlSheet2 As Microsoft.Office.Interop.Excel.Worksheet = Nothing xlBook2 = xlApp.Workbooks.Open("ファイルパスが入ります") xlSheet2 = xlBook.Worksheets("シート名が入ります") 'Excelを表示しない xlApp.Visible = False xlSheet.Copy(Before:=xlSheet2) ★ ここまで-------------- やろうとしているのは,xlSheet2のシートを含むExcelファイルに,xlSheet2の前にxlSheetをコピーする処理です. ★のところで上の例外が発生してしまいます. 以上,よろしくお願いします.
- 締切済み
- Visual Basic
- VS2005、C#、Excel2002でExcelの操作
現在、開発環境が、 WinXP VS2005 Excel2002 なのですが、VS2005の参照の追加で、 Microsoft Excel 10.0 Object Library を追加すると、参照設定の「Excel」にビックリマークが出て、 「タイプライブラリ"Excel"のラッパーアセンブリが見つかりません。」と、 「参照コンポーネント'Excel'が見つかりませんでした。」 の2つの警告が出て、Excel操作の記述が書けません。 ちなみに、参照設定「Excel」のプロパティを見ると、パスが空になっています。 この状況で、C#でExcelを操作できるようにするにはどうしたらよいかご教授いただければ幸いですm(_ _)m
- ベストアンサー
- C・C++・C#
- EXCELに貼り付けた画像の位置を変更する方法
ASPからEXCELファイルを作成し、セルに画像を貼り付け、更に貼り付けられた画像の位置を調整したいのですが Dim objExcel fso = CreateObject("Scripting.FileSystemObject") Set objExcel = Server.CreateObject("Excel.Application") Set objExcelBook = objExcel.ActiveWorkbook Set objExcelSheets = objExcelBook.Worksheets If (fso.FileExists(Server.MapPath("【パス付画像のファイル名】"))) Then objExcelSheet.Cells(3, 18).Select objExcelSheet.Pictures.Insert(server.mappath("【パス付画像のファイル名】")).Select End If これで指定のセルに指定の画像を貼り付けることはできましたが、画像の位置を調整するコトができません。 EXCELのマクロからコードを調べたところ Selection.ShapeRange.IncrementLeft 12.75 Selection.ShapeRange.IncrementTop 7.5 という記述が書いてあったのですが、そのままASPで使えそうにはありません。 ASPでEXCELに貼り付けた画像の位置を変更する記述を教えてください。 よろしくお願いします。
- ベストアンサー
- Microsoft ASP
- VB.NET EXCEL
下記のコードで、アプリケーション実行中 EXCELが起動したままになり アプリケーション終了時に、EXCELも一緒に終了する という、タスクマネージャーに残るという動作になります。 どこの COM の扱い方がまずかったのでしょうか? 教えてください。お願いします。 ※文字数制限で、SQLコネクション周り、SQL系宣言 エラー処理を消しました。 ※EXCEL周りに関してはすべてそのままです。 変数に代入している COMオブジェクトをすべて Marshal.FinalReleaseComObject してもEXCELが終了しないので何かしら COMオブジェクトを見落としていると思うのですが どれだかわかりません。 よろしくお願いします Imports Microsoft.Office.Interop Imports System.Runtime.InteropServices Public Class Cls_Print_Excel Public Sub S_Print_Excel() 'エクセルアクセス用 Dim _xslFile As String = "C:\base.xls" Dim objExcel As Excel.Application = Nothing Dim objWorkBook As Excel.Workbook = Nothing Dim objWorkBooks As Excel.Workbooks = Nothing Dim xlSheet As Excel.Worksheet = Nothing Dim xlRange As Excel.Range = Nothing Dim xlPageSetup As Excel.PageSetup = Nothing Try objExcel = New Excel.Application objWorkBooks = objExcel.Workbooks objWorkBooks.Open(_xslFile) objWorkBook = objExcel.ActiveWorkbook xlSheet = DirectCast(objWorkBook.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet) rs = cm.ExecuteReader() I = 3 Do While rs.Read Dim AA() As String = {"B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M"} Dim K As Integer For K = 0 To 11 IN_Range(xlSheet, AA(K) & I.ToString, rs(K).ToString) Next xlRange = xlSheet.Range("3:3") xlRange.Copy() A = A + Marshal.ReleaseComObject(xlRange) xlRange = xlSheet.Range(I.ToString & ":" & I.ToString) xlRange.PasteSpecial( _ Paste:=Microsoft.Office.Interop.Excel.XlPasteType.xlPasteFormats, _ Operation:=Microsoft.Office.Interop.Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, _ SkipBlanks:=False, Transpose:=False) A = A + Marshal.ReleaseComObject(xlRange) xlRange = xlSheet.Range(I.ToString & ":" & I.ToString) xlRange = xlRange.EntireRow xlRange.AutoFit() A = A + Marshal.ReleaseComObject(xlRange) xlRange = xlSheet.Range(I.ToString & ":" & I.ToString) N = 5.5 While True If CType(xlRange.RowHeight, Double) < N Then Exit While Else N += 5.5 End If End While xlRange.RowHeight = N '高さを設定 A = A + Marshal.ReleaseComObject(xlRange) I += 1 'ループカウンタを積む Loop xlPageSetup = xlSheet.PageSetup xlPageSetup.PrintArea = "B2:M" & (I - 1).ToString A = A + Marshal.ReleaseComObject(xlPageSetup) S_filename = System.IO.Path.GetDirectoryName(_xslFile) & Format(Now(), "yyyy-MM-dd-HH-mm-ss") & ".xls" objWorkBook.SaveAs(S_filename) objWorkBooks.Close() A = A + Marshal.ReleaseComObject(objWorkBooks) objExcel.Quit() A = A + Marshal.ReleaseComObject(objExcel) Exit Sub Catch ex As Exception Finally End Try End Sub Private Sub IN_Range(ByRef wSheet As Microsoft.Office.Interop.Excel.Worksheet, _ ByVal iCell As String, _ ByVal Value As String) Dim rng As Excel.Range = wSheet.Range(iCell) rng.Value = Value Marshal.FinalReleaseComObject(rng) rng = Nothing End Sub End Class
- 締切済み
- Visual Basic
- .Netでエクセルを操作する環境
環境:Visual Studio 2010 + C# + Microsoft.Office.Interop.Excel を使ってWindows Formからエクセルブックを操作(オープン、編集、保存) しようと考えています。 そこで質問なのですが、 Microsoft.Office.Interop.Excelは、Office(エクセル)がインストールされていない環境 でも使用できますか? ご存知の方がいたら教えて下さい。よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- vb.netからエクセルファイルを開きたいのですが
vb.netからエクセルファイルを開きたいのですが、 オフィス2010をインストールしてから動作しなくなりました。 ------------------------------------------------------------------------ Imports Microsoft.Office.Interop Sub ExcelOpen() Dim ExcApp As Excel.Application Dim book As Excel.Workbook Dim MyPath As String MyPath = "C:\Excel.xlsm" ExcApp = CreateObject("Excel.Application") ExcApp.Visible = True book = ExcApp.Workbooks.Open(MyPath) ExcApp = Nothing End Sub ------------------------------------------------------------------------ これで2007の時は起動してたのですが、2010だとダメです。 Microsoft Excel 14.0 Object Libraryに参照設定しています。 実行すると、 ExcApp.Visible = True の部分で サーバーによって例外が返されました。 (HRESULT からの例外: 0x80010105 (RPC_E_SERVERFAULT)) となります。 どうすればいいでしょうか?ご教授よろしくお願いします。
- ベストアンサー
- Visual Basic
- VBでエクセルのデータを取り込む方法
VB2010にエクセル(2003)のデータを取り込みたいのですが、うまくいきません。 どうすればよいのでしょうか。 外部アプリなので、Public Class Form1の前にImports Excel = Microsoft.Office.Interop.Excel と記入、dim xlapp as excel.apllcation dim xlbook as exce.book dim xlsheets as excel.sheets と記入してみますがこの時点でコードエラーとなります。(ネットで調べこのように記述しました) どうすればいいでしょうか。 すみません。vb初心者なので詳しく教えていただくとたすかります。 よろしくお願いします。
- 締切済み
- Visual Basic
- 「エクセルファイルが開いていたら開かない」としたい
「エクセルファイルが開いていたら開かない」としたいです。 VB2010です。 -------------------------------------------------------------- Imports Microsoft.Office.Interop '参照設定済み Module Module1 Sub ExcelOpen() Dim ExcApp As Excel.Application Dim book As Excel.Workbook Dim MyPath As String MyPath = "C:" ExcApp = CreateObject("Excel.Application") ExcApp.Visible = True book = ExcApp.Workbooks.Open(MyPath & "\test.xlsm") End Sub End Module -------------------------------------------------------------- で、ファイルを開くのですが、既にファイルが開いている場合は、2個開いてしまい、 最後に開いたファイルが読み取り専用になってしまいます。 IFで、開いているかどうかを取得して、 開いているのなら「既に開いています」として、ExitSubがしたいです。 ご協力よろしくお願いします。
- ベストアンサー
- Visual Basic
お礼
KenKen_SP様、的確な回答をありがとうございます。 >このコードなら参照設定は解除して、変数を Object 型に >変えてみたら?確認してませんが。 まさにその通りです。 Dim objExcel As Microsoft.Office.Interop.Excel.Application Dim objExcelBook As Microsoft.Office.Interop.Excel.Workbook Dim objExcelSheet As Microsoft.Office.Interop.Excel.Worksheet を Dim objExcel As System.Object Dim objExcelBook As System.Object Dim objExcelSheet As System.Object に変更したらエラーがなくなりました。 本当にありがとうございました。 また、row/colについてのアドバイスもありがとうございました。 的確なアドバイスに非常に感謝しております。