• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:RefEditで完全にハマっています。)

RefEditで完全にハマっています。

このQ&Aのポイント
  • RefEditを使用している際に問題が発生しています。UserFormにRefEditを貼り付け、表示した後、RefEditの右ボタンをクリックすると、formが自動的に閉じてセルの範囲選択状態になります。しかし、この状態から戻ると、formとエクセル自体の動作が停止してしまいます。
  • RefEditから制御が戻らないため、RefEditを使用した後もエクセルの動作が停止してしまいます。また、formのshowmodalをtrueにするとformが勝手に閉じてしまう問題も発生します。
  • RefEditの設定やformとの関係に問題があるようですが、具体的な解決方法はわかりません。この問題に詳しい方からの助言をお待ちしています。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。KenKen_SP です。 ざっと MSDN ライブラリの情報を拾ってみました。 基本的に ReEdit コントロールは問題アリアリです。標準コントロール ではないためか、このようなエラーがいつまでも放置されてます。 「修正しました」と発表されても実は修正されていなかったりしますの で、できれば使うのを控えた方が吉でしょう。 ・[XL2000] RefEdit コントロール使用時にキーボード ショートカットを使用して範囲を指定できない http://support.microsoft.com/default.aspx?scid=kb;JA;291110 ・[XL2000] RefEdit コントロールを使用する Excel インスタンスを複数開くとマクロの起動時に VBA エラーが発生する http://support.microsoft.com/default.aspx?scid=kb;JA;320262 ・[XL2000] ユーザー フォームを閉じられない現象について http://support.microsoft.com/default.aspx?scid=kb;ja;210759 ・[XL2000] UserForm を閉じた後に、 RefEdit コントロール が表示されます。 http://support.microsoft.com/default.aspx?scid=kb;ja;213673 ・Excel マクロで RefEdit コントロールを使用する場合、一部のイベントが実行しません。 http://support.microsoft.com/default.aspx?scid=kb;ja;870756 ・RefEdit コントロールはモードレスフォームでは使えない(英語) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/off2000/html/f3objrefedit.asp 代替案ですが、Inputbox メソッドで同等のことが可能です。ただし、 アクティブブック内しかできませんが。 1. 標準モジュールに以下のユーザー定義関数をコピペ Function GET_ADDRESS(ByRef strCAPTION) As String   Dim rngTEMP As Range   On Error Resume Next   Set rngTEMP = Application.InputBox( _     Prompt:=strCAPTION, _     Type:=8)   If rngTEMP Is Nothing Then     GET_ADDRESS = "False"   Else     GET_ADDRESS = rngTEMP.Parent.Name & "!" _            & rngTEMP.Address   End If   Set rngTEMP = Nothing   On Error GoTo 0 End Function 2. セルアドレスを表示するテキストボックスを配置 3. 2.の横にこの関数を呼び出すボタンを配置 4. 3.のボタンに以下のコードを追加 Private Sub CommandButton1_Click()   Dim strADDRESS As String   'フォームを一時的に非表示   Me.Hide   'ユーザー定義関数を呼び出してセルアドレスを取得   strADDRESS = GET_ADDRESS("セルを選択")   '文字列で False ならキャンセル   If UCase$(strADDRESS) <> "FALSE" Then     Me.TextBox1.Text = strADDRESS   End If   'フォーム再表示   Me.Show End Sub

vba_minarai
質問者

お礼

KenKen_SP様、ご指導ありがとう御座います。KenKen_SP様のご指導が無ければ、1週間は悩んで、自己解決できずに諦めざるを得ない結果だったと思います。本当にありがとう御座います。 その上、改善ルーチンまで、伝授して頂いて、感謝の限りです。しかし、同等のコントロールを自作してしまうなんて、力技ならぬ知恵技ってところでしょうか?感動を感じました。早速利用させて頂きます。手点数が、少ないですが御了承ください。 また、宜しくお願い致します。 (VBAって奥が深くて面白い半分、頭痛の種半分って感じでハマっています。自分の頭の硬さを痛感します。)