|
楼主 |
发表于 2010-5-9 14:11
|
显示全部楼层
回复 9楼 ljx63426 的帖子
原帖由 ljx63426 于 2010-5-9 13:25 发表
多谢楼主回复,我是想用这个东东改做人员资料管理系统,您的回复达到了我的要求,我有个小小的要求:能否将标签和文本框水平排列(可以排几列),同时,请您将改动的代码用红色标出,以便我和前面的代码对比,学习您编写的代码 ...
10组为一列:
Private Sub UserForm_Initialize()
Dim SQL$, i&, j&, arr, a(), k, m%, n%
With Sheet2
arr = .Range("A2").CurrentRegion
ReDim a(UBound(arr, 2) - 1)
For i = 0 To UBound(a)
a(i) = .Columns(i + 1).ColumnWidth * 6.5 'ListView1各列列宽
Next
End With
Set cnn = New ADODB.Connection
cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
SQL = "select * from [数据库$] "
Set rs = New ADODB.Recordset
rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic
On Error Resume Next
With ListView1
' 设置ListView1的标题,显示类型,整行选择和网格线属性
.ColumnHeaders.Clear
.View = lvwReport ' listivew的显示格式为报表格式
.FullRowSelect = True ' 允许整行选中
.Gridlines = True ' 显示网格线
' 为ListView1设置标题
For i = 0 To rs.Fields.Count - 1
m = i Mod 10
n = Int(i / 10) * 210
Set k = Controls.Add("Forms.Label.1", "Label" & i + 1, True)
k.Move 570 + n, 40 * (m + 1)
k.Caption = rs.Fields(i).Name
k.Width = 50
Set k = Controls.Add("Forms.TextBox.1", "TextBox" & i + 1, True)
k.Move 620 + n, 40 * (m + 1)
k.Width = 150
k.Height = 30
If i > 0 Then
.ColumnHeaders.Add , , rs.Fields(i).Name, a(i), lvwColumnCenter '从第2列起居中
Else
.ColumnHeaders.Add , , rs.Fields(i).Name, a(i)
End If
Next i
End With
Call 显示数据(SQL) '为ListView1设置各行数据
arr = cnn.Execute("select distinct " & rs.Fields(i - 1).Name & " from [数据库$] where " & rs.Fields(i - 1).Name & " is not null ").GetRows '不重复的工作部门,为了修改字段名后不受影响使用了rs.Fields(i - 1).Name来代替“工作部门”
ComboBox1.List = WorksheetFunction.Transpose(arr) '不重复的工作部门赋值给组合框
模糊查询.SetFocus
End Sub
其他代码都是自适应的,不必修改
电话簿管理系统(以本工作簿工作表为数据库)回复 4楼 ljx63426 的帖子2.rar
(32.9 KB, 下载次数: 1150)
[ 本帖最后由 zhaogang1960 于 2010-5-9 15:16 编辑 ] |
|