今、VB6 の SPREAD Ver.6.0 で開発を行っています。
スプレッド上にチェックボックス型セルを配置して、
チェックできるのは一つだけ という処理を行いたいのですが
方法がわかりません。
過去ログを検索してみると、コーディングで制御するしか
ないですね・・・ということだったのでやってみたのですが
Private Sub spread_ButtonClicked(ByVal Col As Long, _
ByVal Row As Long,ByVal ButtonDown As Integer)
With Me.spread
For ix = 1 To .MaxRows
.Row = ix: .Col = CKBtn: wCkFlg = .Value
If wCkFlg = 1 Then
If Row <> ix Then
.SetText CKBtn, ix, ""
End If
wCkFlg = 0
End If
Next ix
End With
SET文のところで、再帰呼び出しが起こってしまいます。
どのように回避すればよいでしょう?
よろしくお願いいたします。
Form側でフラグを追加(gFlg)
>With Me.spread
の前で
if gFlg = true then
gFlg = false
exit sub
end if
>.SetText CKBtn, ix, ""
の前で
gFlg = true
.SetTextで再帰をしていますから、その再帰の場合は
処理を抜けるというのはどうでしょうか?
どう?さん、ありがとうございました。
お教えいただいた様にコーディングしたところ
上手くいきました。
あと、お尋ねしておきながら自分でもいろいろ
研究したところ、少々卑怯ではありますが
Private Sub spsMtbl_J_Click(ByVal Col As Long, ByVal Row As Long)
With Me.spread
'チェックを全てはずす
For ix = 1 To .MaxRows
.Row = ix : .Col = CKBtn : .Text = 0
Next ix
'チェックをつけ直す
.Row = Row
.Col = CKBtn
If .Text = 1 Then
.Text = 0
Else
.Text = 1
End If
End With
と、別のイベントで上記の方法を試してもできました。
もし、このレスを参考にしようとなさった方へ
上記の処理は、クリックしたチェックボックスを
もう一度クリックしたとき、Clickイベントが
走らずに正しく処理が行われませんでした。
やはり どう?さんの意見をご参考にButtonClicked
イベントで処理したほうがよいかと思います。
ツイート | ![]() |