解决方案 »
- 关于数组的操作请教高手!
- textbox 禁止输入重复数字怎么写
- VB連接ORACLE進行查詢并顯示在TEXT控件組中????
- 请教 进销存程序中余额数生成的问题
- 怎样用bitblt将屏幕(包括鼠标)都搞到picture控件里?
- 如何设置命令按钮的快捷键?
- 有沒有檢查內存類型﹑主板類型﹑顯示卡類型的控件或源碼
- 如何得到已经绑定到数据源的datagrid的某一单元格的值(再线等待,请高手指教,感激涕泠)
- 帮我 ! 急用进者有分, 解决问题的额外加分 在线等!!
- 如何在VB中真正删除Foxfro的DBF文件记录? (很急!很急!很急!很急!很急!)
- 本人想学习一下vb开发语言,请大神们推荐几本书看看
- 各位,VB中是不是有一个IFAME 容器控件? 在哪里引用
这个估计得自己写个东东了.........不过,要是多弄几个单选能不能满足要求?.......
用UserForm实现了,效果差了点不过就那么回事吧。以下是我找到的代码,给大家分享下:
新建一个模块,建立一个公共变量
Public rangeAddr As Stringsheet1 添加代码
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 11 Then
rangeAddr = Target.Address'将单元格地址保存到公共变量中
UserForm1.Show
End If
End Sub
新建一个窗体,添加代码如下:Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
On Error Resume Next
For I = 0 To UserForm1.Controls.Count - 1
If UserForm1.Controls(I) = True Then
Tval = Tval & "+" & UserForm1.Controls(I).Caption
End If
Next
Sheet1.Activate
'MsgBox rangeAddr
Sheet1.Range(rangeAddr).Value = Right(Tval, Len(Tval) - 1)'将结果关联到选中的单元格
End SubPrivate Sub TextBox1_Change()End SubPrivate Sub UserForm_Initialize()
'先计算有多少个控件,每10个换列
If Sheet3.Range("A2").End(xlDown).Row / 10 > Round(Sheet3.Range("A2").End(xlDown).Row / 10, 0) Then
counts = Round(Sheet3.Range("A2").End(xlDown).Row / 10, 0) + 1
Else
counts = Sheet3.Range("A2").End(xlDown).Row / 10
End If
'设置窗体高度和宽度
UserForm1.Width = 150 * counts'每增加1列宽度加150。(这里并没有判断是否会超过屏幕的宽度,如果数据量太多可以调整每列显示的个数
UserForm1.Height = 250For X = 1 To counts Y = 10 * X '每列显示10个控件 If X = 1 Then '开始第1列显示
Start = 2
Ends = 11
Else '换列显示
Start = Ends + 1
Ends = Y + 1
End If If Ends > Sheet3.Range("A2").End(xlDown).Row Then '防止溢出
Ends = Sheet3.Range("A2").End(xlDown).Row
End If 'Debug.Print "STRAT:" & Start & " Ends : " & Ends
For I = Start To Ends '循环生成控件
Set ChkBox = UserForm1.Controls.Add("Forms.CheckBox.1", "Chk" & Str(I))
If I > 11 Then
tops = 2 + 20 * (I - Y + 8) '换列后的控件高度坐标
Else
tops = 2 + 20 * (I - 2)
End If
ChkBox.Top = tops
ChkBox.Height = 25'控件的高度
ChkBox.Width = 200'控件的宽度
ChkBox.Left = 20 + 150 * (X - 1) '220 换列后的横坐标
' Debug.Print "TOP:" & tops & " LEFT: " & 20 + 150 * (X - 1) '220
ChkBox.Caption = Sheet3.Cells(I, 1)'控件显示的标题
Set ChkBox = Nothing
Next
'Debug.Print "X:" & X
NextEnd Sub