Excel VBA質問箱 IV

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

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


25650 / 76732 ←次へ | 前へ→

【56420】Re:シートのA列セル選択右クリックでTextBoxとComboBoxへのデータ移動
発言  kanabun  - 08/6/16(月) 22:49 -

引用なし
パスワード
   ▼おじさん46 さん:
こんばんは。

> 膨大な資料をありがとうございます。

いえいえ、膨大ではないです。けれど、ぼくも冗長と感じます。
その原因は、前述のように、シートとUserForm1とで、同じような処理を
2度書いているからです。
UserFormのコントロール名を変えたりすると、今のままでは
修正を2か所にたいして実行しないといけない。これは面倒だし、
どこを修正しなければならないか、そのうち忘れてしまう恐れが
あります。

現行の流れが分かったところで、
> 次のステップ
として、共通処理をサブルーティンとして独立させてみましょう。

たとえば、
標準モジュールに、
>-------------------------------------------------------
'        Target: 転記するシートのA列のセル
'        Uf  :転記先のユーザーフォーム
Sub UserFormに転記1(ByVal Target As Range, ByVal Uf As MSForms.UserForm)
 Ufの Caption に Target の値を書き込む
 1〜6番までループして
   番号別に Target.Offset(, i).Value の値を
   指定のコントロールに書き込む処理を
   ( Private Sub TextBox7_AfterUpdate() からコピー編集して)
   ここに書き込む
End Sub

と、独立させておくと、
>-------------------------------------------------------
> Private Sub TextBox7_AfterUpdate()
のほうは、
 Dim 行番号 As Long
 Dim Target As Range
 
 行番号 = Val(Me.TextBox7.Text)
 Set Target = ActiveSheet.Cells(行番号, 1)
 UserFormに転記 Target, Me  '◆サブ呼び出し
 Target.Select
End Sub
だけになり、

シートのほうも、
>-------------------------------------------------------
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
'A列セル選択右クリックでセルデータ収集後フォームを開く
 
 If Target.Column <> 1 Then Exit Sub
 If Target.Row = 1 Then Exit Sub
 
 Cancel = True
 Set Target = Target.Item(1)
 UserForm1.Show vbModeless
 UserFormに転記 Target, UserForm1 '◆サブ呼び出し
 UserForm1.TextBox7.Text = Target.Row
End Sub

だけで済むことになります。そして、基本的には、メンテナンスは
呼び出し先の(標準モジュールに書いた)『UserFormに転記』を
編集すれば済むことになります。

たとえば、こんな風に、
'------------------------------------------------- 標準モジュール
Sub UserFormに転記(ByVal Target As Range, ByVal Uf As MSForms.UserForm)
 Dim i As Long
 Dim myValue As String
 Dim ACtrl  'A列からのOffset番号に対応する書き込み先のControl名の配列
 ACtrl = Array("", "TextBox1", "ComboBox1", "ComboBox2", _
          "TextBox4", "TextBox5", "TextBox6")
 
 Uf.Caption = Target.Value
 For i = 1 To 6
   Uf.Controls(ACtrl(i)).Text = Target.Offset(, i).Value
 Next i

End Sub

3 hits

【56363】シートのA列セル選択右クリックでTextBoxとComboBoxへのデータ移動 おじさん46 08/6/15(日) 12:54 質問
【56385】Re:シートのA列セル選択右クリックでTextB... Abebobo 08/6/16(月) 9:38 発言
【56387】Re:シートのA列セル選択右クリックでTextB... kanabun 08/6/16(月) 10:19 発言
【56416】Re:シートのA列セル選択右クリックでTextB... おじさん46 08/6/16(月) 20:49 発言
【56420】Re:シートのA列セル選択右クリックでTextB... kanabun 08/6/16(月) 22:49 発言
【56424】Re:シートのA列セル選択右クリックでTextB... Abebobo 08/6/17(火) 9:08 お礼
【56430】Re:シートのA列セル選択右クリックでTextB... kanabun 08/6/17(火) 10:36 発言
【56431】Re:シートのA列セル選択右クリックでTextB... Abebobo 08/6/17(火) 10:44 お礼
【56454】Re:シートのA列セル選択右クリックでTextB... おじさん46 08/6/17(火) 20:10 発言
【56672】Re:シートのA列セル選択右クリックでTextB... おじさん46 08/6/29(日) 18:29 お礼
【56396】Re:シートのA列セル選択右クリックでTextB... Abebobo 08/6/16(月) 12:14 発言

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