[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォームにハイパーリンクをつけた時のhideメソッド』(にも)
1-15まであるユーザーフォームでアンケートを作成してます。
まず、それぞれのユーザフォームのラベルに、ハイパーリンクを設定しています。
Range("I9").Select
With ActiveSheet .Hyperlinks.Add Anchor:=Selection, Address:="http://www.yahoo.co.jp/" On Error Resume Next .Hyperlinks(1).Follow NewWindow:=True End With Range("I9").ClearContents
これ自体はうまくいくのですが、sheet1のI15のセルにフォーム名をリスト選択で選ぶと、指定したユーザーフォームを呼び出せるようにしてあります(アンケートが長いので、中断・途中から始められるように、です)
Private Sub Worksheet_Change(ByVal Target As Range)
myForm = Sheets("Sheet1").Range("I15")
If Cells(15, 9) = myForm Then
show '起動するマクロ名
End If
ところが、これで途中から呼び出しをかけると、上記のハイパーリンク機能がうまくいきません。1クリックではなく2クリックでようやく開き、アンケート終了後にMe.hideでフォームを閉じようとしても閉じられません。何か問題があるのでしょうか?
End Sub
< 使用 Excel:Excel2003、使用 OS:WindowsXP >
これの続きですね!! 深く関わりのある内容を新規スレッドにする場合は、 リンクを貼ってください。でないと、全体が把握できないですよね!!
まず、
>それぞれのユーザフォームのラベルに、ハイパーリンクを設定しています。
これは、
Range("I9").Select With ActiveSheet .Hyperlinks.Add Anchor:=Selection, Address:="http://www.yahoo.co.jp/" On Error Resume Next .Hyperlinks(1).Follow NewWindow:=True End With Range("I9").ClearContents
これは、どのモジュールにどのようなプロシジャー名で実行しているのか明白になっていません。
同じステートメントでもコードを置くモジュールによって、動作しない場合があります。 こういう情報をはっきり記述してください。
>show '起動するマクロ名 あいまいな記述なので何をやっているのかわかりません。
>アンケート終了後にMe.hideでフォームを閉じようとしても閉じられません。 [[20140723152337]]
でMe.Hideに変更してください と記述しましたが、このハイパーリンクと絡ませなければ 正常にユーザーフォームが非表示になるのでしょうか?
そうではなく、代えてもエラーになるという事でしょうか? そうだとしたら、これもどのモジュールのどのようなプロシジャーに記述しているのか はっきり記述してください。
全体的にコードが断片的に記述されているだけなので 再現手順があいまいになっています。
どのモジュールに(標準モジュールとかシートモジュールとか ユーザーフォームのモジュールとか)どのようなプロシジャーを記述する という事前設定する内容をはっきり記述してください。 本来は、ユーザーフォームのコントロールの種類や配置だってきっちり記述しなければなりません。
これらの事前に設定する内容をはっきり記述した上で 閲覧者が不具合に遭遇できる操作手順を 箇条書きに記述する。
にもさんの 記述どおりに操作すれば、「ほら、こういう現象になるでしょ」というような再現手順書を記述してください。
幸運にも遭遇できたエラーです。再現手順書がしっかりしていれば、沢山な方に 再現してもらえますよね?
(ichinose) 2014/07/25(金) 06:16
ありがとうございます!
そうですよね。大変失礼致しました。ご助言のとおり、一度全体を整理してみます。
条件1
ユーザーフォームを使って15個のアンケートを作成。ユーザーフォームのオブジェクト・構成は全て一緒。ラベルに書き込んである質問内容が違うだけ。シート1にユーザーフォーム呼び出しボタンを設置し、シート2に結果を記述。また、アンケート自体が長いので、途中で中座したときのために、アンケートを途中から呼び出すためのマクロも設置。シート1のI15にアンケート名(ユーザーフォーム名)を入力すると、そのフォームを呼び出せる、という設定になっております。
シート1上に設定されたコード
1、アンケート開始用の呼び出しボタンに登録したコード
Private Sub アンケート開始_Click()
アンケート1.show
End Sub
2、アンケート続きから用に、シート上に直接書いたコード
Private Sub Worksheet_Change(ByVal Target As Range)
myForm = Sheets("Sheet1").Range("I15")
If Cells(15, 9) = myForm Then
show '起動するマクロ名
End If
End Sub
↑ここで記載されているshowコードは標準モジュール1に以下のとおりに設定してあります。
Sub show()
Dim myForm As String
myForm = Sheets("Sheet1").Range("I15")
On Error Resume Next
UserForms.Add(myForm).show
End Sub
2
フォームはチェックボックスと書き込み形式で作成。フォーム上に、参考資料へと飛ぶリンクと、
『登録』『クリア』『終了』『次頁へ』のコマンドボタンを作成。中に記載されているコードは、アンケート15個分すべて一緒。以下の5種類です。
リンクコード
Range("I9").Select
With ActiveSheet .Hyperlinks.Add Anchor:=Selection, Address:="http://www.yahoo.co.jp/" On Error Resume Next .Hyperlinks(1).Follow NewWindow:=True End With Range("I9").ClearContents
登録コード
Private Sub 登録_Click()
Dim Rw As Long
With Sheets("Sheet2")
.Cells(1, 3).Value = yes1.Value .Cells(2, 3).Value = no1.Value .Cells(3, 3).Value = yes2.Value .Cells(4, 3).Value = no2.Value .Cells(5, 2).Value = toi3.Value .Cells(6, 3).Value = yes4.Value .Cells(7, 3).Value = no4.Value .Cells(8, 2).Value = toi5.Value
End With
End Sub
クリアコード
Private Sub 削除_Click()
yes1.Value = False no1.Value = False yes2.Value = False no2.Value = False toi3.Value = ClearContents yes4.Value = False no4.Value = False toi5.Value = ClearContents
End Sub
終了コード
Private Sub 終了_Click()
Me.Hide
End Sub
次頁へ
Private Sub 次ページへ_Click()
Dim rc As Integer
rc = MsgBox("登録ボタンを押しましたか?", vbYesNo + vbQuestion, "確認") If rc = vbYes Then Dim Rw As Long With Sheets("Sheet2")
.Cells(1, 3).Value = yes1.Value .Cells(2, 3).Value = no1.Value .Cells(3, 3).Value = yes2.Value .Cells(4, 3).Value = no2.Value .Cells(5, 2).Value = toi3.Value .Cells(6, 3).Value = yes4.Value .Cells(7, 3).Value = no4.Value .Cells(8, 2).Value = toi5.Value
End With
MsgBox "次のアンケートに進みます" If rc = vbYes Then GSSC発信の各種発信文書.show Me.Hide Else MsgBox "登録ボタンを押してください" End If End If End Sub
現状起こっている問題点
シート1のボタンに書き込んだ
Private Sub アンケート開始_Click()
アンケート1.show
End Sub
にてアンケートを開始―終了まで続けて行う場合は何も問題ございません。正常に機動・終了します。リンクも正常に動作します。
ですが、
たとえばアンケート7で終了し、途中呼び出し用に下記のコードを使って、アンケート途中から開始した場合、以下の問題が発生してしまいます。
1、呼び出したユーザーフォームがなぜか4つ機動する。
2、リンクをクリックすると、通常は画面一番前に出てくるリンクの窓が
開くと同時に最小化されてしまう。(ゆえに開いたことに気づけない)
3、『次頁』ボタンで次のアンケートに進み、新しく機動したユーザーフォームでリンクを開こうと
すると、なぜか一つ前のフォームでリンクを開いてしまう。
現時点では、おかしな機動をしているものの、明確なエラーメッセージが出ているわけでもなく
原因・対処に検討がつきません。
どのあたりに問題があるか、ご指摘願えませんでしょうか?
(にも) 2014/07/25(金) 10:14
再現が出来ません。が、気になったことがいくつか・・・。
1 >中に記載されているコードは、アンケート15個分すべて一緒
とあります。つまり、全く同じユーザーフォームを15個も用意しているという事ですか? どうしてですか? 全く同じなら一つでいいじゃない と単純に思います。
2 リンクコード なるコードのSubステートメントがありませんが、これで作動しますか?
因みに指定URLを開きたいだけなら、
Private Sub Label1_Click() CreateObject("wscript.shell").Run "http://www.yahoo.co.jp/" End Sub
これでも行けると思います。
3 どうしてHideメソッドでユーザーフォームを閉じているのですか? unload me だと問題があるのですか?
UserForms.Add(myForm).show このコードでユーザーフォームを表示しているなら、 Hideメソッドを使う意味がわかりません。 というより、どんどんユーザーフォームのインスタンスが増えていくだけです。
以上、疑問点です。
(ichinose) 2014/07/26(土) 09:27
ありがとうございます。返信が遅れまして申し訳ございません。
1 >中に記載されているコードは、アンケート15個分すべて一緒
>書き方が中途半端で申し訳ございませんでした。これは、使用しているコード・設問に使ったオブジェクト数などが同じ、という意味で、アンケート上に書いてある質問内容はもちろん違います。ですので、フォームを分けております。
2、SUB書き忘れです。本体には書いてあります。すみません。
3、ええと、特に意味はありません。参考にしたマクロがHideメソッドで閉じていたので、それをそのまま引用しました。unloadに書き換えてきます・・・
(にも) 2014/07/28(月) 14:17
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.