過去ログ

                                Page     102
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼classモジュールでUserform上のコマンドボタンをenableにするには?  haru 02/9/14(土) 11:38
   ┗Re:classモジュールでUserform上のコマンドボタンをenableにするには?  ichinose 02/9/14(土) 12:19
      ┗Re:classモジュールでUserform上のコマンドボタンをenableにするには?  haru 02/9/14(土) 13:13
         ┗Re:classモジュールでUserform上のコマンドボタンをenableにするには?  ichinose 02/9/14(土) 13:22
            ┗Re:classモジュールでUserform上のコマンドボタンをenableにするには?  haru 02/9/14(土) 15:51
               ┗あれ?  ichinose 02/9/14(土) 16:49
                  ┗あ〜  ichinose 02/9/14(土) 17:13
                     ┗btn2_Click  haru 02/9/19(木) 13:45
                        ┗Re:btn2_Click  ichinose 02/9/20(金) 1:03

 ───────────────────────────────────────
 ■題名 : classモジュールでUserform上のコマンドボタンをenableにするには?
 ■名前 : haru
 ■日付 : 02/9/14(土) 11:38
 -------------------------------------------------------------------------
    追加されたコマンドボタンクリックしたとき、classモジュールに
マクロを記述するということをichinoseさんに教えていただいたの
ですが、この時Userform上のコマンドボタンをenableにするには、
どうすれば良いですか?

 これまでの経緯は
 http://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=one;no=9496;id=Excel
 です。
 よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:classモジュールでUserform上のコマンドボタンをenableにするには?  ■名前 : ichinose  ■日付 : 02/9/14(土) 12:19  -------------------------------------------------------------------------
   ▼haru さん:
こんにちは。
どの時点でEnableを使用するかは、わかりませんが、ボタン作成時点なら、
'===================================================
>Dim new_btn() As New Class1
'===================================================
>Private Sub CommandButton1_Click()
>ReDim new_btn(Workbooks.Count)
>  For i = 1 To Workbooks.Count
>    Set new_btn(i).btn = Controls.Add("Forms.CommandButton.1") ', >CommandButton2, Visible)
>    With new_btn(i)
>     .btn.Caption = Workbooks(i).Name
>     .btn.Left = 18
>     .btn.Top = i * 30
>     .btn.Width = 175
>     .btn.Height = 20
>     .id = i
      .btn.Enabled = False '又は、true
>     End With
>  Next
>End Sub

でOKかと思います。
 ───────────────────────────────────────  ■題名 : Re:classモジュールでUserform上のコマンドボタンをenableにするには?  ■名前 : haru  ■日付 : 02/9/14(土) 13:13  -------------------------------------------------------------------------
   ▼ichinose さん:
こんにちは。

>どの時点でEnableを使用するかは、わかりませんが、ボタン作成時点なら、

>>追加されたコマンドボタンクリックしたとき、
 です。

'=======================================================
'以下、クラスモジュールのコードです(クラス名は、Class1です)
'=======================================================
Public WithEvents btn As MSForms.CommandButton
Private btnid As Long 'ボタンID用
'==============================================
Private Sub btn_Click()
MsgBox "押されたのは、" & btnid & "のボタンだよ"
'ご質問のコードは、ここに書きます。
'ボタンによってコードを変えたいなら、btnidの値で変えます
End Sub
'================================================

 上記、Private Sub btn_Click()
 で、
>>    この時Userform上のコマンドボタンをenableにするには、
>>どうすれば良いですか?
 よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:classモジュールでUserform上のコマンドボタンをenableにするには?  ■名前 : ichinose  ■日付 : 02/9/14(土) 13:22  -------------------------------------------------------------------------
   ▼haru さん:
こんにちは。

>'=======================================================
>'以下、クラスモジュールのコードです(クラス名は、Class1です)
>'=======================================================
>Public WithEvents btn As MSForms.CommandButton
>Private btnid As Long 'ボタンID用
>'==============================================
>Private Sub btn_Click()
>MsgBox "押されたのは、" & btnid & "のボタンだよ"
If btnid > 1 Then
  btn.Enabled = False
  End If
'例えば、こんな感じでしょうか?
>End Sub
>'================================================
 ───────────────────────────────────────  ■題名 : Re:classモジュールでUserform上のコマンドボタンをenableにするには?  ■名前 : haru  ■日付 : 02/9/14(土) 15:51  -------------------------------------------------------------------------
   Public WithEvents btn As MSForms.CommandButton, WithEvents btn2 As MSForms.CommandButton, _
      WithEvents btn3 As MSForms.CommandButton, WithEvents btn4 As MSForms.CommandButton

 というふうに4個ボタンが並んでいて、btn4がクリックされたら、
btn1、btn2、btn3もEnabledにしたいのですが、実際これを実行する
と、「オブジェクトが必要です。」と、表示されます。

Private Sub btn4_Click()
'選択されたブックを閉じる
  Workbooks(wb_nm(btnid)).Close
  btn1.Enabled = False
  btn2.Enabled = False
  btn3.Enabled = False
  btn4.Enabled = False
End Sub

 どうすれば良いですか?

  btn4.Enabled = False
 だけなら、良いんですが、
 よろしくお願いします。
 ───────────────────────────────────────  ■題名 : あれ?  ■名前 : ichinose  ■日付 : 02/9/14(土) 16:49  -------------------------------------------------------------------------
   ▼haru さん
こんにちは。

>Public WithEvents btn As MSForms.CommandButton, WithEvents btn2 As MSForms.CommandButton, _
>      WithEvents btn3 As MSForms.CommandButton, WithEvents btn4 As MSForms.CommandButton
>
> というふうに4個ボタンが並んでいて、btn4がクリックされたら、
>btn1、btn2、btn3もEnabledにしたいのですが、実際これを実行する
>と、「オブジェクトが必要です。」と、表示されます。
>
>Private Sub btn4_Click()
>'選択されたブックを閉じる
>  Workbooks(wb_nm(btnid)).Close
>  btn1.Enabled = False
>  btn2.Enabled = False
>  btn3.Enabled = False
>  btn4.Enabled = False
>End Sub
>
> どうすれば良いですか?
>
>  btn4.Enabled = False
> だけなら、良いんですが、
> よろしくお願いします。

前回のコードのからの話ではないのですか?
クラスモジュールにイベント付のボタンが複数宣言されていますが、
これらにフォームで作成したボタンと関連付けされていれば上のコードはOKですよ。
でも、それでは実際のフォームに上のコードを乗せた方が・・ということになってしまいますよね(外してたら、すみません)。

そこで、前回までのコードの続きだと思って・・・・。
フォームモジュールに・・・
'===================================================
Dim new_btn() As New Class1
'====================================================================
Private Sub CommandButton1_Click()
ReDim new_btn(Workbooks.Count)
  For i = 1 To Workbooks.Count
    Set new_btn(i).btn = Controls.Add("Forms.CommandButton.1") ', CommandButton2, Visible)
    With new_btn(i)
     .btn.Caption = Workbooks(i).Name
     .btn.Left = 18
     .btn.Top = i * 30
     .btn.Width = 175
     .btn.Height = 20
     .id = i
     End With
  Next
End Sub
'==========================================================
Sub btn_enable_false()
 For i = 1 To UBound(new_btn())
  new_btn(i).btn.Enabled = False
  Next
End Sub


クラスモジュールでは、
'==============================================
Public WithEvents btn As MSForms.CommandButton
'==============================================
Private btnid As Long 'ボタンID用
'==============================================
Private Sub btn_Click()
MsgBox "押されたのは、" & btnid & "のボタンだよ"
If btnid > 1 Then
  Workbooks(btn.Caption).Close
  UserForm1.btn_enable_false
  End If
End Sub
'================================================
Property Get id() As Long
id = btnid
End Property
'================================================
Property Let id(idx As Long)
btnid = idx
End Property

こういうことですか?
 ───────────────────────────────────────  ■題名 : あ〜  ■名前 : ichinose  ■日付 : 02/9/14(土) 17:13  -------------------------------------------------------------------------
   ▼haru さん
>
>>Public WithEvents btn As MSForms.CommandButton, WithEvents btn2 As MSForms.CommandButton, _
>>      WithEvents btn3 As MSForms.CommandButton, WithEvents btn4 As MSForms.CommandButton
>>
>> というふうに4個ボタンが並んでいて、btn4がクリックされたら、
>>btn1、btn2、btn3もEnabledにしたいのですが、実際これを実行する
>>と、「オブジェクトが必要です。」と、表示されます。
>>
>>Private Sub btn4_Click()
>>'選択されたブックを閉じる
>>  Workbooks(wb_nm(btnid)).Close
>>  btn1.Enabled = False
>>  btn2.Enabled = False
>>  btn3.Enabled = False
>>  btn4.Enabled = False
>>End Sub
>>
>> どうすれば良いですか?
>>
>>  btn4.Enabled = False
>> だけなら、良いんですが、
>> よろしくお願いします。
>
>前回のコードのからの話ではないのですか?
>クラスモジュールにイベント付のボタンが複数宣言されていますが、
>これらにフォームで作成したボタンと関連付けされていれば上のコードはOKですよ。
>でも、それでは実際のフォームに上のコードを乗せた方が・・ということになってしまいますよね(外してたら、すみません)。
↑これ、勘違いみたいですね、
ひとつのブックに対しての処理の数だけボタンを増やしたと言う事でしょうかね?
でも、そうだとしたら、最初のボタン作成時に関連付けされているかどうかだと思いますが、・・・。
2つボタンの例ですが、

Dim new_btn() As New Class1
'===================================================
Private Sub CommandButton1_Click()
ReDim new_btn(Workbooks.Count)
  For i = 1 To Workbooks.Count
    Set new_btn(i).btn = Controls.Add("Forms.CommandButton.1") ', CommandButton2, Visible)
    With new_btn(i)
     .fnm = Workbooks(i).Name
     .btn.Caption = Workbooks(i).Name & "処理1"
     .btn.Left = 18
     .btn.Top = i * 30
     .btn.Width = 175
     .btn.Height = 20
     .id = i
     End With
    Set new_btn(i).btn2 = Controls.Add("Forms.CommandButton.1")
     With new_btn(i).btn2
     .Caption = Workbooks(i).Name & "処理2"
     .Left = 200
     .Top = i * 30
     .Width = 175
     .Height = 20
     End With
   
  Next
End Sub


'=================================================================
Public WithEvents btn As MSForms.CommandButton
Public WithEvents btn2 As MSForms.CommandButton
Private btnid As Long 'ボタンID用
Private wknm As String

'==============================================
Private Sub btn_Click()
MsgBox "押されたのは、" & btnid & "のボタンだよ"
If btnid > 1 Then
  Workbooks(wknm).Close
  btn2.Enabled = False
  btn.Enabled = False
  End If
End Sub
'================================================
Property Get id() As Long
id = btnid
End Property
'================================================
Property Let id(idx As Long)
btnid = idx
End Property
'===============================================
Property Get fnm() As String
fnm = wknm
End Property
Property Let fnm(nm As String)
wknm = nm
End Property


で、動いていますが・・・。
 ───────────────────────────────────────  ■題名 : btn2_Click  ■名前 : haru  ■日付 : 02/9/19(木) 13:45  -------------------------------------------------------------------------
   ▼ichinose さん:
 こんにちは。返事が遅れてすみません。
 他の問題で引っ掛かっています。(まだ未決です。)

>ひとつのブックに対しての処理の数だけボタンを増やしたと言う事でしょうかね?
 そうです。

>でも、そうだとしたら、最初のボタン作成時に関連付けされているかどうかだと思いますが、・・・。
>2つボタンの例ですが、

>Dim new_btn() As New Class1
 ここで
 Dim new_btn() As New Class1, new_btn2() As New Class1
 として、new_btn2がクリックされたとき、

Private Sub btn2_Click()
    MsgBox "押されたのは、" & btnid & "のボタンだよ"
  btn2.Enabled = False
  btn.Enabled = False
End Sub

 が、うまくいけば良いんですが。
 よろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:btn2_Click  ■名前 : ichinose  ■日付 : 02/9/20(金) 1:03  -------------------------------------------------------------------------
   ▼haru さん:
こんばんは。
>>Dim new_btn() As New Class1
> ここで
> Dim new_btn() As New Class1, new_btn2() As New Class1
> として、new_btn2がクリックされたとき、
>
>Private Sub btn2_Click()
>    MsgBox "押されたのは、" & btnid & "のボタンだよ"
>  btn2.Enabled = False
>  btn.Enabled = False
>End Sub

[#515]のコードと少しづつ違ってきているので全体が見えなくなってきています。
私なりに解釈しましたが、以下のコードが意図されてる事と違っていたら、すみませんが、
全体のコードをアップしてみて下さい。
最初にユーザーフォームモジュールです。
'=================================================================
Dim new_btn() As New Class1
Dim new_btn2() As New Class1
'===================================================
Private Sub CommandButton1_Click()
ReDim new_btn(Workbooks.Count)
ReDim new_btn2(Workbooks.Count)
  For i = 1 To Workbooks.Count
    Set new_btn(i).btn = Controls.Add("Forms.CommandButton.1") ', CommandButton2, Visible)
    With new_btn(i)
     .fnm = Workbooks(i).Name
     .btn.Caption = Workbooks(i).Name & "処理1"
     .btn.Left = 18
     .btn.Top = i * 30
     .btn.Width = 175
     .btn.Height = 20
     .id = i
     End With
    Set new_btn2(i).btn = Controls.Add("Forms.CommandButton.1")
     With new_btn2(i)
     .fnm = Workbooks(i).Name
     .btn.Caption = Workbooks(i).Name & "処理2"
     .btn.Left = 200
     .btn.Top = i * 30
     .btn.Width = 175
     .btn.Height = 20
     .id = i
     End With
   Next
End Sub
'======================================================
Sub unenable_cmd(i As Long)
new_btn(i).btn.Enabled = False
new_btn2(i).btn.Enabled = False
End Sub


'======================================================
'以下クラスモジュールです
'======================================================
Public WithEvents btn As MSForms.CommandButton
Private btnid As Long 'ボタンID用
Private wknm As String
'==============================================
Private Sub btn_Click()
MsgBox "押されたのは、" & btnid & "のボタンだよ"
If btnid > 1 Then
  Workbooks(wknm).Close
  Call UserForm1.unenable_cmd(btnid)
  End If
End Sub
'================================================
Property Get id() As Long
id = btnid
End Property
'================================================
Property Let id(idx As Long)
btnid = idx
End Property
'================================================
Property Get fnm() As String
fnm = wknm
End Property
'================================================
Property Let fnm(nm As String)
wknm = nm
End Property
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 102