アプリ版:「スタンプのみでお礼する」機能のリリースについて

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の設定の関係のような気がしますが、全く判りません)
宜しくお願い致します。

A 回答 (1件)

こんにちは。

KenKen_SP です。

ざっと MSDN ライブラリの情報を拾ってみました。

基本的に ReEdit コントロールは問題アリアリです。標準コントロール
ではないためか、このようなエラーがいつまでも放置されてます。
「修正しました」と発表されても実は修正されていなかったりしますの
で、できれば使うのを控えた方が吉でしょう。

・[XL2000] RefEdit コントロール使用時にキーボード ショートカットを使用して範囲を指定できない
http://support.microsoft.com/default.aspx?scid=k …

・[XL2000] RefEdit コントロールを使用する Excel インスタンスを複数開くとマクロの起動時に VBA エラーが発生する
http://support.microsoft.com/default.aspx?scid=k …

・[XL2000] ユーザー フォームを閉じられない現象について
http://support.microsoft.com/default.aspx?scid=k …

・[XL2000] UserForm を閉じた後に、 RefEdit コントロール が表示されます。
http://support.microsoft.com/default.aspx?scid=k …

・Excel マクロで RefEdit コントロールを使用する場合、一部のイベントが実行しません。
http://support.microsoft.com/default.aspx?scid=k …

・RefEdit コントロールはモードレスフォームでは使えない(英語)
http://msdn.microsoft.com/library/default.asp?ur …

代替案ですが、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
    • good
    • 1
この回答へのお礼

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

お礼日時:2005/11/07 11:29

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

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