0Or.SelStart>0ThenKeyANSI" />
第6章控件与用户窗体
范例67 文本框只能输入数值
Private Sub TextBox1_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger) With TextBox1
Select Case KeyANSI
Case Asc("0") To Asc("9")
Case Asc("-")
If InStr(1, .Text, "-") > 0 Or .SelStart > 0 Then
KeyANSI = 0
End If
Case Asc(".")
If InStr(1, .Text, ".") > 0 Then KeyANSI = 0
Case Else
KeyANSI = 0
End Select
End With
End Sub
Private Sub TextBox1_Change()
Dim i As Integer
Dim Str As String
With TextBox1
For i = 1 To Len(.Text)
Str = Mid(.Text, i, 1)
Select Case Str
Case ".", "-", "0" To "9"
Case Else
.Text = Replace(.Text, Str, "")
End Select
Next
End With
End Sub
范例68 限制文本框的输入长度
Private Sub TextBox1_Change()
TextBox1.MaxLength = 6
End Sub
范例69 验证文本框输入的数据
Private Sub CommandButton1_Click()
With TextBox1
If (Len(Trim(.Text))) = 15 Or (Len(Trim(.Text))) = 18 Then
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = .Text
Else
MsgBox "身份证号码错误,请重新输入!"
End If
.Text = ""
.SetFocus
End With
End Sub
范例70 文本框回车自动输入
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim r As Integer
r = Cells(Rows.Count, 1).End(xlUp).Row
With TextBox1
If Len(Trim(.Text)) > 0 And KeyCode = vbKeyReturn Then
Cells(r + 1, 1) = .Text
.Text = ""
End If
End With
End Sub
范例71 文本框的自动换行
Private Sub UserForm_Initialize()
With TextBox1
.WordWrap = True
.MultiLine = True
.Text = "文本框是一个灵活的控件,受下列属性的影响:Text、" _
& "MultiLine、WordWrap和AutoSize。" & vbCrLf _
& "Text 包含显示在文本框中的文本。" & vbCrLf _
& "MultiLine 控制文本框是单行还是多行显示文本。" _
& "换行字符用于标识在何处结束一行并开始新的一行。" _
& "如果MultiLine 的值为False,则文本将被截断," _
& "而不会换行。如果文本的长度大于文本框的宽度," _
& "WordWrap允许文本框根据其宽度自动换行。" & vbCrLf _
& "如果不使用WordWrap,当文本框在文本中遇到换行字符时," _
& "开始一个新行。如果关闭WordWrap,TextBox中可以有不能" _
& "完全适合其宽度的文本行。文本框根据该宽度,显示宽度以" _
& "内的文本部分,截断宽度以外的那文本部分。只有当" _
& "MultiLine为True时,WordWrap才起作用。" & vbCrLf _
& "AutoSize 控制是否调节文本框的大小,以便显示所有文本。" _
& "当文本框使用AutoSize 时,文本框的宽度按照文本框中的" _
& "文字量以及显示该文本的字体大小收缩或扩大。"
End With
End Sub
范例72 格式化文本框数据
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox1 = Format(TextBox1, "##,#0.00")
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox2 = Format(TextBox2, "##,#0.00")
End Sub
范例73 使控件始终位于可视区域
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As Range
Set rng = ActiveWindow.VisibleRange.Cells(1)
With CommandButton1
.Top = rng.Top
.Left = rng.Left
End With
With CommandButton2
.Top = rng.Top
.Left = rng.Left + CommandButton1.Width
End With
Set rng = Nothing
End Sub
范例74 高亮显示按钮控件
Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
With https://www.doczj.com/doc/042645556.html,mandButton1
.BackColor = &HFFFF00
.Width = 62
.Height = 62
.Top = 69
.Left = 31
End With
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
With https://www.doczj.com/doc/042645556.html,mandButton1
.BackColor = Me.BackColor
.Width = 60
.Height = 60
.Top = 70
.Left = 32
End With
End Sub
范例75 列表框添加列表项的方法
75-1 使用RowSource属性
Private Sub UserForm_Initialize()
Dim r As Integer
r = Sheet3.Range("A1048576").End(xlUp).Row
ListBox1.RowSource = "Sheet3!a1:a" & r
End Sub
75-2 使用ListFillRange属性
Sub ListFillRange()
Dim r As Integer
r = Sheet3.Range("A1048576").End(xlUp).Row
Sheet1.ListBox1.ListFillRange = "Sheet3!a1:a" & r
Sheet1.Shapes("列表框").ControlFormat.ListFillRange = "Sheet3!a1:a" & r End Sub
75-3 使用List属性
Private Sub UserForm_Initialize()
Dim arr As Variant
Dim r As Integer
r = Sheet3.Range("A1048576").End(xlUp).Row
arr = Sheet3.Range("A1:A" & r)
ListBox1.List = arr
End Sub
Sub List()
Dim arr As Variant
Dim r As Integer
Dim MyObj As Object
r = Sheet3.Range("A1048576").End(xlUp).Row
arr = Sheet3.Range("A1:A" & r)
Set MyObj = Sheet2.Shapes("列表框").ControlFormat
MyObj.List = arr
Set MyObj = Nothing
End Sub
75-4 使用AddItem方法
Private Sub UserForm_Initialize()
Dim r As Integer
Dim i As Integer
r = Sheet3.Range("A1048576").End(xlUp).Row
For i = 1 To r
ListBox1.AddItem (Sheet3.Cells(i, 1))
Next
End Sub
Sub AddItem()
Dim r As Integer
Dim i As Integer
r = Sheet3.Range("A1048576").End(xlUp).Row
With Sheet2.Shapes("列表框").ControlFormat
.RemoveAllItems
For i = 1 To r
.AddItem Sheet3.Cells(i, 1)
Next
End With
End Sub
范例76 去除列表项的空行和重复项
Private Sub UserForm_Initialize()
Dim r As Integer
Dim i As Integer
Dim MyCol As New Collection
Dim arr() As Variant
On Error Resume Next
With Sheet1
r = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 1 To r
If Trim(.Cells(i, 1)) <> "" Then
MyCol.Add Item:=Cells(i, 1), key:=CStr(.Cells(i, 1)) End If
Next
End With
ReDim arr(1 To MyCol.Count)
For i = 1 To MyCol.Count
arr(i) = MyCol(i)
Next
ListBox1.List = arr
End Sub
范例77 移动列表框的列表项
Private Sub CommandButton1_Click()
Dim Ind As Integer
Dim Str As String
With Me.ListBox1
Ind = .ListIndex
Select Case Ind
Case -1
MsgBox "请选择一行后再移动!"
Case 0
MsgBox "已经是第一行了!"
Case Is > 0
Str = .List(Ind)
.List(Ind) = .List(Ind - 1)
.List(Ind - 1) = Str
.ListIndex = Ind - 1
End Select
End With
End Sub
Private Sub CommandButton2_Click()
Dim Ind As Integer
Dim Str As String
With ListBox1
Ind = .ListIndex
Select Case Ind
Case -1
MsgBox "请选择一行后再移动!"
Case .ListCount - 1
MsgBox "已经是最后下一行了!"
Case Is < .ListCount - 1
Str = .List(Ind)
.List(Ind) = .List(Ind + 1)
.List(Ind + 1) = Str
.ListIndex = Ind + 1
End Select
End With
End Sub
Private Sub CommandButton3_Click()
Dim i As Integer
For i = 1 To ListBox1.ListCount
Cells(i, 1) = ListBox1.List(i - 1)
Next
End Sub
范例78 允许多项选择的列表框
Private Sub UserForm_Initialize()
Dim arr As Variant
arr = Array("经理室", "办公室", "生技科", "财务科", "营业部", "制水车间", "污水厂", "其他")
With Me.ListBox1
.List = arr
.MultiSelect = 1
.ListStyle = 1
End With
End Sub
Private Sub CommandButton1_Click()
Dim i As Integer
Dim Str As String
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
Str = Str & ListBox1.List(i) & Chr(13)
End If
Next
If Str <> "" Then
MsgBox Str
Else
MsgBox "至少需要选择一个部门!"
End If
End Sub
范例79 多列列表框的设置
Private Sub UserForm_Initialize()
Dim r As Integer
With Sheet3
r = .Cells(.Rows.Count, 1).End(xlUp).Row - 1
End With
With ListBox1
.ColumnCount = 7
.ColumnWidths = "35,45,45,45,45,40,50"
.BoundColumn = 1
.ColumnHeads = True
.TextAlign = 3
.RowSource = Sheet3.Range("A2:G" & r).Address(External:=True) End With
End Sub
Private Sub ListBox1_Click()
Dim r As Integer
Dim i As Integer
With Sheet1
r = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
For i = 1 To ListBox1.ColumnCount
.Cells(r, i) = ListBox1.Column(i - 1)
Next
End With
End Sub
范例80 二级组合框
Private Sub UserForm_Initialize()
Dim r As Integer
Dim MyCol As New Collection
Dim arr() As Variant
Dim rng As Range
Dim i As Integer
On Error Resume Next
r = Cells(Rows.Count, 1).End(xlUp).Row
For Each rng In Range("A2:A" & r)
MyCol.Add rng, CStr(rng)
Next
ReDim arr(1 To MyCol.Count)
For i = 1 To MyCol.Count
arr(i) = MyCol(i)
Next
ComboBox1.List = arr
ComboBox1.ListIndex = 0
Set MyCol = Nothing
Set rng = Nothing
End Sub
Private Sub ComboBox1_Change()
Dim MyAddress As String
Dim rng As Range
ComboBox2.Clear
With Sheet1.Range("A:A")
Set rng = .Find(What:=ComboBox1.Text)
If Not rng Is Nothing Then
MyAddress = rng.Address
Do
ComboBox2.AddItem rng.Offset(, 1)
Set rng = .FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> MyAddress End If
End With
ComboBox2.ListIndex = 0
Set rng = Nothing
End Sub
范例81 使用RefEdit控件选择区域
Private Sub CommandButton1_Click()
Dim rng As Range
On Error Resume Next
Set rng = Range(RefEdit1.Value)
rng.Interior.ColorIndex = 16
Set rng = Nothing
End Sub
范例82 使用多页控件
Private Sub UserForm_Initialize()
MultiPage1.Value = 0
End Sub
Private Sub MultiPage1_Change()
If MultiPage1.SelectedItem.Index > 0 Then
MsgBox "您选择的是" & MultiPage1.SelectedItem.Caption & "页面!"
End If
End Sub
范例83 使用TabStrip控件
Private Sub UserForm_Initialize()
TabStrip1.Value = 0
TabStrip1.Style = 0
End Sub
Private Sub TabStrip1_Change()
Dim str As String
Dim FilPath As String
str = TabStrip1.SelectedItem.Caption
FilPath = ThisWorkbook.Path & "\" & str & ".jpg"
Image1.Picture = LoadPicture(FilPath)
Label1.Caption = str & "欢迎您!"
End Sub
范例84 在框架中使用滚动条
Private Sub UserForm_Initialize()
With Frame1
.ScrollBars = 3
.ScrollHeight = Image1.Height
.ScrollWidth = Image1.Width
End With
End Sub
范例85 制作进度条
Sub myProgressBar()
Dim r As Integer
Dim i As Integer
With Sheet1
r = .Cells(.Rows.Count, 1).End(xlUp).Row
UserForm1.Show 0
With UserForm1.ProgressBar1
.Min = 1
.Max = r
.Scrolling = 0
End With
For i = 1 To r
.Cells(i, 3) = Round(.Cells(i, 1) * .Cells(i, 2), 2)
Application.Goto Reference:=.Cells(i, 1), Scroll:=True
UserForm1.ProgressBar1.Value = i
UserForm1.Caption = "程序正在运行,已完成" & Format((i / r) * 100, "0.00") & "%,请稍候!"
Next
End With
Unload UserForm1
End Sub
范例86 使用DTP控件输入日期
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Me.DTPicker1
If Target.Count = 1 And Target.Column = 1 And Not Target.Row = 1 Or Target.MergeCells Then
.Visible = True
.Top = Selection.Top
.Left = Selection.Left
.Height = Selection.Height
.Width = Selection.Width
If Target.Cells(1, 1) <> "" Then
.Value = Target.Cells(1, 1).Value
Else
.Value = Date
End If
Else
.Visible = False
End If
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 And Target.Column = 1 Or Target.MergeCells Then If Target.Cells(1, 1).Value = "" Then
DTPicker1.Visible = False
End If
End If
End Sub
Private Sub DTPicker1_CloseUp()
ActiveCell.Value = Me.DTPicker1.Value
Me.DTPicker1.Visible = False
End Sub
范例87 使用spreadsheet控件
Private Sub UserForm_Initialize()
Dim r As Integer
Dim arr As Variant
Dim i As Integer
With Sheet3
r = .Cells(.Rows.Count, 1).End(xlUp).Row
arr = .Range("A1:G" & r)
End With
With Me.Spreadsheet1
.DisplayToolbar = False
.DisplayWorkbookTabs = False
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = True
.Rows.RowHeight = 15
.Columns.ColumnWidth = 8
With .Range("A1:G" & r)
.Value = arr
.HorizontalAlignment = -4108
.Borders.LineStyle = xlContinuous
.Borders.ColorIndex = 10
.NumberFormat = "0.00"
End With
End With
End Sub
Private Sub CommandButton1_Click()
Dim r As Integer
Dim arr As Variant
With Me.Spreadsheet1
r = .Cells(.Rows.Count, 1).End(xlUp).Row
arr = .Range("A1:G" & r)
Sheet1.Range("A1:G" & r) = arr
End With
Unload Me
End Sub
Sub RegWriteProc()
Dim WshShell
Set WshShell = CreateObject("Wscript.Shell")
WshShell.RegWrite
"HKCU\Software\Microsoft\Office\Common\Security\UFIControls", 1, "REG_DWORD"
WshShell.RegWrite
"HKCU\Software\Microsoft\VBA\Security\LoadControlsInForms", 1, "REG_DWORD"
Set WshShell = Nothing
End Sub
范例88 使用TreeView控件显示层次
Private Sub UserForm_Initialize()
Dim c As Integer
Dim r As Integer
Dim rng As Variant
rng = https://www.doczj.com/doc/042645556.html,edRange
With TreeView1
.Style = tvwTreelinesPlusMinusPictureText
.LineStyle = tvwRootLines
.CheckBoxes = False
With .Nodes
.Clear
.Add Key:="科目", Text:="科目名称"
For c = 1 To https://www.doczj.com/doc/042645556.html,edRange.Columns.Count
For r = 2 To https://www.doczj.com/doc/042645556.html,edRange.Rows.Count
If Not IsEmpty(rng(r, c)) Then
If c = 1 Then
.Add relative:="科目", Relationship:=tvwChild, Key:=rng(r, c), Text:=rng(r, c)
ElseIf Not IsEmpty(rng(r, c - 1)) Then
.Add relative:=rng(r, c - 1), Relationship:=tvwChild, Key:=rng(r, c), Text:=rng(r, c)
Else
.Add relative:=CStr(Sheet2.Cells(r, c - 1).End(xlUp)), Relationship:=tvwChild, Key:=rng(r, c), Text:=rng(r, c)
End If
End If
Next
Next
End With
End With
End Sub
Private Sub TreeView1_DblClick()
Dim r As Integer
With Sheet1
r = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
If TreeView1.SelectedItem.Children = 0 Then
.Range("A" & r) = TreeView1.SelectedItem.Text
Else
MsgBox "您所选择的不是末级科目,请重新选择!"
End If
End With
End Sub
范例89 使用Listview控件
89-1 使用Listview控件显示数据列表
Private Sub UserForm_Initialize()
Dim Itm As ListItem
Dim r As Integer
Dim i As Integer
Dim c As Integer
r = Cells(Rows.Count, 1).End(xlUp).Row
With ListView1
.ColumnHeaders.Add , , "人员编号", 50, 0
.ColumnHeaders.Add , , "技能工资", 50, 1
.ColumnHeaders.Add , , "岗位工资", 50, 1
.ColumnHeaders.Add , , "工龄工资", 50, 1
.ColumnHeaders.Add , , "浮动工资", 50, 1
.ColumnHeaders.Add , , "其他", 50, 1
.ColumnHeaders.Add , , "应发合计", 50, 1
.View = lvwReport
.Gridlines = True
For i = 2 To r
Set Itm = .ListItems.Add()
Itm.Text = Space(2) & Cells(i, 1)
For c = 1 To 6
Itm.SubItems(c) = Format(Cells(i, c + 1), "##,#,0.00")
Next
Next
End With
Set Itm = Nothing
End Sub
89-2 在Listview控件中使用复选框
Private Sub UserForm_Initialize()
Dim Itm As ListItem
Dim r As Integer
Dim i As Integer
Dim c As Integer
r = Sheet2.Cells(Sheet2.Rows.Count, 1).End(xlUp).Row
With ListView1
.ColumnHeaders.Add , , "人员编号", 50, 0
.ColumnHeaders.Add , , "技能工资", 50, 1
.ColumnHeaders.Add , , "岗位工资", 50, 1
.ColumnHeaders.Add , , "工龄工资", 50, 1
.ColumnHeaders.Add , , "浮动工资", 50, 1
.ColumnHeaders.Add , , "其他", 50, 1
.ColumnHeaders.Add , , "应发合计", 50, 1
.View = lvwReport
.Gridlines = True
.FullRowSelect = True
.CheckBoxes = True
For i = 2 To r - 1
Set Itm = .ListItems.Add()
Itm.Text = Sheet2.Cells(i, 1)
For c = 1 To 6
Itm.SubItems(c) = Format(Sheet2.Cells(i, c + 1), "##,#,0.00") Next
Next
End With
Set Itm = Nothing
End Sub
Private Sub CommandButton1_Click()
Dim r As Integer
Dim i As Integer
Dim c As Integer
r = Cells(Rows.Count, 1).End(xlUp).Row
If r > 1 Then Range("A2:G" & r).ClearContents
With ListView1
For i = 1 To .ListItems.Count
If .ListItems(i).Checked Then
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = .ListItems(i)
For c = 1 To 6
Cells(Rows.Count, c + 1).End(xlUp).Offset(1, 0) = .ListItems(i).SubItems(c)
Next
End If
Next
End With
End Sub
89-3 调整Listview控件的行距
Private Sub UserForm_Initialize()
Dim Itm As ListItem
Dim i As Integer
Dim c As Integer
Dim Img As ListImage
With ListView1
.ColumnHeaders.Add , , "人员编号", 50, 0
.ColumnHeaders.Add , , "技能工资", 50, 1
.ColumnHeaders.Add , , "岗位工资", 50, 1
.ColumnHeaders.Add , , "工龄工资", 50, 1
.ColumnHeaders.Add , , "浮动工资", 50, 1
.ColumnHeaders.Add , , "其他", 50, 1
.ColumnHeaders.Add , , "应发合计", 50, 1
.View = lvwReport
.Gridlines = True
.FullRowSelect = True
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
Set Itm = .ListItems.Add()
Itm.Text = Space(2) & Cells(i, 1)
For c = 1 To 6
Itm.SubItems(c) = Format(Cells(i, c + 1), "##,#,0.00")
Next
Next
Set Img = ImageList1.ListImages.Add _
(Picture:=LoadPicture(ThisWorkbook.Path & "\" & "1×25.bmp")) .SmallIcons = ImageList1
End With
Set Itm = Nothing
Set Img = Nothing
End Sub
89-4 在Listview控件中排序
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
With ListView1
.Sorted = True
.SortOrder = (.SortOrder + 1) Mod 2
.SortKey = ColumnHeader.Index - 1
End With
End Sub
89-5 Listview控件的图标设置
Private Sub UserForm_Initialize()
Dim ITM As ListItem
Dim i As Integer
With ListView1
.View = lvwIcon
.Icons = ImageList1
For i = 2 To 6
Set ITM = .ListItems.Add()
ITM.Text = Cells(i, 1)
ITM.Icon = i - 1
Next
End With
Set ITM = Nothing
End Sub
Private Sub UserForm_Initialize()
Dim ITM As ListItem
Dim i As Integer
With ListView1
.View = lvwSmallIcon
.SmallIcons = ImageList1
For i = 2 To 6
Set ITM = .ListItems.Add()
ITM.Text = Cells(i, 1)
ITM.SmallIcon = i - 1
Next
End With
Set ITM = Nothing
End Sub
范例90 使用Toolbar控件添加工具栏
Private Sub UserForm_Initialize()
Dim arr As Variant
Dim i As Byte
arr = Array(" 录入", " 审核", " 记账", " 结账", "负债表", "损益表") With Toolbar1
.ImageList = ImageList1
.Appearance = ccFlat
.BorderStyle = ccNone
.TextAlignment = tbrTextAlignBottom
With .Buttons
.Add(1, , "").Style = tbrPlaceholder
For i = 0 To UBound(arr)
.Add(i + 2, , , , i + 1).Caption = arr(i)
Next
End With
End With
End Sub
范例91 使用StatusBar控件添加状态栏
Private Sub UserForm_Initialize()
Dim Pal As Panel
Dim arr1 As Variant
Dim arr2 As Variant
Dim i As Integer
arr1 = Array(0, 6, 5)
arr2 = Array(180, 60, 54)
StatusBar1.Width = 294
For i = 1 To 3
Set Pal = StatusBar1.Panels.Add()
With Pal
.Style = arr1(i - 1)
.Width = arr2(i - 1)
.Alignment = i - 1
End With
Next
StatusBar1.Panels(1).Text = "准备就绪!"
End Sub
Private Sub TextBox1_Change()
StatusBar1.Panels(1).Text = "正在输入:" & TextBox1.Text End Sub
范例92 使用AniGif控件显示GIF图片
Private Sub CommandButton1_Click()
AniGif1.Stretch = True
AniGif1.Filename = ThisWorkbook.Path & "\001.gif"
End Sub
范例93 使用ShockwaveFlash控件播放Flash文件
Private Sub CommandButton1_Click()
With ShockwaveFlash1
.Movie = ThisWorkbook.Path & "\001.swf"
.EmbedMovie = False
.Menu = False
.ScaleMode = 2
End With
End Sub
Private Sub CommandButton2_Click()
ShockwaveFlash1.Play
End Sub
Private Sub CommandButton3_Click()
ShockwaveFlash1.Forward
End Sub
Private Sub CommandButton4_Click()
ShockwaveFlash1.Stop
End Sub
Private Sub CommandButton5_Click()
ShockwaveFlash1.Back
End Sub
Private Sub CommandButton6_Click()
ShockwaveFlash1.Movie = " "
End Sub
Private Sub CommandButton7_Click()
Unload Me
End Sub
范例94 注册自定义控件
Sub Regsvrs()
Dim SouFile As String
Dim DesFile As String
On Error Resume Next
SouFile = ThisWorkbook.Path & "\VBAniGIF.OCX"
DesFile = "C:\Windows\system32\VBAniGIF.OCX"
FileCopy SouFile, DesFile
Shell "REGSVR32 /s " & DesFile
MsgBox "AniGif控件已成功注册,现在可以使用了!"
End Sub
Sub Regsvru()
Shell "REGSVR32 /u C:\Windows\system32\VBAniGIF.OCX"
End Sub
范例95 不打印工作表中的控件
范例96 遍历控件的方法
96-1 使用名称中的变量
Private Sub CommandButton1_Click()
Dim i As Integer
For i = 1 To 3
Me.Controls("TextBox" & i) = ""
Next
End Sub
Sub ClearText()
ExcelVBA用户窗体编程基础 概述 当使用MsgBox函数和InputBox函数不能满足与用户交互的需求时,您能使用用户窗体来自定义对话框。您能使用用户窗体来显示所输入的数据,您甚至能使用用户窗体创建一个完整的用户界面,而不会让用户接触到电子表格本身。 您在Windows对话框中所看到的大多数控件都能在用户窗体中实现——命令按钮,选项按钮,复选框,文本框,组合框——加上一些其它不常用的控件像图像,日历,等等。 本文介绍了用户窗体的基本概念,并介绍了使用用户窗体的常用技术。其中,也讲解了一些最通用的思路。在文章中列举了一个包含所有过程的完整的示例文件,以及实现这些过程的代码,让您能在实践中看到所有工作的基本原理和方法。 本文包含以下内容: ● 基本的用户窗体操作 ● 用户窗体和控件的属性 ● 一个用户窗体的生命周期 ● 用户窗体和控件的事件 ● 问题1:如何在用户窗体间传递数据? ● 问题2:如何找到我的窗体中的某类控件? ● 问题3:如何获取数据到列表框中? ● 问题4:如何为循环创建进度条? ● 一个完整的用户窗体综合示例 基本的用户窗体操作 ?创建一个窗体。打开VBE编辑器(选择菜单“工具——宏——Visual Basic编辑器”或按Alt+F11组合键),选择菜单“插入——用户窗体”,或者在工程窗口中单击右键,从弹出的快捷菜单中选择“插入——用户窗体”,即可创建一个窗体。 ?添加控件。当你创建了一个窗体后,将会显示一个名为“控件工具箱”的浮动工具箱(如果没有该工具箱的话,您可以从视图菜单中找到它),其中显示了最普遍的控件类型。单击您想要的控件,拖动它到您的用户窗体中。 ?更多的控件。有一些更多的可用的控件,您可以在控件工具箱中单击右键,从中选择“附加控件”,您能添加日历、电子表
第6章控件与用户窗体 范例67 文本框只能输入数值 Private Sub TextBox1_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger) With TextBox1 Select Case KeyANSI Case Asc("0") To Asc("9") Case Asc("-") If InStr(1, .Text, "-") > 0 Or .SelStart > 0 Then KeyANSI = 0 End If Case Asc(".") If InStr(1, .Text, ".") > 0 Then KeyANSI = 0 Case Else KeyANSI = 0 End Select End With End Sub Private Sub TextBox1_Change() Dim i As Integer Dim Str As String With TextBox1 For i = 1 To Len(.Text) Str = Mid(.Text, i, 1) Select Case Str Case ".", "-", "0" To "9" Case Else .Text = Replace(.Text, Str, "") End Select Next End With End Sub
范例68 限制文本框的输入长度 Private Sub TextBox1_Change() TextBox1.MaxLength = 6 End Sub 范例69 验证文本框输入的数据 Private Sub CommandButton1_Click() With TextBox1 If (Len(Trim(.Text))) = 15 Or (Len(Trim(.Text))) = 18 Then Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = .Text Else MsgBox "身份证号码错误,请重新输入!" End If .Text = "" .SetFocus End With End Sub 范例70 文本框回车自动输入 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim r As Integer r = Cells(Rows.Count, 1).End(xlUp).Row With TextBox1 If Len(Trim(.Text)) > 0 And KeyCode = vbKeyReturn Then Cells(r + 1, 1) = .Text .Text = "" End If End With End Sub 范例71 文本框的自动换行 Private Sub UserForm_Initialize() With TextBox1 .WordWrap = True
第2章使用窗体控件 课堂练习:为控件创建事件处理程序 5)传递给这个事件处理程序的第二个参数(e)的目的是什么? 答:参数e包含事件数据。它是一个EventArgs 对象(实际不包含事件数据的基类),或者是一个派生类(像MouseEventArgs)的实例。要查看派生类的完整列表,请在Visual Studio .NET帮助文档中使用短语“EventArgs 类”进行查找,然后点击链接转到“派生类”。 ●为Click 事件创建一个事件处理程序。 3)上面的双击动作为什么创建了一个Click 事件处理程序? 答:当在设计视图中双击一个控件时,IDE会自动为默认事件创建一个事件处理程序。课堂练习:创建和使用ToolBar控件 8)为什么不能向ToolBar 按钮添加图像呢? 答:ToolBar 控件将ImageList 控件作为图像源。使用ToolBar 控件的ImageList 属性指定Toolbar 将从哪个ImageList 控件获取图像。 13)运行应用程序。单击工具栏按钮时有事情发生吗?必须处理什么事件以响应单击ToolBar按钮? 答:ToolBar 的ButtonClick事件用来处理ToolBar按钮的单击。ToolBarButtonClickEventArgs 用来确定单击了哪个按钮。 课堂练习:在运行时添加和移除控件 ●添加新控件 6)为什么decimalCheckBox 出现在GroupBox1控件的左上角? 答:控件位置属性的默认坐标X和Y的值均为零。 课堂练习:在运行时更新菜单 ●使用另一个MainMenu 9)什么时候能在一个应用程序中使用多个MainMenu 控件? 答:在应用程序的上下文改变或者应用程序有多种状态时,使用(显示)多个MainMenu 对象会很有帮助。 ●将一个ContextMenu 分配给一个控件。 5)如何找出哪个控件与ContextMenu 有关联? 答:ContextMenu.SourceControl 属性获取显示快捷方式菜单的控件。 ●找出与ContextMenu关联的控件
C#中用户控件与窗体间的消息传递 如果在c#中实现用户定义控件内的事件挂勾到调用的窗体事件中 我们都知道在https://www.doczj.com/doc/042645556.html,开发中,如果使用用户定义控件可以有效的进行程序的模块化。其实在.net 的winform中也是可以使用的。 细节如下: 1、新建应用程序windowsapplication1。 2、添加新的用户控件userlogin。(如图user) 3、定义用户属性 //定义属性 public string username { get{return username;} set{username=value;} } public string password { get{return password;} set{password=value;} } 4、定义委托 //定义委托 public delegate void btnokclickeventhander(object sender,eventargs e); public delegate void btncancelclickeventhander(object sender,eventargs e); 5、定义事件 //定义事件 public event btnokclickeventhander btnokclick; public event btncancelclickeventhander btncancelclick 6、事件实现 private void textboxuid_textchanged(object sender, system.eventargs e) { username=this.textboxuid.text; } private void textboxpwd_textchanged(object sender, system.eventargs e) { password=this.textboxpwd.text; } private void buttonok_click(object sender, system.eventargs e) { if (btnokclick!=null)
第二章窗体与基本控件 教学内容: 一、窗体 窗体的属性、事件、方法及应用举例 二、基本控件以及对控件的格式化 命令按钮、标签、文本框等基本控件属性、事件与方法,基本控件的添加/删除、调整控件的大小与位置、窗体与控件的布局调整 三、简单语句 Print方法、人机对话函数(InputBox,MsgBox,Cls,End,Stop,Rem语句)、基本格式、功能、举例说明。教学要求: 了解:控件的格式化 掌握:常用控件(窗体、文本框、标签、命令按钮)的常用属性、事件和方法、Print方法、Inputbox、Msgbox、Cls、End语句的使用方法 §2.1 窗体 1.窗体的基本属性 Name 对象的名称 指定窗体的名称,在程序代码中用这个名称引用该窗体。 第一个窗体的名称缺省值为form1,通常要给name属性设置一个有实际意义的名称,便于识别。 Caption 对象的标题 设置窗体标题栏显示的文本。 Height 对象的高度 Width 对象的宽度 设置窗体的高度和宽度。单位为Twip。 1Twip=1/20点=1/1440英寸=1/567cm Enabled 对象的激活或禁止 用来设置窗体是否响应鼠标或键盘事件。缺省时为True,窗体能够对用户产生的事件作出反映。 Visible 对象的可见性 设置窗体是否显示。True(窗体可见),False(运行时,窗体及其上面的对象都将被隐藏) Top 对象的顶边距离 Left 对象的左边距离 Backcolor 设置窗体的背景颜色; Forecolor 设置窗体的前景颜色。 Font 设置窗体上字体的样式,大小,字形等。 Picture 设置在窗体中显示的图片。 注意:要在程序中设置该属性的值,需要使用LoadPicture函数。 WindowStare属性设置窗体运行时的大小状态。有三个可选值: 0-Normal 窗体大小由Height和Width属性决定,此值为缺省值; 1-Minimized 窗体最小化成图标; 2-Maximized 窗体最大化,充满整个屏幕。 2.窗体的事件和方法 事件: Click(单击)事件:单击鼠标左键时触发 DblClick(双击)事件:双击窗体时触发 Load(装入)事件:窗体被装入工作区时触发 方法: Print 格式:[对象名.] Print [表达式列表][;|,] 功能:在对象上输出信息 例如:Form1.Print “VB”;”程序设计” Cls 格式:[对象名.] Cls
若要向用户窗体中添加控件,请在“工具箱”中查找要添加的控件,将该控件拖到窗体上,然后拖动控件上的调整柄,直至控件的外边框成为所需的大小和形状。 注意如果将控件(或若干“成组”的控件)从窗体拖回到“工具箱”,将创建该控件的一个模板,该模板可被重新使用。对于实现应用程序的标准界面,这是非常有用的功能。 向窗体添加了控件之后,可用 Visual Basic 编辑器中“格式”菜单上的命令调整控件的对齐方式和间距。 上页:Excel VBA教程:向文档中添加控件下页:Excel VBA教程:应用程序对象事件 Excel VBA Excel VBA教程:应用程序对象事件Excel VBA教程:图表对象事件 Excel VBA教程:控件和对话框事件Excel VBA教程:在某一 Microsoft Office 应用程序中控制其他 Microsoft Office 应 用程序 Excel VBA教程:创建自定义对话框Excel VBA教程:新建工作簿 Excel VBA教程:创建“用户窗体”Excel VBA教程:显示自定义对话框 Excel VBA教程:获取有关 Macintosh 关键 字的帮助 Excel VBA教程:在单元格区域中循环Excel VBA教程:如何引用单元格和区域Excel VBA教程:初始化控件属性Excel VBA教程:打开工作簿Excel VBA教程:QueryTable对象事件 Excel VBA教程:引用工作表上的所有单元格Excel VBA教程:用 A1 样式记号引用单元格 和单元格区域 Excel VBA教程:用编号引用单元格Excel VBA教程:相对于其他单元格来引用单 元格 Excel VBA教程:用 Range对象引用单元格Excel VBA教程:用快捷记号引用单元格
第4章 1.回顾 桌面应用程序中的单选按钮的使用 可以使用分组框对控件进行分组 用PictureBox可显示图片 Timer控件是用于计时的计时器控件,可以重复执行Tick事件 滚动条可滚动取值,用进度条可记录某一过程的进度情况 用选项卡控件可对窗体上的控件进行分类 2.本章内容 了解SDI、MDI窗体 掌握TreeView控件 3.本章重点 了解SDI、MDI窗体 掌握TreeView控件 4.本章讲课思路 什么单文档、什么是多文档 多文档窗体的作用 如何创建多文档窗体 treeview控件 节点集和节点对象 5.知识点讲解 01.知识点一:MDI窗体 a)讲解思路: 1)什么是窗体,应用程序的用户界面,多文档窗体有是什么样的窗体? 2)SDI、MDI窗体的区别 3)如何创建多文档窗体 4)MDI主窗体的属性、方法和事件 5)操作MDI子窗体 6) b)讲解要点:
如何创建多文档窗体 MDI主窗体的属性、方法和事件 操作MDI子窗体 c)课堂练习: 创建一个winform登录程序主窗体编译并运行 d)小结: MDI多文档窗体,就是可以在一个界面中同时对多个文档进行操作 02.知识点一:TreeView控件 a)讲解思路: 什么数树形菜单 Windows 资源管理器中左窗格所包含的目录和文件是以树型视图样式排列的 Treeview 控件的作用。 用于以节点形式显示文本或数据,这些节点按层次结构顺序排列 节点集和节点对象 节点的常用属性和方法和事件 b)讲解要点: 节点集和节点对象 节点的常用属性和方法和事件 c)课堂练习: 在主窗体中添加treeview控件 d)小结: Treeview 控件的作用。 用于以节点形式显示文本或数据,这些节点按层次结构顺序排列 节点集和节点对象 03.课堂总结 a)思路: 04.掌握多文档窗体的创建及使用 05.使用树视图显示有层次结构的数据 06.作业: 课堂作业:编写登陆主窗体。 课后作业:书上日记本练习
用户窗体的基础知识用户窗体的显示方式用于以编程方式显示用户窗体的语法是下列: UserFormName.Show 若要显示名为 UserForm1 用户窗体,使用以下代码: UserForm1.Show ,您可以加载到内存用户窗体而不实际显示它。可能需要复杂的用户窗体多个要显示的秒数。因为您可以预先用户窗体加载到内存中,您可以决定何时会导致这种开销。而不显示它加载 到内存的 UserForm1,使用下面的代码: Load UserForm1 显示用户窗体,您必须使用了以前显示的显示方法。 如何暂时隐藏用户窗体如果要暂时隐藏用户窗体,使用隐藏方法。您可能希望隐藏用户窗体,如果您的应用程序涉及到用户窗体之间移动。若要隐藏用户窗体,使用下面的代码: UserForm1.Hide 如何从内存中删除用户窗体若要从内存中删除用户窗体使用卸载语句。若要卸载 UserForm1 命名的用户窗体,使用下面的代码: Unload UserForm1 如果您卸载了用户窗体与用户窗体相关联,则与在用户窗体上某个控件关联的事件过程中(渚嬪的方式 单击命令按钮),可以使用"Me"关键字而不是用户窗体的名称。若要使 用"Me"关键字卸载用户窗体,使用下面的代码: Unload Me 如何使用用户窗体事件用户窗体支持许多预定义的事件,您可以将附加 VBA 过程。该事件时则该过程,您附加到该事件的运行。由用户执行的单个操作可以启动多个事件。最经常使用的用户窗体的事件包括初始化事件、, Click 事件和终止事件。 请注意VBA 模块包含事件过程可能被称为"隐藏"用户窗体模块。在模块包含事件过程中不可见 Visual Basic 编辑器的 Microsoft 项目资源管理器窗口的模块集合。您必须双击 用户窗体可以查看用户窗体代码模块的正文。 如何捕获用户窗体事件要捕获用户窗体事件,请按照这些步骤操作: 1.在 Excel 中创建一个新的工作簿。 2.在工具菜单上指向宏,然后单击Visual Basic 编辑器。
第1章 使用窗体和控件 为了便于程序与用户间的交互,可以在Excel中创建独立的窗体,在其中添加一些控件,这样就可以让用户像使用Excel内置对话框一样,来使用窗体。不但减少了数据输入的麻烦,而且也使操作界面更加友好。本章将介绍窗体和控件的知识。 1.1Excel中的两类窗体 为了简化输入,可以在Excel工作表中通过添加控件的方式,制作一个交互性极强的表单系统。如图1-1所示的工作表也许您以前曾经看到过,它就是一个工作表窗体,其中放置了一些控件,使得输入与选择数据变得非常简单。这非常适合于开发人员给客户提供的最终Excel应用程序。 在Excel中进行各种操作时,经常会遇到在一个弹出的对话框中选择某个选项或输入某些内容而得到设置结果。如果希望自己定制对话框的外观及可用选项,那么就需要创建用户窗体。如图1-2所示为一个根据用户选择的选项来查询图书的一个查询窗体。 图1-1 一个工作表窗体的例子图1-2 一个用户窗体的例子本章剩下的部分将先介绍创建用户窗体的步骤和方法,然后介绍在工作表中使用控件的方法和技巧。 1.2使用InputBox和MsgBox函数代替窗体 在前几章中,我们已经多次用到了InputBox和MsgBox函数。使用这两个函数可以显
示简单的对话框。因此,如果不需要特别定制复杂的窗体,而只是获取用户的输入或返回一条信息,那么就可以使用InputBox和MsgBox函数来完成。 1.2.1InputBox InputBox函数分为两种,一种是VB程序中的InputBox函数,另一种是Excel中Appl ication对象的InputBox方法。它们都可以显示一个输入框,用于获取用户的输入信息,然后将返回结果赋值给一个变量以进行其他操作。Excel中的Application对象的InputBox方法比VB程序中的InputBox函数有更强大的功能。 VB程序中的InputBox函数的语法如下: InputBox(prompt, title, default, xpos, ypos, helpfile, contex t) InputBox函数中各参数的作用如下: prompt:显示在输入对话框中的文本(必选)。 title:显示在输入对话框标题栏中的文本(可选)。 default:显示在输入对话框的文本框中的默认值(可选)。 xpos和ypos:窗口左上角的屏幕坐标值(可选)。 helpfile:输入对话框中的帮助文件(可选)。 context:输入对话框中的帮助主题(可选)。 在使用InputBox函数时,通常只会使用前3个参数或者只使用前两个参数,得到如下的简化版本: InputBox(prompt, title, default) 例如,下面的代码将根据用户输入的内容返回一条信息: Sub GetInfo() Dim Ans As String Ans = InputBox("请输入", "输入信息") MsgBox "您输入的信息是:" & Ans End Sub 运行上面的代码,将显示如图1-3所示的对话框。当用户输入一个内容并单击【确定】按钮,将在一个对话框中显示所输入的内容。 图1-3 使用VB的InputBox函数打开的输入对话框 如果在上个例子中用户未输入任何内容或单击【取消】按钮,那么InputBox函数都将返回一个空字符串。为了强制要求用户输入内容,可以设置一个Do While循环,只要输
目录 VBA常用技巧.................................................... 第8章控件与用户窗体...................................... 技巧1.................................................................... 限制文本框的输入 技巧2........................................................ 文本框添加右键快捷菜单 技巧3................................................................ 文本框回车自动输入 技巧4................................................................ 自动选择文本框内容 技巧5................................................................ 设置文本框数据格式 技巧6............................................................ 限制文本框的输入长度 技巧7................................................................ 将光标返回文本框中 技巧8.................................................................... 文本框的自动换行 技巧9................................................................ 多个文本框数据相加 技巧10.............................................................. 控件跟随活动单元格 技巧11.......................................................................... 高亮显示按钮 技巧12...................................... 组合框和列表框添加列表项的方法12-1....................................... 使用RowSource属性添加列表项 12-2................................................. 使用List属性添加列表项 12-3........................................... 使用AddItem方法添加列表项技巧13...................................... 去除列表框数据源的重复值和空格 技巧14...................................................................... 移动列表框条目 技巧15.......................................................... 允许多项选择的列表框
实验5、窗体与控件 实验课时: 课内:2课时,课外:2课时 实验目的: 掌握用户界面设计的原则与方法,熟练使用窗体及常用控件的属性、事件和方法来处理业务。 实验内容: 项目A :界面设计之4S 店服务公告 Christopher 汽车中心开展与车辆有关的一切业务,包括新车、二手车的租售、汽车的保养和修理、零件的销售及洗车等等。本项目要做的,就是为该中心设计一个程序来显示各部门的最新通知。该项目仅包含一个窗体,最终的窗体运行时截图类似: 实验内容、具体要求及步骤为: 1. 在计算机D 或E 分区创建“你的文件夹”(类似“198009010101文立斌”) 2. 启动Visual Studio 2010,在“你的文件夹”内创建一个解决方案(项目),解决方案 (项目)名称类似“文立斌A ”,窗体名称类似“frm 文立斌A ” 3. 如以上运行时截图及下图所示,窗体顶部设计两个Label (标签)控件,其中左边的Label 图片、数据库资源请垂询894867898@https://www.doczj.com/doc/042645556.html,
显示静态文字“Special Notices:”,右边的Label将用于动态显示4S店的各种通知: 4.之后,如以上运行时截图及下图所示,请在窗体上设计一个文字内容为“Hours”的 CheckBox(复选框)控件,其右边设计一个Label控件。CheckBox控件最常用的事件是CheckedChanged(选择已发生变化),最常用的属性自然是Checked(是否已选中)。 现在,请为该控件的CheckedChanged事件编写必要的代码,使得该控件已被选中时,其右边的Label控件中显示文字“Open 24 Hours – 7 days a week”,反之则不显示任何文字: 提示:检查CheckBox的Checked属性值是true还是false,并根据该属性的值设置右边Label控件的Text属性即可——不要告诉我Text属性是干什么的哦! 5.往下则设计四个PictureBox(图片框)控件,每个图片框上方各设计一个Label来指 出图像所代表的部门:Auto Sales,Service,Detail,Employeement Opportuniti: 图片来源: 图片控件图像文件名称 Auto Sales Cars.ico Service Center Wrench.ico Detail Shop Water.ico Employeement Opportuniti Mail12.ico 注意:先将这些图片文件复制到你的文件夹内,再按如下步骤设置每个PictureBox的Image(图像)属性: ①右键单击Image属性旁边的按钮 ②在系统显示的“选择资源“对话框中,选中“本地资源”复选框、单击【导入】按 钮,最后单击【确定】按钮 6.如下图所示,友好的程序设计要求为这里的四个控件都添加浮动提示文字: 如何设置哩? ①从工具箱往窗体上拖一个名为ToolTip(工具提示)的不可视组件,这个组件在后 台服务,为窗体或其控件提供浮动提示,添加该控件后,您将发现,窗体底部多了 一个不可视的组件对象: 而窗体及控件的属性中都多了一个有点另类的属性:
目录 VBA常用技巧 ................................................................................................. 错误!未定义书签。 第8章控件与用户窗体 (4) 技巧1限制文本框的输入 (4) 技巧2文本框添加右键快捷菜单 (6) 技巧3文本框回车自动输入 (10) 技巧4自动选择文本框内容 (11) 技巧5设置文本框数据格式 (12) 技巧6限制文本框的输入长度 (14) 技巧7将光标返回文本框中 (15) 技巧8文本框的自动换行 (17) 技巧9多个文本框数据相加 (19) 技巧10控件跟随活动单元格 (20) 技巧11高亮显示按钮 (21) 技巧12组合框和列表框添加列表项的方法 (23) 12-1使用RowSource属性添加列表项 (23) 12-2使用List属性添加列表项 (24) 12-3使用AddItem方法添加列表项 (25) 技巧13去除列表框数据源的重复值和空格 (27) 技巧14移动列表框条目 (29) 技巧15允许多项选择的列表框 (32) 技巧16多列组合框和列表框的设置 (35) 16-1多列组合框和列表框添加列表项 (35) 16-2多列列表框写入工作表 (37) 技巧17输入时逐步提示信息 (39) 技巧18二级组合框 (46) 技巧19使用DTP控件输入日期 (48) 技巧20使用RefEdit控件选择区域 (51) 技巧21如何注册控件 (52) 技巧22遍历控件的方法 (55) 22-1使用名称中的变量遍历控件 (55) 22-2使用对象类型遍历控件 (57) 22-3使用程序标识符遍历控件 (58) 22-4使用名称中的变量遍历图形 (59) 22-5使用FormControlType属性遍历图形 (60) 技巧23使微调框最小变动量小于1 (61) 技巧24不打印工作表中的控件 (63) 24-1设置控件格式 (63) 24-2设置控件的printobjcet属性 (65) 技巧25在框架中使用滚动条 (65) 技巧26使用多页控件 (67) 技巧27标签文字垂直居中对齐 (69)