VBA程序集

VBA程序集
(第7辑)
下面为第7辑VBA程序集的内容,包含程序说明和代码,以及示例文档。

程序27(文本框-限制文本框中输入的内容)
本程序提供了限制用户在文本框中所能够输入的内容的示例。在示例中,您只能在文本框中输入数字,在第一个字符的位置输入“-”号,以及输入中文字符。当然,您可以修改Case语句中的第一个Case语句,来设定允许输入的字符类型。
[程序代码]
‘******************************************************
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
    Case Asc("0") To Asc("9")
    Case Asc("-")
        If Instr(1,Me.TextBox1.Text,"-") > 0 Or Me.TextBox1.SelStart > 0 Then
            KeyAscii = 0
        End If
    Case Asc(".")
        If InStr(1, Me.TextBox1.Text, ".") > 0 Then
            KeyAscii = 0
        End If
    Case Else
        KeyAscii = 0
End Select
End Sub
‘******************************************************
[示例文档见 (程序27)文本框输入测试.xls。UploadFiles/2006-8/89335571.rar

程序28(列出所有的颜色和索引值)
本程序运行后将新建一个工作簿,并在该工作簿的A列中列出Excel所支持的56种颜色和对应的颜色索引值。
[程序代码]
‘******************************************************
Sub TestColor()
  Dim objExcel As Application
  Set objExcel = CreateObject("Excel.Application")
  objExcel.Visible = True
  objExcel.Workbooks.Add

  Dim i As Integer
  For i = 1 To 56
    objExcel.Cells(i, 1).Value = i
    objExcel.Cells(i, 1).Interior.ColorIndex = i
  Next
End Sub
‘******************************************************
示例文档见 (程序28)测试颜色索引号.xls。UploadFiles/2006-8/89223153.rar

程序29(合并单元格中的内容)
本程序将工作簿中所选区域内同一行的单元格内容合并至第一列的单元格。即合并一行中被选择的单元格内容至行首单元格中,或者合并被选择区域的每一行单元格的内容到行首单元格中。
在运行程序前,您必须先选择要合并的单元格所在的行或单元格区域。
[程序代码]
‘******************************************************
Sub 合并单元格内容()
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  On Error Resume Next
  Dim iRows As Long, iCols As Long, mRow As Long, ir As Long, ic As Long
  Dim lastcell As Range, newcell, trimmed
  iRows = Selection.Rows.Count
  iCols = Selection.Columns.Count
  Set lastcell = Cells.SpecialCells(xlCellTypeLastCell)
  mRow = lastcell.Row
  If mRow < iRows Then iRows = mRow
  For ir = 1 To iRows
    newcell = Trim(Selection.Item(ir, 1).Value)
    For ic = 2 To iCols
      trimmed = Trim(Selection.Item(ir, ic).Value)
      If Len(trimmed) <> 0 Then newcell = newcell & " " & trimmed
      Selection.Item(ir, ic) = ""
    Next ic
    Selection.Item(ir, 1).Value = newcell
  Next ir
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True
End Sub
‘******************************************************
示例文档见 (程序29)合并单元格内容.xls。UploadFiles/2006-8/89304397.rar

程序30(分离单元格中的内容)
本程序将工作簿中所选单元格的内容分解到相邻单元格中。在所要分解的单元格中的内容以空格为标志,例如单元格中的内容若为“A Dog”,则会分解为“A”和“Dog”。注意,所要分解的单元格中的相邻单元格必须为空。您可以将本程序稍作修改后,应用于分离地址。
[程序代码]
‘******************************************************
Sub 分离单元格()
  Dim iRows As Long, mRow As Long, ir As Long
  Dim lastcell As Range, checkx
  Dim iAnswer As Boolean
  Dim L As Long, im As Long
  Application.ScreenUpdating = False
  On Error Resume Next
  iRows = Selection.Rows.Count
  Set lastcell = Cells.SpecialCells(xlLastCell)
  mRow = lastcell.Row
  If mRow < iRows Then iRows = mRow
  For ir = 1 To iRows
       If Len(Trim(Selection.Item(ir, 1).Offset(0, 1))) <> 0 Then
          iAnswer = MsgBox("Found non-blank in adjacent column -- " _
             & Selection.Item(ir, 1).Offset(0, 1) & " -- in " & _
             Selection.Item(ir, 1).Offset(0, 1).AddressLocal(0, 0) & _
             Chr(10) & "Press OK to process those than can be split", _
          vbOKCancel)
          If iAnswer = vbOK Then GoTo DoAnyWay
          GoTo terminated
       End If
  Next ir
DoAnyWay:
  For ir = 1 To iRows
       If Len(Trim(Selection.Item(ir, 1).Offset(0, 1))) <> 0 Then GoTo nextrow
       checkx = Trim(Selection.Item(ir, 1))
       L = Len(Trim(Selection.Item(ir, 1)))
       If L < 3 Then GoTo nextrow
       For im = 2 To L
          If Mid(checkx, im, 1) = " " Then
             Selection.Item(ir, 1) = Left(checkx, im - 1)
             Selection.Item(ir, 1).Offset(0, 1) = Trim(Mid(checkx, im + 1))
             GoTo nextrow
          End If
       Next im
nextrow:
  Next ir
terminated:
   Application.ScreenUpdating = True
End Sub
‘******************************************************
示例文档见 (程序30)分离单元格中的内容UploadFiles/2006-8/89716164.rar

程序31(自动安装加载宏)
本程序运用VBA安装加载宏,例如,下面的程序代码运行后将安装“分析工具库”加载宏。当您运行程序后,会发现“分析工具库”已安装至您的Excel中。注意,应确保所要安装的加载宏已在“加载项”中。
[程序代码]
‘******************************************************
Sub 安装分析工具库()
   Dim oAddin As AddIn
   For Each oAddin In AddIns
      If oAddin.Name = "ANALYS32.XLL" Then
         oAddin.Installed = True
      End If
   Next
End Sub
‘******************************************************

程序32(在工作表中添加一个箭头)
本程序运行后将在工作表中添加一个箭头形状。您可以调整代码中的相应数值,以改变箭头的形状和大小。
[程序代码]
‘******************************************************
Sub AddArrow()
    Dim oShp As Shape
   
    '添加一个箭头形状对象
    Set oShp = ActiveSheet.Shapes.AddShape(msoShapeRightArrow, 10, 10, 100, 50)
   
    '设置箭尾占整个形状长度的百分比
    oShp.Adjustments(1) = 0.3    
    '设置箭尾显示的宽度,即点整个宽度的百分比
oShp.Adjustments(2) = 0.4
End Sub
‘******************************************************

程序33(提示用户所要进行的操作)
本程序的功能为在用户窗体中,您进行下一步操作之前前,为您对必须要进行操作的控件进行提示。本程序利用了控件的Tag属性。
示例中,提示用户在用户窗体中必须要输入的文本框。当然,您可以在程序设计时,利用这一特性限制用户必须进行的某些操作后才能继续后续操作。
[程序代码]
‘******************************************************
**********以下代码输入在ThisWorkbook模块中**********
Private Sub Workbook_Open()
  UserForm1.Show
End Sub
**********以下代码在UserForm1窗体模块中**************
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Call CheckEmptyTextbox
End Sub
**********以下代码在标准模块中****************************
Sub CheckEmptyTextbox()
  Dim ctl As Control
  For Each ctl In UserForm1.Controls
    If TypeName(ctl) = "TextBox" Then
      If ctl.Tag = "Required" Then
        If ctl.Text = "" Then
          MsgBox "请在" & ctl.Name & "中输入相应的内容."
        End If
      End If
    End If
  Next ctl
End Sub
‘******************************************************
示例文档见 (程序33)提示用户进行输入.xls。UploadFiles/2006-8/89414507.rar

程序33(根据指定列中的数据隐藏相应的行)
本程序将根据指定列中的数据,隐藏包含该数据的行。对于本程序,您可以改变程序中的指定列或指定的条件,从而实现满足条件的筛选。譬如,您可能想筛选出还未发工资的人员,您可以将工资列中不为零的行全部隐藏,只显示该列中值为零的行。
[程序代码]
‘******************************************************
Sub 根据列值隐藏行()
  Dim lngCol As Long
  Dim strCondition As String
  Dim ws As Worksheet
  Dim r As Range
 
  '设置想要隐藏的值所在的列
  lngCol = 3
  '设置查找的条件
  strCondition = "<> 0"
  '设置在当前工作表中进行操作
  Set ws = ActiveSheet
 
  With ws.Rows(1)
    .AutoFilter '打开自动筛选
    .AutoFilter field:=lngCol, Criteria1:=strCondition '筛选条件
    '存放单元格区域
    Set r = Application.Intersect(ws.Cells.SpecialCells(xlCellTypeVisible), _
    ws.UsedRange.Offset(1, 0), ws.UsedRange)
    .AutoFilter '关闭自动筛选
  End With
  '隐藏所满足条件的单元格区域所在行
  r.EntireRow.Hidden = True
End Sub
‘******************************************************
示例文档见 (程序34)根据指定列的值隐藏所在行.xls。UploadFiles/2006-8/89209695.rar

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值