tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^10: .NETからExcelを操作してコントロールをコピペするには
投稿日: 2007/12/26(Wed) 01:56
投稿者魔界の仮面弁士
ということはすなわち、
> Dim sht As Microsoft.Office.Interop.Excel.Worksheet = CType(objExcel.CurWorkbook.Sheets.Item("C:\tmp.xls"), Excel.Worksheet)
ここまでは、何の問題も無く実行される……という事だと思ってよいのですよね?

私の目には、"C:\tmp.xls" は(シートではなく)ブックを表す文字列に見えたため、
かなり奇妙なコードに映った(間違っているようにも感じられた)のですが、実際のところ、
objExcel などの仕様は全くわからないので、これが正しいかどうかは判定できず、
> 他のプログラムでは問題なく動作しているということなので大丈夫だと思います。
という、音羽さんの言葉をそのまま信じるしかなかったりします。


という事で、その次の行から見ていきますと。


> sht.ActiveSheet
これは間違っていると思いますよ。
普通は、Worksheet に ActiveSheet というメソッドは無いはずですから。

それとも、音羽さんの環境では Worksheet クラスに ActiveSheet メソッドがあるのですか?


> ActiveSheet.Shapes("BarCodeCtrl1").Select
それでは駄目ですよ。
この "ActiveSheet" という変数(?) のデータ型は何であり、
また、この変数(?)に値を代入している部分はどこだと思いますか?

たとえば VB の場合、別フォームの TextBox を操作しようとしたら、
 フォーム変数.TextBox1.Text = "AAA"
となりますが、フォーム内で、自分自身の TextBox を操作する場合は、
 TextBox1.Text = "AAA"
のように、フォーム名を省略して操作できますよね。

それと同じことで、Excel VBA の場合は、「Excel 自身」のオブジェクトに対しては、
いきなり ActiveSheet などから書き始める事ができますが、外部から操作する場合は、
「どの Excel の ActiveSheet なのか」を明らかにしなければならないのです。

(単に ActiveSheet だけだと、たとえば Excel を同時に複数起動して制御しようと
していた場合、どちらを制御すれば良いのか、わかりませんよね?)


> Selection.Copy
これも同様です。
この Selection という変数(?) のデータ型は何ですか?
また、この変数に値を代入している部分はどこですか?

VBA の場合は、Application 自身の Selection プロパティを意味しますが、
外部から操作する場合は、どのオブジェクトの Selection なのかを修飾して、
 〜.Selection.Copy
などとしなければなりません。
(より厳密に言えば、そもそも Active/Select系のメンバを使うべきでは無いのですが)


> Range("A20").Select
> ActiveSheet.Paste
これも同じ。
この Range や ActiveSheet といった(以下略)


> ということは上のコードで問題はないということでしょうか?
ということで、objExcel.CurWorkbook などの実装が何であれ、少なくとも
それ以降の行に関しては、明らかに間違っているかと思います。


また、冒頭の objExcel.CurWorkbook の行が正しいのかどうかについては、
「独自に定義してある関数集団」とやらの仕様が公開されていない以上、
正しいコードは、音羽さん自身が模索するしか無いと思います。
(もしくは独自関数を一切使わず、他の方でもわかる一般的な記述で書き直すか…)

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。