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

下記コードを作りましたが、全く反応がありません。
どこが悪いのか、指摘いただけませんでしょうか?
よろしくお願いします。


・オプションボタン1を選択=リストシートのB列をリストボックスへ表示

・オプションボタン2を選択=リストシートのC列をリストボックスへ表示

・リストボックスから一項目を選択、値を入力シートへ入力

Private Sub UserForm2_Initialize()
If OptionButton1.Value = True Then
With UserForm2
.ListBox1.RowSource = "リスト!B3:B" & lastRow
End With
End If
If OptionButton2.Value = True Then
With UserForm2
.ListBox1.RowSource = "リスト!C3:C" & lastRow
End With
End If
End Sub

Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)
Worksheets("入力!").ActiveCell.Value = ListBox1.Value
End Sub

以上

A 回答 (3件)

Private Sub UserForm2_Initialize()はフォームがロードされた時に1回だけ機能します。

Initializeとは初期化という意味です。
示されたコードにはオプションボタンで選択した時のコードが有りません、何も指示してないのですから反応がなくて当然ですね。
オプションボタンを選択(クリック)するとオプションボタンのClickイベントが発生しますのでそこに対応するコードを書いてください。
    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございます。
もっと勉強しますので、また行き詰ったら助けて下さい。

お礼日時:2012/02/29 18:09

背景が見えないので勝手に想像。


UserForm2 に OptionButton1 と OptionButton2 と ListBox1 が配置されている。
OptionButton1 と OptionButton2 はどちらかしか選択できない。(OptionButton1 を選択すれば自動的に OptionButton2 の選択が解除される)
初期状態では OptionButton1 が選択されているものとする。
シート [リスト] の B列と C列には ListBox1 に表示するためのリストがあり、OptionButton の値によってリストを切り替える。
ListBox1 の選択項目を選択すると、選択した項目がシート [入力] のアクティブなセルに入力される。
ってな背景?

で、コードを端折ってるのか知らないけれど、Form の Initialize イベントに出てくる lastRow って変数の中身がどこで設定されているのかわからん。
まさか Public な変数とか?
とりあえず勝手な想像で書く。

フォームの初期化時に OptionButton1 を選択。(OptionButton1_Click イベントが発生)
OptionButton1 が Click されると、シート [リスト] の B3~Bxx が選択項目になる。
OptionButton2 が Click されると、シート [リスト] の C3~Cxx が選択項目になる。
ListBox1 の選択項目を選択すると、選択した項目がシート [入力] のアクティブなセルに入力される。

Private Sub UserForm2_Initialize()
  Me.OptionButton1.Value = True
End Sub

Private Sub OptionButton1_Click()
  Me.ListBox1.RowSource = "リスト!B3:B11"
End Sub

Private Sub OptionButton2_Click()
  Me.ListBox1.RowSource = "リスト!C3:C9"
End Sub

Private Sub ListBox1_Change()
  Me.Worksheets("入力").Activate
  Application.ActiveCell.Value = Me.ListBox1.Value
End Sub
    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございます。
自分勝手な質問で失礼しました。
次回より、したい事は細かく記入します。

プロシージャを動作ごとに別ければいいんですね。
大変勉強になりました。
次回質問時にも助けて下さい。
お世話になりました。

お礼日時:2012/02/29 18:08

>Private Sub UserForm2_Initialize()


このコードをUserForm2を起動した時に実行しようとしていますか?
もしそうなら
Private Sub UserForm_Initialize() です。

ただ、OptionButtonに初期値を設定していなければ
OptionButton1やOptionButton2のValueはFalseなので
If OptionButton1.Value = True Then

If OptionButton2.Value = True Then
も条件として成立しません。
それに変数lastRowはどこで設定してますか?
また、
Worksheets("入力!").ActiveCell.Value = ListBox1.Value
この書き方はできません。

Option Explicit

Dim lastRow As Long

Private Sub UserForm_Initialize()
  With Sheets("リスト")
    lastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
  End With
  'ListBox1の初期表示をしないなら不要
  OptionButton1.Value = True

  'OptionButton1.Valueの初期値をTrueにしてListBox1初期表示したい場合は必要
  'ListBox1.RowSource = "リスト!B3:B" & lastRow
End Sub

Private Sub OptionButton1_Change()
  If OptionButton1.Value Then
    ListBox1.RowSource = "リスト!B3:B" & lastRow
  Else
    ListBox1.RowSource = "リスト!C3:C" & lastRow
  End If
End Sub

Private Sub ListBox1_MouseUp(ByVal Button As Integer, _
               ByVal Shift As Integer, _
               ByVal X As Single, _
               ByVal Y As Single)
  Sheets("入力!").Activate
  ActiveCell.Value = ListBox1.Value
End Sub
    • good
    • 1
この回答へのお礼

早速の回答、ありがとうございます。
全てにおいて大変勉強になりました。
目からうろこ・・・です。

とても助かりました。
次回質問時にもご教授お願いします。
お世話になりました。

お礼日時:2012/02/29 18:15

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

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