• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル2003→2016変換でマクロ動かない?)

エクセル2003→2016変換でマクロ動かない?

このQ&Aのポイント
  • エクセル2003で動いたマクロが、エクセル2016に互換モードの変換でVerUPすると、マクロの途中でエラー停止してしまいます。
  • (1)実行時エラー'438'「オブジェクトは、このプロパティまたはメソッドをサポートしていません」と表示され、Worksheets("111111").SpinButton2.BackColor = &H8000000Fで停止。
  • (2)UserForm2.Showで停止。それもコメントアウトで進めると、その後の処理がだいぶすっ飛ばされてしまったりしているのですが、どう直せばよいのか分かりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.13

SendKeysを試すのにSet obj とは関係がないと思いますが…。 エラーメッセージでGoogleででも検索して何がいけないのかご自身で見つけてください。

osiete-2012
質問者

お礼

ご返事が遅くなり申し訳ありません。 いろいろ「Excel2016 vba ComboBox 自動で開く ・・・」などと検索しながら試しているのですが、未だに解決できていません。 どうしても、Excel起動直後のUserFormからシート上のComboBoxを開ける際に、 Set obj = ActiveWorkbook.Worksheets("111111").OLEObjects("ComboBox3").Object の部分でエラーとなり止まってしまいます。しかし、そのまま、起動マクロの Private Sub Workbook_Open() から再実行すると、なぜか止まらずにDropdownできて、次に進むのです。 そこで、全くの新規にマクロ作成してみると、上記構文によってすんなり動くのは確認できました。 ので、まだ時間はかかりそうですが、双方の足し算と引き算を繰り返しながら原因を見つけたいと思います。

osiete-2012
質問者

補足

質問者です。 大変遅くなりましたが、やっと今回の原因がわかりました。 Excel2003の時に作成した30個位あるうちの1個目の「ComboBox1」が、Excel2016に 互換モード変換した時に内部でクラッシュしていたようです。 見た目や起動エラー後の再実行時の動きは問題ないのに、最初のExcel起動直後に、別の 「ComboBox3」とか「SpinButton2」とかでデバッグ停止したり、それをスルーすると全然関係ない「ComboBox1」の直後まで飛んだりして、正常な動きではありませんでした。 そこで、そのsheet上の「ComboBox1」のみの名前を「ComboBox111」とかに代えてみ ると、その修正だけですべての動きが正常に戻りました。 「ComboBox1」の部分の互換変換がうまくいっていなかった模様です。結果的に、CreateObject()やOLEObject()は入れなくてもよいことも確認できました。 色々とありがとうございました。

その他の回答 (13)

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.14

> やっと今回の原因がわかりました。 なかなか面倒なことになっていたんですね。うまく原因をとらえられて正常な状態になって良かったです。

osiete-2012
質問者

お礼

当初、その辺りの自動dropdownが動きが悪いので、何回も修正を繰り返していたのを思い出しました。全部、最初から作り直せば普通に動いたのでしょうけど、そういうわけにもいかないので、少しずつ戻りながら作り直してみて、4つ目位でやっと見つかりました。 大変お世話になりました。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.12

> 前は  SendKeys "%{down}" で動いていました。 該当シートが前面にあれば今でも動きます。 > このように同じ名前があると指定が難しいのでしょうか? どこにあるコントロールか指定すればいいと思います。 Worksheets("Sheet1").ComboBox1.DropDown UserForm1.ComboBox1.DropDown 同時にドロップダウンはできません。

osiete-2012
質問者

お礼

たびたびありがとうございます。 > SendKeys "%{down}" を試そうとしているのですが、 その前の Dim obj As Object Set obj = ActiveWorkbook.Worksheets("111111").OLEObjects("ComboBox3").Object がエラーとなり、どうも動きません。 何が足りないのでしょうか?

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.11

Worksheets("111111").Combobox3.Activte Sendkye %{Down} は Worksheets("111111").ComboBox3.Activate SendKeys "%{DOWN}" のタイプミスだと思いますが、VBEのウィンドウを前面にして実行してるのでしたら SendKeys "%{DOWN}" はVBEのウィンドウにたいして行われますのでコンボボックスは開きません。

osiete-2012
質問者

お礼

前は  SendKeys "%{down}" で動いていました。 改めて、こちらも気がついたのですが、ConboBox3 は、ユーザーフォーム1を閉じるボタンの中で、シート上にある、次のConboBox3 を開こうとしていました。 このユーザーフォームとシート上のConboBox等とを、次々と自動で開いて進めて行くようにしていたのですが、 CommandButtonなどは、どちらにも同じ名前があるのに気がつきました。 このように同じ名前があると指定が難しいのでしょうか?

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.10

> Worksheets("111111").Combobox3.Activte Combobox3でしたら Set obj = ActiveWorkbook.Worksheets("111111").OLEObjects("ComboBox3").Object にして駄目だったという事でしょうか。 > 新バージョンではどのようにすればよいでしょうか? .DropDown が使えないのだとしたらわかりません。

osiete-2012
質問者

お礼

一旦、何かで停止してからその通り入れ直し再実行すると、そこは通るのですが、そのまま保存してからの起動直後はダメでした。 また、その次の SendKeys "%{down}" をやめて Obj.DropDown に変えると、開く時もあるのですが、選択しても開いたままで閉じない現象があったり?

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.9

> ここではOLEObjects()となっているのはなぜでしょうか? こちらを参考にしました。 OLEObjects オブジェクト (Excel) https://docs.microsoft.com/ja-jp/office/vba/api/excel.oleobjects

osiete-2012
質問者

お礼

ありがとうございます。 やはり、OLEObjectsはどういう使い方をするのか、CleateObjectsがどういう意味かがわかりません。 これまでは、 Worksheets("111111").Combobox3.Activte Sendkye %{Down} で、コンボボックスを自動で開いていたのですが、 新バージョンではどのようにすればよいでしょうか?

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.8

コントロールを作成した状態でMicrosoft Forms 2.0 Object Libraryを外すことができないので、以下のコードがLibraryがない状態で有効かどうかは分かりませんが参考までに。 ただし .Activate はダメでした。 Dim obj As Object Set obj = ActiveWorkbook.Worksheets("Sheet1").OLEObjects("ComboBox1").Object obj.BackColor = &H8000000F obj.Clear obj.AddItem "TEST1" obj.AddItem "TEST2" obj.DropDown Set obj = Nothing

osiete-2012
質問者

お礼

たびたびありがとうございます。 ここではOLEObjects()となっているのはなぜでしょうか? これでもConboBoxの自動DropDownはダメでした。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.7

> 何か、別の方法が必要なのでしょうか? ちょっと方法が分からないです。

osiete-2012
質問者

お礼

なかなか難しいですね。基本を知ってないと。

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.6

> 何か、大前提での設定があるのでしょうか? 特に設定等は意識せずにCreateObjectを利用したりしますので、何か基本的な設定があるのかはちょっと不明です。

osiete-2012
質問者

お礼

たびたびありがとうございます。 ボタン等の.BackColorでの色替えについては、何か所かはCreateObject ()で対応できたのですが、 コンボボックスの選択.Active(DropDown)のところでは、やはり止まってしまいます。 何か、別の方法が必要なのでしょうか?

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.5

> フォームコントロールかもしれないのですが、どのようにすれば見分けれるのでしょうか? Worksheets("111111")にあるスピンボタンだと思いますが フォームコントロールだと Worksheets("111111").Shapes("Spinner 2") とかで指定されると思います。 SpinButton2 とかの名前は変更していなければActiveXのスピンボタンの名前ですし.BackColorプロパティもActiveXのスピンボタンものだと思います。 ただ、勘違いしてたのですが、ActiveXのスピンボタンも参照設定はMicrosoft Forms 2.0 Object Libraryで大丈夫でした。 余計な事を言って無駄な手間をかけさせてしまいすみませんでした。

osiete-2012
質問者

お礼

たびたびありがとうございます。 参照設定はMicrosoft Forms 2.0 Object Libraryが自動作成できるのが確認できましたが、他のpcでも使用するため CreateObject ()で行いたいのですが、色替えやコンボボックス選択ところ等で止まってしまいます。何か、大前提での設定があるのでしょうか?

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.4

> ユーザーフォームを新たに作成すると、参照設定リストには表示されましたが、動きはかわりませんでした。残念。。。 SpinButton2がActiveXオブジェクトみたいなので これに関して見直しされていない様でしたら見直してみてください。 第138回.外部ライブラリ(ActiveXオブジェクト) https://excel-ubara.com/excelvba1/EXCELVBA438.html

osiete-2012
質問者

お礼

ありがとうございます。 Active X コントロールのつもりでCreateObject ()で色々やってみましたが、ダメでした。 フォームコントロールかもしれないのですが、どのようにすれば見分けれるのでしょうか?

関連するQ&A