質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

2726閲覧

Visual Basic

wak_tec

総合スコア11

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

1クリップ

投稿2016/09/22 13:21

###前提・実現したいこと
Visual Basicにて、Excelを操作するプログラムを作成しており、ボタンをクリックした際に指定したセルに移動して値を入力する機能を実装したいのですが、実行すると下記のエラーが表示されてしまいます。

###発生している問題・エラーメッセージ

オブジェクト参照がオブジェクト インスタンスに設定されていません。

###該当のソースコード

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim myXls As Microsoft.Office.Interop.Excel.Application Dim sheet As Microsoft.Office.Interop.Excel.Worksheet Dim x As String x = "C:\vb\Test.xlsm" myXls = CreateObject("Excel.Application") myXls.Application.Visible = True myXls.Workbooks.Open(x) sheet = myXls.Worksheets(1) sheet.Cells(1, 1) = "ok" End Sub

###試したこと
Rangeオブジェクトでセルを指定してみましたが、やはり同じメッセージ表示されてしまいます。

###補足情報(言語/FW/ツール等のバージョンなど)
使用しているのはVisual Studio 2008で、.Net Frameworkは3.5です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

vbnet

1Dim myXls As Microsoft.Office.Interop.Excel.Application

と記述されているということはCOM参照しているのですよね?
であればCreateObjectを使わず

vbnet

1Dim myXls As New Microsoft.Office.Interop.Excel.Application

とその場でインスタンス化してしまっていいのではないですか?
CreateObjectObject型で返ってくる為、パフォーマンス的にも不利です(とは言え体感できるような差はありませんが…)
CreateObjectを使う目的がマシンにインストールされているExcelのバージョンに依存しないプログラムを作ることであるなら、myXls sheet共にObject型であるべきです。そしてCOM参照をしてはいけません。

ところでレジストリにHKCR\Excel.Applicationは存在していますか?
なければ適切にインストールされていない可能性があります。
Excelの実行ファイルを/regserverオプションを付けて実行してみてください。

なお、Excel.Applicationの他にExcel.Application.14などのバージョン番号を付けてインスタンス化する方法もありますので(あまり推奨はされませんが)併せて覚えておくと役に立つこともあるかもしれません。

【追記】
コードを再読しました。

vbnet

1sheet = myXls.Worksheets(1)

とされているところ、ここが問題があるような気がします。
WorksheetsオブジェクトはWorkbookオブジェクトが持っています。
従って

vbnet

1Dim books = myXls.Workbooks 2Dim book = books(1) 3Dim sheets = book.Worksheets 4sheet = sheets(1)

としてみてください。
確かにMSDNを見るとApplicationオブジェクトにもWorksheetsプロパティはあると書かれていますが、私の記憶ではこれを参照したことがありません。
今手元にWindows機がない為、ある程度憶測になってしまうことはお許しいただきたい…。

投稿2016/09/23 07:16

編集2016/09/23 07:33
htsign

総合スコア870

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wak_tec

2016/09/26 15:52

丁寧な回答ありがとうございます。アドバイスを参考に試行錯誤してた結果、無事に解決出来ました。
guest

0

こうかな。

VB

1Set myXls = CreateObject("Excel.Application")

投稿2016/09/23 00:27

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wak_tec

2016/09/26 15:52

回答ありがとうございます。参考にさせて頂き、無事に解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問