--------------------- エクセルについて ------------------
はじまり。はじまり〜。
ん〜どうしよっかな?答えるべきか、答えざるべきか、ソレが問題だ。
<な〜に悩んだふりしてんだか。そんなのオメーのキャラじゃないだろ!>
ソレもそうだな。じゃやめとこ。
<どーしてそうなるんだよ?>
だって、私のキャラじゃないから。
<だから、理由をを聞いてんじゃ!>
だって、私はCOM抜きの方針だから。
<どこにそんな事書いてあんの!>
トップページの方針・お約束にしっかりと。
<うっ。確かに。だがオレは認めんぞ!こんな逃げるようなやり方。>
ご安心あれ。これには抜け道が作ってあって、強い要望か、基本的という部分で対応しています。
ただし、私が積極的にCOM、DLL、他言語を使用する事はなく、あくまで参考程度です。
Linersとは、初心者に解かりやすいそうゆうキャラなんです。
<そーだったんだ。>
気付けよ!
で今回はモロCOM系だし、IEとEXCELで話がややこしくなっているようで・・・
私の出る幕などないや。と思っていたのですが、ツボにはまっている様子。
中身を見ると、単にシート内のコピペ。こんなんEXCELの関数で一発ジャンと思ったが、
そこはソレ、UWSCでやりたいのよね。
UWSCでも、私なら2行もあればこんな風に・・・
Excel = GETACTIVEOLEOBJ("Excel.Application")
Excel.ActiveSheet.range("B1:C1").value = Excel.ActiveSheet.range("A1").value
まあ、私などよりCOMに精通した諸先輩方に任せておけばいいやと考え、前回はパス。
でも今回は、前回の残骸があちらこちらに、ふむ。少し整理してあげるかな。
でも、いきなりコノ2行じゃね。それに、前回の件もあるし、あとで、IEに値を渡すことも考えられる。
ココは、シンプルに、そして前回つながりで、いりやさんスタイルで、;をつけて、変数を同じにして、
Excel = GETACTIVEOLEOBJ("Excel.Application");
val1 = Excel.ActiveSheet.range("A1").value;
Excel.ActiveSheet.range("B1:C1").value = val1;
ココからが本題。Linersは考え方言うんだなコレが。
でも今回はCOMなので詳しい説明は、その手の本,WEBを参考にしてくださいね。
簡単に説明すると、COMを使うには、そのアプリ内にあるオブジェクトの雛型をコピーして
型を作ります。(インスタンス生成)
その型の実際に使う要素(メンバ,メソッド)を選んで、実際に使えるオブジェクトを作ります。(オブジェクト生成)
オブジェクトとは、データ+関数のことで、データの振る舞いを知っている関数などと呼ばれます。
投稿では単に変数と言ってますが、実際にはオブジェクト。どちらかと言うと関数に近いですね。
ですから、
Excel = GETACTIVEOLEOBJ("Excel.Application");は
Excelって言う名前で、既に起動中のExcel.Applicationオブジェクトの型を使うよ〜
Excel.ActiveSheet.range("B1:C1").value = val1;は
Excel(オブジェクト)の.アクティブなシートの.範囲が"B1:C1"の.値にval1変数の値を入れるよ〜となります。
(オブジェクトを作って値を渡している。直接代入しているわけではない。)
・・・かなり無理やり表現していて、正確さに欠けるな。
まあ雰囲気さえ解かってもらえれば、それでいいのだが。
・・・それにしてもLiners様って様をつけられるほどでは・・・
どちらかと言うと、教えると言うより、一緒に考えている方ですから。
<Liners様。私は様って呼んでいいんですよね。>
ああ。天使か。勝手に呼んでクレ。
<Liners様ったら、もう!>
<オレは、ずえーったいオマエとしか呼ばんからな!>
もう、ダブルで来るなよ。ダブルで。
・・・ あの〜。 こっちは、アンタラ自体を呼んでませんから!!
おしまい。
=======================================================================
提供は: COMの扱いにCOM ATTEるLiners様。 でした。(ダジャレにもなっとらん。)
=======================================================================
======================== 以下実際の掲示板 ========================
エクセルについて うさぎ 【2004/10/03 01:04:17】[返信][削除]
またおせわになります。エクセルの値のコピーについてなんですが、同一ブック内でのコピーがうまくいきません。どうかご指南をお願いします。
A1値を同じシートのB1とC1にコピーしたいのですが。
Excel = GETACTIVEOLEOBJ("Excel.Application");
Sheet = Excel.ActiveWorkbook.ActiveSheet;
val1 = Sheet.range("A1").value;
SENDSTR(0, val1);
Excel = GETACTIVEOLEOBJ("Excel.Application");
Sheet = Excel.ActiveWorkbook.ActiveSheet;
Excel.ActiveSheet.range("A2")//●ここがわかりません
KBD(VK_CTRL,DOWN,10)
KBD(VK_V,CLICK,10)
KBD(VK_CTRL,UP,10)
同じシート内ならcopy(A1),paste(B2)のような指定はできませんでしょうか?どうぞ、よろしくお願いします。
--------------------------------------------------------------------------------
Re:エクセルについて Liners 【2004/10/03 02:40:28】HomePage[削除]
// うさぎさん、同じシート内ならクリップボードにコピーする必要も無く、当然、貼付ける必要もありません。
// またcopy(A1),paste(B2)のような指定も考える必要がありません。
// これらは単に便利な変数と見ることが出来ます。ですから、普通に値を代入するだけです。
// しかもrangeを使っていますので、Execlの範囲指定の書式がそのまま使えます。
// 最小限必要なスクリプトは、次の3行のみです。参考になさって下さい。
Excel = GETACTIVEOLEOBJ("Excel.Application");
val1 = Excel.ActiveSheet.range("A1").value;
Excel.ActiveSheet.range("B1:C1").value = val1; //●こんなに簡素♪ 説明の方が長い・・・
--------------------------------------------------------------------------------
Re:エクセルについて うさぎ 【2004/10/03 15:00:09】[削除]
Liners様、早速のご回答をありがとうございます。おかげさまでうまく出来ました。難しく考え過ぎていたようで・・・これからいろいろ試してみます。
Liners様のホームページも参考にさせて頂きます!!
ありがとうございました。