書接上文,,繼續(xù)詳解控件的使用 使用spreadsheet控件 如果希望在窗體中顯示類似工作表的表格,,并且可以像工作表一樣進(jìn)行操作,,那么可以在窗體中使用表格控件(Spreadsheet控件)。 步驟1,,在VBE窗口中單擊菜單“插入”→“用戶窗體”,,在窗體上添加一個(gè)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 代碼解析: 用戶窗體的初始化事件過(guò)程,,使用窗體顯示工作表中的表格。 第5行代碼,,設(shè)置Spreadsheet控件不顯示工具欄,。 DisplayToolbar 屬性設(shè)置工具欄是否隱藏,語(yǔ)法如下: expression.DisplayToolbar 參數(shù)expression是必需的,,一個(gè)有效的對(duì)象,。 如果指定電子表格、圖表區(qū)或“數(shù)據(jù)透視表”列表顯示了工具欄,,則返回True,。 第6、7行代碼,,設(shè)置Spreadsheet控件不顯示水平和垂直滾動(dòng)條,。 第8行代碼,設(shè)置Spreadsheet控件不顯示工作表標(biāo)簽,。 第9行代碼,取得工作表B列有數(shù)據(jù)的最后一行的行號(hào),。 第10行代碼,,把工作表數(shù)據(jù)賦值給數(shù)組。 第11行到16行代碼,,把數(shù)組賦給Spreadsheet控件的單元格,,使Spreadsheet控件顯示工作表內(nèi)容,并且添加加框線,。 第17行到第21行代碼,,設(shè)置Spreadsheet控件中表格第一行的字體對(duì)齊方式為居中并添加單元格的底紋顏色。 第22行代碼,,設(shè)置Spreadsheet控件中表格第一列的字體對(duì)齊方式為居中,。 第23行代碼,設(shè)置Spreadsheet控件中表格數(shù)據(jù)的格式,。 第24行到26行代碼,,設(shè)置Spreadsheet控件的行高與列寬。 步驟2,,在窗體上添加一個(gè)按鈕控件,,將其Caption屬性設(shè)置為“保存”,,雙擊按鈕控件,在其代碼窗口中輸入下面的代碼: Private Sub CommandButton1_Click() DimiRow As Integer Dimarr As Variant If MsgBox('是否保存對(duì)表格所作的修改?',,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 代碼解析: 用戶窗體中“保存”按鈕的單擊過(guò)程,,把在窗體中對(duì)數(shù)據(jù)的修改重新保存到工作表。 第4行代碼,,詢問(wèn)用戶是否保存修改,。 第5行到第10行代碼,如果用戶選擇保存,,把Spreadsheet控件中的數(shù)據(jù)保存到工作表,。 運(yùn)行窗體,顯示效果,。
▲131 使用Listview控件 ListView控件是VBA程序開發(fā)中的常用控件,,可以在用戶窗體中把工作表的數(shù)據(jù)以列表的方式顯示。 131-1 使用Listview控件顯示數(shù)據(jù)列表 使用Listview控件在用戶窗體中顯示數(shù)據(jù)列表,,代碼如下: Private Sub UserForm_Initialize() DimItm As ListItem Dimr As Integer Dimc As Integer WithListView1 .ColumnHeaders.Add ,,,'人員編號(hào) ',,50,,0 .ColumnHeaders.Add ,,,'技能工資 ',,50,1 .ColumnHeaders.Add ,,,,'崗位工資 ',50,,1 .ColumnHeaders.Add ,,,'工齡工資 ',,50,,1 .ColumnHeaders.Add ,,,'浮動(dòng)工資 ',,50,1 .ColumnHeaders.Add ,,,,'其他 ',50,,1 .ColumnHeaders.Add ,,,,'應(yīng)發(fā)合計(jì)',50,,1 .View = lvwReport .Gridlines = True For r = 2 To Sheet1.[A65536].End(xlUp).Row Set Itm = .ListItems.Add() Itm.Text = Space(2) & Sheet1.Cells(r,,1) For c = 1 To 6 Itm.SubItems(c) = Format(Sheet1.Cells(r,c + 1),,'##,,#,0.00') Next Next End With SetItm = Nothing End Sub 代碼解析: 窗體的初始化事件,,在窗體顯示時(shí)將工作表中數(shù)據(jù)顯示在Listview控件中,。 第6行到第12行代碼,使用ColumnHeader對(duì)象的Add方法在Listview控件中添加標(biāo)題列,,并設(shè)置列標(biāo)題,、列寬和文本對(duì)齊方式。 ColumnHeader對(duì)象是ListView控件中包含標(biāo)題文字的項(xiàng)目,,應(yīng)用于ColumnHeader對(duì)象的Add方法語(yǔ)法如下: object.ColumnHeader.Add(index,,key,text,,width,,alignment) 其中參數(shù)text代表標(biāo)題文字,參數(shù)width代表標(biāo)題的列寬,,參數(shù)alignment代表列標(biāo)題中文本對(duì)齊方式,。Listview控件中文本的對(duì)齊方法有三種,如表格所示,。 在Listview控件中第一列的文本對(duì)齊方式只能設(shè)置為左對(duì)齊,。 第13行代碼,設(shè)置Listview控件的View屬性為lvwReport,,使Listview控件顯示為報(bào)表型,。View屬性決定在列表中控件使用何種視圖顯示項(xiàng)目,,語(yǔ)法如下: object.view [= value] 參數(shù)object是必需的,,對(duì)象表達(dá)式,listview控件,。 參數(shù)value是必需的,,指定控件外觀的整數(shù)或常數(shù),如表格所示,。 第14行代碼,,設(shè)置Listview控件的Gridlines屬性為True,顯示網(wǎng)格線,。只有在將View屬性設(shè)置為lvwReport時(shí)才能顯示網(wǎng)格線,,否則Gridlines屬性無(wú)效,。 第16行代碼,使用ListItem對(duì)象的Add方法在Listview控件中添加項(xiàng)目,。應(yīng)用于ListItem對(duì)象的Add方法語(yǔ)法如下: ListItems.Add(index,,key,text,,icon,,smallIcon) 其中參數(shù)text代表添加的項(xiàng)目?jī)?nèi)容。 第17行代碼,,添加行標(biāo)題,。ListItem對(duì)象的text屬性代表Listview控件的第一列內(nèi)容,因?yàn)?/span>Listview控件的第一列的文本對(duì)齊方式只能設(shè)置為左對(duì)齊,,所以在添加時(shí)使用Space函數(shù)插入兩個(gè)空格,,使行標(biāo)題達(dá)到居中顯示的效果。 第18行到20行代碼,,繼續(xù)添加其他列的內(nèi)容,。Listview控件其他列的項(xiàng)目需要使用SubItems屬性來(lái)添加。 運(yùn)行窗體,,Listview控件顯示工作表中的內(nèi)容,。 131-2 在Listview控件中使用復(fù)選框 在Listview控件中使用復(fù)選框,可以進(jìn)行多重選擇,,示例代碼如下: Private Sub UserForm_Initialize() DimItm As ListItem Dimr As Integer Dimc As Integer WithListView1 .ColumnHeaders.Add ,,,'人員編號(hào) ',,50,,0 .ColumnHeaders.Add ,,,'技能工資 ',,50,1 .ColumnHeaders.Add ,,,,'崗位工資 ',50,,1 .ColumnHeaders.Add ,,,'工齡工資 ',,50,,1 .ColumnHeaders.Add ,,'浮動(dòng)工資 ',,50,,1 .ColumnHeaders.Add ,,,'其他 ',,50,1 .ColumnHeaders.Add ,,,,'應(yīng)發(fā)合計(jì)',50,,1 .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(r,,1) For c = 1 To 6 Itm.SubItems(c) = Format(Sheet2.Cells(r,c + 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(1,,0) = .ListItems(i) For c = 1 To 6 Sheet1.Cells(65536,,c + 1).End(xlUp).Offset(1,0) = .ListItems(i).SubItems(c) Next End If Next EndWith End Sub 代碼解析: 第1行到第26行代碼,,用戶窗體的Initialize事件過(guò)程,,在窗體顯示時(shí)將工作表中數(shù)據(jù)顯示在Listview控件中,請(qǐng)參閱▲131-1,。 其中第15行代碼設(shè)置Listview控件的FullRowSelect屬性為True,,使用戶可以選擇整行。 第16行代碼設(shè)置Listview控件的CheckBoxes屬性為True,,使Listview控件在列表的每個(gè)項(xiàng)的旁邊顯示復(fù)選框,。 第27行到第43行代碼,用戶窗體中“保存”按鈕的單擊過(guò)程,,將Listview控件中選中的項(xiàng)目寫入到工作表中,。 第31、32行代碼,,刪除工作表中原有的數(shù)據(jù),, 第34、35行代碼遍歷Listview控件中所有的ListItem對(duì)象,,判定其Checked值,,如果為True,,即說(shuō)明其處于選中狀態(tài),。 第36行到第40行代碼將Listview控件中選中的內(nèi)容依次寫入到工作表中。 運(yùn)行窗體,,Listview控件顯示工作表中的內(nèi)容,,單擊“保存”按鈕將如Listview控件中選中的內(nèi)容依次寫入到工作表中,。 |
|