2024年のうちにやっておきたいこと、ここで宣言しませんか?

初心者で初心者的な質問で恐縮です。

コントロールでcombobox1を作りました。

private sub combobox1_change()
dim w as integer
w=sheets("work").range("A1")
sheets("work").range("A2").value="=match(a1,sheet2!a:a,0)"
-----------------「sheet2」は「sheet3」だったり「sheet4」だったり、色々変わります。
----中略----
end sub

combobox1は正常に動くのですが、EXCELを終了する時に(保存してもしなくても)
必ず「Sheetsメソッドは失敗しました_Globalオブジェクト」と出ます。
デバックを確認すると、
w=sheets("work").range("A1")
の部分です。

色々調べてみたのですが、原因がよく分かりません。
分かる方、いらっしゃいましたら教えて下さい。

A 回答 (4件)

VBの話となると私は門外漢ですし、頼りになる人が登場されたので


これにて失礼いたします。

最後に、
AccessでExcelをOLEで操作したときに非常に参考となったHPです。
一読されることを強~くお勧めします。

消えないExcelのプロセス
http://homepage1.nifty.com/rucio/main/technique/ …
    • good
    • 1

こんにちは。



>ちなみにvisual basicの vrは6.0なのですが…。

って、Visual Basic 6 なのですか?
それなら、

w=sheets("work").range("A1") 

そのコードで、必ず「Sheetsメソッドは失敗しました_Globalオブジェクト」と出ます。
Applicationオブジェクトが見出せないので、Sheetsメソッドに失敗して、エラーが出ます。

最初からコードを見せていただかないと分かりません。

それに、Double 型、Integer型などの区別がきちんとついていないと、途中から抜き出して教えてもらうというのは、ちょっと無理があります。ただし、今回のエラーとは関係がありません。型の大きさが小さくて大きな数字が入れば「オーバーフロー」が出るだけです。

>EXCELの強制終了でした(汗
それに、強制終了って、仮のコードをそのまま貼り付けたのではありませんか?私は、あくまでも、親オブジェクトを明示的に入れて書いただけなのです。
    • good
    • 0

こんばんは。



>必ず「Sheetsメソッドは失敗しました_Globalオブジェクト」と出ます。
たぶん、シートの親(ブック)が違っているような気がします。

ご質問には書かれていない、複数のブックを開いているという条件があるのではないでしょうか?

そのw がどこに行くのか分かりませんし、#1 さんがご指摘のように、エラーの可能性が出ます。ただし、「オーバーフロー」になりますが。

Dim w As Long
w=Workbooks("test1.xls").Worksheets("work").Range("A1").Value
Workbooks("test1.xls").Worksheets("work").Range("A2").FormulaLocal = "=MATCH(A1,SHEET2!A:A,0)"

別に、FormulaLocal プロパティでなくても、Value でも可能です。若干、遅いですが。
Sheets が間違いではありませんが、私には、雑な気がします。

それから、なるべく、Visual Basic Editor 画面のままを貼り付けてくださいね。コードは、メモ帳にテキストで貼り付けられます。

この回答への補足

何度もすみません。

>ご質問には書かれていない、複数のブックを開いているという条件があるのではないでしょうか?
複数のブックは、開いてないです。

補足日時:2006/12/27 18:16
    • good
    • 0
この回答へのお礼

回答、ありがとうございます。

>それから、なるべく、Visual Basic Editor 画面のままを貼り付けてくださいね。コードは、メモ帳にテキストで貼り付けられます。
そうしたかったのですが、ネットに繋がっていないパソコンで…
別の場所にあって…-RWも対応してないようなパソコンで…
手打ちでコードを書いてしまい申し訳ないです。

Wendyさんのコードを実行してみると…
EXCELの強制終了でした(汗
ちなみにvisual basicの vrは6.0なのですが…。

お礼日時:2006/12/27 18:15

> dim w as integer


整数型で宣言していて
> w=sheets("work").range("A1")
ではRangeオブジェクトを代入しているので
エラーになるのでは?
識者の説明を期待して下さい (^_^;)

dim w as Double
w=sheets("work").range("A1").Value
ではどうなりますか?

なお W はアップされたコードの中では使用されていませんけど?
    • good
    • 0
この回答へのお礼

>なお W はアップされたコードの中では使用されていませんけど?
match関数が違ってました。申し訳ありません。
正しくは…
sheets("work").range("A2").value="=match(a1,"& w &"!a:a,0)"
です。

dim w as double
にしても同じエラーが返ってきました。。
本当にありがとうございます。
doubleも使ったことがなかったので、とっても勉強になります。

お礼日時:2006/12/27 18:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報