Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10745 / 13644 ツリー ←次へ | 前へ→

【20102】シートのダブルクリック mickeypapa 04/11/28(日) 11:59 質問[未読]
【20103】Re:シートのダブルクリック ichinose 04/11/28(日) 12:15 回答[未読]
【20106】Re:シートのダブルクリック mickeypapa 04/11/28(日) 14:48 お礼[未読]
【20119】Re:シートのダブルクリック mickeypapa 04/11/28(日) 21:12 お礼[未読]

【20102】シートのダブルクリック
質問  mickeypapa WEB  - 04/11/28(日) 11:59 -

引用なし
パスワード
   データの入力されているシート上でダブルクリックをすると、
その行のB列のセルを選択し、ユーザーフォームを表示して
ユーザーフォームの各項目(テキストボックス、コンボボックス等)にシートの
データを表示させたいのですが、

データシートに以下のコード
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Range(Target.Address).End(xlToLeft).Offset(0, 1).Select
  If ActiveCell = Empty Then
  ElseIf IsDate(ActiveCell.Value) = True Then '日付の時にフォーム表示
    frmUnsou.Show
    項目取得
  End If
End Sub

※項目取得はModule1に
Sub 項目取得()
With frmUnsou
    .labNo.Caption = ActiveCell.Offset(0, -1)
    .txtDay.Value = Format(ActiveCell, "yyyy/mm/dd")
    .txtKyaku1.Value = ActiveCell.Offset(0, 1)
    .txtKyaku2.Value = ActiveCell.Offset(0, 3)
    .txtGenba1.Value = ActiveCell.Offset(0, 2)
    .txtGenba2.Value = ActiveCell.Offset(0, 4)
     ・
     ・
     ・
の様に書いておりますが、
シートをダブルクリックすると、ユーザーフォームは表示されるのですが、
項目の取得が出来ません。
どのように書き換えると良いのでしょうか?
皆様宜しくお願い致します。

【20103】Re:シートのダブルクリック
回答  ichinose  - 04/11/28(日) 12:15 -

引用なし
パスワード
   ▼mickeypapa さん:
こんにちは。

>データの入力されているシート上でダブルクリックをすると、
>その行のB列のセルを選択し、ユーザーフォームを表示して
>ユーザーフォームの各項目(テキストボックス、コンボボックス等)にシートの
>データを表示させたいのですが、
>
>データシートに以下のコード
>Option Explicit
>
>Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
>  Range(Target.Address).End(xlToLeft).Offset(0, 1).Select
>  If ActiveCell = Empty Then
>  ElseIf IsDate(ActiveCell.Value) = True Then '日付の時にフォーム表示
     frmUnsou.Show 'モーダルモードの場合だとフォームを閉じるまで
'            この「項目取得」というプロシジャーには制御が
'             移りませんよ!!
>    項目取得
>  End If
>End Sub
>
>※項目取得はModule1に
>Sub 項目取得()
>With frmUnsou
>    .labNo.Caption = ActiveCell.Offset(0, -1)
>    .txtDay.Value = Format(ActiveCell, "yyyy/mm/dd")
>    .txtKyaku1.Value = ActiveCell.Offset(0, 1)
>    .txtKyaku2.Value = ActiveCell.Offset(0, 3)
>    .txtGenba1.Value = ActiveCell.Offset(0, 2)
>    .txtGenba2.Value = ActiveCell.Offset(0, 4)
>     ・
>     ・
>     ・
>の様に書いておりますが、
>シートをダブルクリックすると、ユーザーフォームは表示されるのですが、
>項目の取得が出来ません。
見せていただいたコードからですと、

項目取得というプロシジャーを標準モジュールではなく、
この「frmUnsou」というフォームのモジュールに移動して下さい。

後は、このフォームのInitializeイベントで
call 項目取得
という呼び出しコードを記述してはいかがでしょうか?

項目取得というプロシジャーは移動しなくても動くとは思いますが、
関連性から考えると、フォームモジュール内が妥当かと思いますが・・。

【20106】Re:シートのダブルクリック
お礼  mickeypapa WEB  - 04/11/28(日) 14:48 -

引用なし
パスワード
   ▼ichinose さん:
こんにちは、アドバイス有り難うございます。

>後は、このフォームのInitializeイベントで
>call 項目取得
>という呼び出しコードを記述してはいかがでしょうか?
>
>項目取得というプロシジャーは移動しなくても動くとは思いますが、
>関連性から考えると、フォームモジュール内が妥当かと思いますが・・。

Modele1に書かれている「項目取得」は
frmUnsouのフォーム上のコマンドボタンで
cmdShusei・・・・修正時にデータを取得
cmdCopy・・・・・同じような内容のデータの時にデータコピー
cmdUp・・・・・・20件上のデータを表示
cmdDown・・・・・20件下のデータを表示
スピンボタンで1行ずつデータを表示するときに呼び出して使っております。
frmUnsouのコードの中に
Sub 項目取得と入れてみたり、シートのコードに
frmUnsou.txtKyaku1 = Worksheets(・・・・・
と書いてみても駄目なもので、シートのイベントでは、他の方法があるのかと
思案しておりました。

【20119】Re:シートのダブルクリック
お礼  mickeypapa WEB  - 04/11/28(日) 21:12 -

引用なし
パスワード
   ▼ichinose さん:
こんにちは、アドバイス有り難うございました。

Private Sub UserForm_Activate()
If ActiveCell = Empty Then
ElseIf IsDate(ActiveCell.Value) = True Then
  項目取得
End If
End Sub

ユーザーフォームのイベントに記述して
解決できました。有り難うございました。

10745 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free