回答編集履歴

1

typoの修正と追記

2016/09/23 07:33

投稿

htsign
htsign

スコア870

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  とその場でインスタンス化してしまっていいのではないですか?
18
18
 
19
- `CreateObject`は`Object`型で返ってくる為、パフォーマンス的にも不利です(とは言え体感できるような差はありせんが…)
19
+ `CreateObject`は`Object`型で返ってくる為、パフォーマンス的にも不利です(とは言え体感できるような差はありせんが…)
20
20
 
21
21
  `CreateObject`を使う目的がマシンにインストールされているExcelのバージョンに依存しないプログラムを作ることであるなら、`myXls` `sheet`共に`Object`型であるべきです。そしてCOM参照をしてはいけません。
22
22
 
@@ -31,3 +31,41 @@
31
31
 
32
32
 
33
33
  なお、`Excel.Application`の他に`Excel.Application.14`などのバージョン番号を付けてインスタンス化する方法もありますので(あまり推奨はされませんが)併せて覚えておくと役に立つこともあるかもしれません。
34
+
35
+
36
+
37
+
38
+
39
+ 【追記】
40
+
41
+ コードを再読しました。
42
+
43
+ ```vbnet
44
+
45
+ sheet = myXls.Worksheets(1)
46
+
47
+ ```
48
+
49
+ とされているところ、ここが問題があるような気がします。
50
+
51
+ `Worksheets`オブジェクトは`Workbook`オブジェクトが持っています。
52
+
53
+ 従って
54
+
55
+ ```vbnet
56
+
57
+ Dim books = myXls.Workbooks
58
+
59
+ Dim book = books(1)
60
+
61
+ Dim sheets = book.Worksheets
62
+
63
+ sheet = sheets(1)
64
+
65
+ ```
66
+
67
+ としてみてください。
68
+
69
+ 確かにMSDNを見ると`Application`オブジェクトにも`Worksheets`プロパティはあると書かれていますが、私の記憶ではこれを参照したことがありません。
70
+
71
+ 今手元にWindows機がない為、ある程度憶測になってしまうことはお許しいただきたい…。