• 締切済み

sheetsメソッドの失敗

初心者で初心者的な質問で恐縮です。 コントロールで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") の部分です。 色々調べてみたのですが、原因がよく分かりません。 分かる方、いらっしゃいましたら教えて下さい。

みんなの回答

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

VBの話となると私は門外漢ですし、頼りになる人が登場されたので これにて失礼いたします。 最後に、 AccessでExcelをOLEで操作したときに非常に参考となったHPです。 一読されることを強~くお勧めします。 消えないExcelのプロセス http://homepage1.nifty.com/rucio/main/technique/teq_15.htm

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >ちなみにvisual basicの vrは6.0なのですが…。 って、Visual Basic 6 なのですか? それなら、 w=sheets("work").range("A1")  そのコードで、必ず「Sheetsメソッドは失敗しました_Globalオブジェクト」と出ます。 Applicationオブジェクトが見出せないので、Sheetsメソッドに失敗して、エラーが出ます。 最初からコードを見せていただかないと分かりません。 それに、Double 型、Integer型などの区別がきちんとついていないと、途中から抜き出して教えてもらうというのは、ちょっと無理があります。ただし、今回のエラーとは関係がありません。型の大きさが小さくて大きな数字が入れば「オーバーフロー」が出るだけです。 >EXCELの強制終了でした(汗 それに、強制終了って、仮のコードをそのまま貼り付けたのではありませんか?私は、あくまでも、親オブジェクトを明示的に入れて書いただけなのです。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >必ず「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 画面のままを貼り付けてくださいね。コードは、メモ帳にテキストで貼り付けられます。

tama_go
質問者

お礼

回答、ありがとうございます。 >それから、なるべく、Visual Basic Editor 画面のままを貼り付けてくださいね。コードは、メモ帳にテキストで貼り付けられます。 そうしたかったのですが、ネットに繋がっていないパソコンで… 別の場所にあって…-RWも対応してないようなパソコンで… 手打ちでコードを書いてしまい申し訳ないです。 Wendyさんのコードを実行してみると… EXCELの強制終了でした(汗 ちなみにvisual basicの vrは6.0なのですが…。

tama_go
質問者

補足

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

すると、全ての回答が全文表示されます。
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

> dim w as integer 整数型で宣言していて > w=sheets("work").range("A1") ではRangeオブジェクトを代入しているので エラーになるのでは? 識者の説明を期待して下さい (^_^;) dim w as Double w=sheets("work").range("A1").Value ではどうなりますか? なお W はアップされたコードの中では使用されていませんけど?

tama_go
質問者

お礼

>なお W はアップされたコードの中では使用されていませんけど? match関数が違ってました。申し訳ありません。 正しくは… sheets("work").range("A2").value="=match(a1,"& w &"!a:a,0)" です。 dim w as double にしても同じエラーが返ってきました。。 本当にありがとうございます。 doubleも使ったことがなかったので、とっても勉強になります。

すると、全ての回答が全文表示されます。

関連するQ&A