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

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

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

UserFormにRefEditを貼り付けて、showします。 RefEditの右ボタンをクリックすると、formが自動的に閉じて、セルの範囲選択状態になります。(フォームのタイトルは表示されていません)任意のセルを選択してエンターキーを押すと、選択範囲が点線で囲まれた状態で、formに戻ります。ここからが問題です。 formの中はもちろん、エクセル自体もなにも動作しないようになってしまいます。ウィンドウズのスタートのエクセルをクリックしてみると一度閉じて再度クリックするとRefEditのセル範囲選択状態が消えていません。(formの後ろでまだ動いている)多分、RefEditから制御が帰ってこないからだと思いますが、改善の方法がわかりません。formとRefEditの設定の関係だと思います。ためしに、別のformを作成し、RefEditを貼り付けて動作確認してみると正常に動作します。 何の設定が間違っているのでしょうか?どなたか?教えて頂けないでしょうか?宜しくお願い致します。 (formのshowmodalをtrueにするとformに戻ってきたときにform内の任意の場所をクリックすると勝手にformが閉じます。bookを閉じずに、再びformを表示しRefEditを選択した後、formに戻ってくると今度は、フォーム内のマルチページは選択できるようになりますが、閉じるボタンが効きません。formとRefEditの設定の関係のような気がしますが、全く判りません) 宜しくお願い致します。

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

  • ベストアンサー
  • 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って奥が深くて面白い半分、頭痛の種半分って感じでハマっています。自分の頭の硬さを痛感します。)

関連するQ&A

  • 2次配列について Null値?

    例えば、あるセル範囲(ここではA1:B3としておきます)に [ 1 ] [ 4 ] [ 2 ] [ 5 ] [ 3 ] [ ] というように数値が入力されているとします。 RefEdit1つと[実行]ボタン1つ、[キャンセル]ボタン1という簡単なユーザーフォームを作成して以下のようなコードを書きます。 ' 実行ボタンに登録したコード Private Sub CommandButton1_Click() Dim myRange As String Dim dat As Variant myRange = RefEdit1.Text dat = Range(myRange) '選択したセル範囲のデータをdatに代入 Unload UserForm1 'ユーザーフォームの終了 End Sub ' キャンセルボタンに登録したコード Private Sub CommandButton2_Click() Unload UserForm1 'ユーザーフォームの終了 End Sub それで質問なのですが、この場合、dat(3,2)には何が入っていることになっているのでしょうか。Null値なるものが代入されているのでしょうか、、、 最終的にデータ行列において、各列のデータ数を取得したいのですがどうすればよいでしょうか。1列目=3、2列目=2といったように。 もしNull値?が代入されていることになっており、2次配列においてNull値を判断する関数でもあればそれをカウントして、列数-Nullの数で取得できるだろうと考えてはいるのですが。

  • 文法 何がおかしい? VBAです

    エクセルを開いたときに、 ユーザーフォームのモーダルモードにしたくないのですが それをvbaで設定したいのですが Private Sub UserForm_Initialize() Me.Showmodal = False End Sub ではダメなのでしょうか? エラーになってしまいます。

  • エクセル不可解な現象?ではないと思うのですが。

    初歩的な質問ですがエクセルVBAの操作方法についてお尋ねします。 コントロールの編集とマクロの設定についてお尋ねします。 エクセルをたちあげ、シート1が表示されている状態にします。 次に、表示→ツールバー→コントロールボックスを表示し、コントロールボックスより シート上にコマンドボタンを配置します、CommandButton1が配置されたらこのボタンをダブルクリックするとVsualBasicEditerが立ち上がります。 プロジェクトエクスプローラーが表示され、シート1が選択されていることが確認できます。 ここで簡単なプログラムを書きます。 Sub CommandButton1_Click () UserForm1.Show End Sub 更に、挿入メニューよりユーザーフォームを挿入します。 この状態で、VsualBasicEditer上で 実行→Sub/ユーザーフォームの実行をクリックします。 プログラムが実行されUserAForm1が表示されます。 ここでUserForm1の閉じるボタンでUserForm1を閉じます。 一度プログラムを走らせると、 1:シート1に配置したコマンドボタンをクリックするとプログラムが動作する。   マクロの設定はしていないのに! 2:コマンドボタンの編集が出来なくなる。但し、新規にもう一個ボタンを配置すると   前のボタンの編集が出来るようになると同時にCommandButton1をクリックしても プログラムは走らない。 上記1、2の現象が起こります。  1について:ボタンにマクロの設定がしてないのに何故プログラムが走るのか?   このようなやり方でマクロの設定を行わないでもよいのか?  2について:一度プログラムを走らせても、新規にコントロールを追加するという操作をしないで、編集が出来るようにするにはどうすればよいか。   一度走らせたBookをそのまま保存しサイド立ち上げなおしてもボタンをクリックすればプログラムが動作します。走らせる前と後で何が変わっているのでしょうか?   何処かの設定が変わるのであればその場所を教えてください。

  • マクロ

    マクロのユーザーフォームに関してですが,RefEditコントロールで選択したセル範囲を取得したのですが,ここで取得したセル範囲が[A1:B10]のような形になっています.そこで,知りたいことが例えば[A]が何列目になるかということです.何か関数があればご教示頂けないでしょうか? よろしくお願いいたします.

  • エクセルVBAの質問です。

    エクセルVBAでユーザーフォーム上からセルを選択したいのですが、可能でしょうか? 当初はユーザフォーム上のボタンにRange("a1").selectを入れておき、ボタンをクリックするとA1セルが選択状態になり、キーボードで入力できると思ったのですが、駄目でしたorz とまぁユーザーフォーム上のボタンを押すとキーボードでセルに直接入力ができる状態にしたいです。 アドバイスの程よろしくお願いします!

  • Excelで 「任意の2つのセルを選択後、ボタンを

    Excelで 「任意の2つのセルを選択後、ボタンをクリックしたら、セルの値が入れ替わるマクロ」 を作りたいのですが、 「任意の2つのセル選択」 というところでいきなりお手上げです。 教えてください。よろしくお願いします。

  • エクセルVBAのマクロ文について

    エクセルVBAで、シート上のボタン(フォーム)をクリックすると、UserForm1が表示されてその中のTextBoxに別のシートのセルに入力したいる値を表示させたくて、以下のようにボタン(フォーム)にマクロを入力したのですが、エラーがでてきてうまくいきません。 入力したマクロが間違っているのでしょうか? Sub ボタン1_Click() UserForm1.Show UserForm1.TextBox1 = Sheets("入力").Ranges("D11").Value End Sub すみませんが、ご存知の方、教えてくださいませんか?

  • Excelマクロ:ユーザフォーム上のテキストボックスにセルの選択範囲を転記

    ユーザフォーム上のテキストボックスにセルの選択範囲(例えば "A5:M31")を転記する方法についてお知恵を拝借願えればと思います。 【前提条件】 1.ユーザフォーム(UserForm1)がモーダルで表示されています。 2.ユーザフォームが表示されている時点では、望むべきセルは選択されていません。 3.テキストボックスが2つあります(TextBox1, TextBox2)。 【やりたいこと】 1.上記の2つのテキストボックスには、それぞれ違ったセルの選択範囲を表示したい。 2.上記の前提条件において、なんらかのトリガー(例えばコマンドボタン押下)によって、マウスドラッグによりセルを選択し、その範囲をテキストボックスに記入したい。 【補足】 1.【やりたいこと】の2で記しましたトリガー(例えばコマンドボタン押下)のタイミングでユーザフォーム(UserForm1)を非表示にするのは問題ありません。 2.できれば、セル選択時の MouseUpイベントでユーザフォームに転記させたいのですが、スクロールバー等の操作によるMouseUpイベントも入ってくる可能性が大です。 以上、必要な情報に不足がございましたら補足要求で指摘して頂ければ幸いです。 どうぞ、よろしくお願いいたします。

  • エクセル2010のマウス操作について

    ウィンドウズ7でエクセル2010を使用しています。 エクセルのマウスなのですが セルを選択した時にすぐ入力モード?になってしまい、セルの選択がうまくいきません。 例えば、左クリックした状態でA1~C5までを選択しようとすると ・C5にカーソルが移動し、範囲選択ができなかったりします。 ・A1に文字を入力する状態になったりもします。 ←これが1番多いです。 ・なぜかコピーしてセルの内容をおきかえますか?と聞かれたりもします。 ・シフトキーやコントロールキーでセルを選択させれば、範囲設定ができます。 マウスで上手に範囲設定をするにはどう設定すればよいのでしょうか。

  • VB

    visual Basic 2005 expess edition を最近利用し始めたばかりの初心者です。簡単な 質問だとは思いますが宜しくお願いします。 フォームにあるラベルの中に数字が入力されているとします。 ボタンを押す(もしくはキー操作)で、その数字をエクセルへ出力したいのですがどうすればいいのでしょうか? クリップボードへコピーすることまではできたのですが それからエクセルのセルを指定してそこへペーストするという部分がわかりませんでした。 VBAだとrefeditを使って出力先のセルを指定するなどできるのですがVBだとコントロールにrefeditがないので困っています。 良い方法があれば回答お願いします。

専門家に質問してみよう