分享

VBA常用代码解析(第三十五讲)

 wdmexcel 2015-09-23

书接上文,继续详解控件的使用

使用spreadsheet控件

如果希望在窗体中显示类似工作表的表格,并且可以像工作表一样进行操作,那么可以在窗体中使用表格控件(Spreadsheet控件)

步骤1,在VBE窗口中单击菜单“插入”→“用户窗体”,在窗体上添加一个Spreadsheet控件,双击窗体,在其代码窗口中输入下面的代码:

Private Sub UserForm_Initialize()

DimiRow As Integer

Dimarr As Variant

WithMe.Spreadsheet1

.DisplayToolbar = False

.DisplayHorizontalScrollBar = False

.DisplayVerticalScrollBar = False

.DisplayWorkbookTabs = False

iRow = Sheet1.Range('B65536').End(xlUp).Row

arr = Sheet1.Range('B2:H' &iRow)

With .Range('B2:H' & iRow)

.Value = arr

.Borders.LineStyle = xlContinuous

.Borders.Weight = xlMedium

.Borders.ColorIndex = 10

End With

With .Range('B2:H2')

.HorizontalAlignment = -4108

.VerticalAlignment = -4108

.Interior.ColorIndex = 44

End With

.Range('B3:B' & iRow).HorizontalAlignment= -4108

.Range('C3:H' & iRow).NumberFormat= '0.00'

.Rows(2).RowHeight = 23.25

.Columns('A').ColumnWidth = 2.75

.Columns('B:H').ColumnWidth =8

EndWith

End Sub

代码解析:

用户窗体的初始化事件过程,使用窗体显示工作表中的表格。

5行代码,设置Spreadsheet控件不显示工具栏。

DisplayToolbar 属性设置工具栏是否隐藏,语法如下:

expression.DisplayToolbar

参数expression是必需的,一个有效的对象。

如果指定电子表格、图表区或“数据透视表”列表显示了工具栏,则返回True

67行代码,设置Spreadsheet控件不显示水平和垂直滚动条。

8行代码,设置Spreadsheet控件不显示工作表标签。

9行代码,取得工作表B列有数据的最后一行的行号。

10行代码,把工作表数据赋值给数组。

11行到16行代码,把数组赋给Spreadsheet控件的单元格,使Spreadsheet控件显示工作表内容,并且添加加框线。

17行到第21行代码,设置Spreadsheet控件中表格第一行的字体对齐方式为居中并添加单元格的底纹颜色。

22行代码,设置Spreadsheet控件中表格第一列的字体对齐方式为居中。

23行代码,设置Spreadsheet控件中表格数据的格式。

24行到26行代码,设置Spreadsheet控件的行高与列宽。

步骤2,在窗体上添加一个按钮控件,将其Caption属性设置为“保存”,双击按钮控件,在其代码窗口中输入下面的代码:

Private Sub CommandButton1_Click()

DimiRow As Integer

Dimarr As Variant

If MsgBox('是否保存对表格所作的修改?'4 + 32) = 6 Then

With Me.Spreadsheet1

iRow = .Range('B65536').End(xlUp).Row

arr = .Range('B2:H' &iRow).Value

Sheet1.Range('B2:H' &iRow).Value = arr

End With

EndIf

UnloadMe

End Sub

代码解析:

用户窗体中“保存”按钮的单击过程,把在窗体中对数据的修改重新保存到工作表。

4行代码,询问用户是否保存修改。

5行到第10行代码,如果用户选择保存,把Spreadsheet控件中的数据保存到工作表。

运行窗体,显示效果。

131 使用Listview控件

ListView控件是VBA程序开发中的常用控件,可以在用户窗体中把工作表的数据以列表的方式显示。

131-1 使用Listview控件显示数据列表

使用Listview控件在用户窗体中显示数据列表,代码如下:

Private Sub UserForm_Initialize()

DimItm As ListItem

Dimr As Integer

Dimc As Integer

WithListView1

.ColumnHeaders.Add ,,'人员编号 '500

.ColumnHeaders.Add ,,'技能工资 '501

.ColumnHeaders.Add ,,'岗位工资 '501

.ColumnHeaders.Add ,,'工龄工资 '501

.ColumnHeaders.Add ,,'浮动工资 '501

.ColumnHeaders.Add ,,'其他 '501

.ColumnHeaders.Add ,,'应发合计'501

.View = lvwReport

.Gridlines = True

For r = 2 To Sheet1.[A65536].End(xlUp).Row

Set Itm = .ListItems.Add()

Itm.Text = Space(2) & Sheet1.Cells(r1)

For c = 1 To 6

Itm.SubItems(c) = Format(Sheet1.Cells(rc + 1)'###0.00')

Next

Next

End With

SetItm = Nothing

End Sub

代码解析:

窗体的初始化事件,在窗体显示时将工作表中数据显示在Listview控件中。

6行到第12行代码,使用ColumnHeader对象的Add方法在Listview控件中添加标题列,并设置列标题、列宽和文本对齐方式。

ColumnHeader对象是ListView控件中包含标题文字的项目,应用于ColumnHeader对象的Add方法语法如下:

object.ColumnHeader.Add(indexkeytextwidthalignment)

其中参数text代表标题文字,参数width代表标题的列宽,参数alignment代表列标题中文本对齐方式。Listview控件中文本的对齐方法有三种,如表格所示。

Listview控件中第一列的文本对齐方式只能设置为左对齐。

13行代码,设置Listview控件的View属性为lvwReport,使Listview控件显示为报表型。View属性决定在列表中控件使用何种视图显示项目,语法如下:

object.view [= value]

参数object是必需的,对象表达式,listview控件。

参数value是必需的,指定控件外观的整数或常数,如表格所示。

14行代码,设置Listview控件的Gridlines属性为True,显示网格线。只有在将View属性设置为lvwReport时才能显示网格线,否则Gridlines属性无效。

16行代码,使用ListItem对象的Add方法在Listview控件中添加项目。应用于ListItem对象的Add方法语法如下:

ListItems.Add(indexkeytexticonsmallIcon)

其中参数text代表添加的项目内容。

17行代码,添加行标题。ListItem对象的text属性代表Listview控件的第一列内容,因为Listview控件的第一列的文本对齐方式只能设置为左对齐,所以在添加时使用Space函数插入两个空格,使行标题达到居中显示的效果。

18行到20行代码,继续添加其他列的内容。Listview控件其他列的项目需要使用SubItems属性来添加。

运行窗体,Listview控件显示工作表中的内容。

131-2 Listview控件中使用复选框

Listview控件中使用复选框,可以进行多重选择,示例代码如下:

Private Sub UserForm_Initialize()

DimItm As ListItem

Dimr As Integer

Dimc As Integer

WithListView1

.ColumnHeaders.Add ,,'人员编号 '500

.ColumnHeaders.Add ,,'技能工资 '501

.ColumnHeaders.Add ,,'岗位工资 '501

.ColumnHeaders.Add ,,'工龄工资 '501

.ColumnHeaders.Add ,,'浮动工资 '501

.ColumnHeaders.Add ,,'其他 '501

.ColumnHeaders.Add ,,'应发合计'501

.View = lvwReport

.Gridlines = True

.FullRowSelect = True

.CheckBoxes = True

For r = 2 To Sheet2.[A65536].End(xlUp).Row- 1

Set Itm = .ListItems.Add()

Itm.Text = Sheet2.Cells(r1)

For c = 1 To 6

Itm.SubItems(c) = Format(Sheet2.Cells(rc + 1)'###0.00')

Next

Next

End With

SetItm = Nothing

End Sub

Private Sub CommandButton1_Click()

Dimr As Integer

Dimi As Integer

Dimc As Integer

r =Sheet1.[A65536].End(xlUp).Row

If r> 1 Then Sheet1.Range('A2:G' & r) = ““

WithListView1

For i = 1 To .ListItems.Count

If .ListItems(i).Checked = True Then

Sheet1.Range('A65536').End(xlUp).Offset(10) = .ListItems(i)

For c = 1 To 6

Sheet1.Cells(65536c + 1).End(xlUp).Offset(10) = .ListItems(i).SubItems(c)

Next

End If

Next

EndWith

End Sub

代码解析:

1行到第26行代码,用户窗体的Initialize事件过程,在窗体显示时将工作表中数据显示在Listview控件中,请参阅▲131-1

其中第15行代码设置Listview控件的FullRowSelect属性为True,使用户可以选择整行。

16行代码设置Listview控件的CheckBoxes属性为True,使Listview控件在列表的每个项的旁边显示复选框。

27行到第43行代码,用户窗体中“保存”按钮的单击过程,将Listview控件中选中的项目写入到工作表中。

3132行代码,删除工作表中原有的数据,

3435行代码遍历Listview控件中所有的ListItem对象,判定其Checked值,如果为True,即说明其处于选中状态。

36行到第40行代码将Listview控件中选中的内容依次写入到工作表中。

运行窗体,Listview控件显示工作表中的内容,单击“保存”按钮将如Listview控件中选中的内容依次写入到工作表中。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多