...欢迎光临firelong在线,正在建设...
网站导航:首页,资料库,工具,Office宏,网页计算,防火墙,其他
当前位置:Excel宏>

本页中的宏语言过程都是本人多年使用过的,欢迎大家使用,若有问题或指教请Mail我

功能

源代码

日期
     
核对两列数字

'检查选定矩形块的开始和最后两列数据的核对关系
'把两列中“相同”的数据的背景颜色改成黄色。
'使用方法:选中需要比较的两列数据(用一个矩形块选中包含此两列数据,使此两列数据是此矩形行块的第一和最后一列),
'          执行此宏。
Sub subzCheckTwoColNumber()
  Dim HH1, HH2, LL1, LL2, i, j, k
  Dim oCell1, oCell2
  Dim Val1, Val2
  HH1 = Selection.Rows.Row                      '开始的行号
  HH2 = HH1 + Selection.Rows.Count - 1          '结束的行号
  LL1 = Selection.Columns.Column                '第一列的列号
  LL2 = LL1 + Selection.Columns.Count - 1       '最后列的列号
  If LL1 = LL2 Then Return
  For i = HH1 To HH2
    Set oCell1 = Cells(i, LL1)
    If IsNull(Ocell) Then
    
    Else
      Val1 = 0 + Val(oCell1.Value)
      For j = HH1 To HH2
        Set oCell2 = Cells(j, LL2)
        If IsNull(oCell2) Then
        
        Else
          Val2 = 0 + Val(oCell2.Value)
          If oCell2.Interior.ColorIndex <> 6 And Abs(Val1 - Val2) < 0.0005 Then
            oCell1.Interior.ColorIndex = 6
            oCell2.Interior.ColorIndex = 6
            j = HH2 + 1
          End If
        End If
      Next j
    End If
  Next i
End Sub
2011-3-18
取所有工作表名称


'取所有工作表名称
'20091016 刁星伍
'输入:无
'输出:所有工作表名称的列表,用回车符分开。
'返回数据后,可以复制到记事本后再复制回来即可显示列表。
Function getSheetList() As String
  Dim i As Integer
  For i = 1 To Sheets.Count
     getSheetList = getSheetList + Sheets(i).Name + Chr(9) + Chr(13) + Chr(10)
  Next
  getSheetList = Left(getSheetList, Len(getSheetList) - 3)
End Function
  

2009-10-16
计算企业代码的校验位

'计算企业代码的校验位,参见GB11714-89
'输入  sCode:前8位代码
'返回  sVcode:校验码
'刁星伍  2009-6-17
Function sVcode(sCode As String) As String
   Dim I As Integer, J As Integer, s1 As String, s2 As String
   Dim iC9 As Integer           '计算的校验码及中间
   Dim iCi As Integer
   Dim aW(8) As Integer                 '加权因子
   If Len(sCode) <> 8 Then
      sVcode = "本体代码不等于8位"
   Else
      aW(1) = 3: aW(2) = 7: aW(3) = 9: aW(4) = 10
      aW(5) = 5: aW(6) = 8: aW(7) = 4: aW(8) = 2
      iC9 = 0
            'iCi = Asc(s1) - 48     '字符-》数字
            
      For I = 1 To 8
        s1 = UCase(Mid(sCode, I, 1))       'Ci  当前位字符
        If s1 = "#" Then
            iCi = 36
        ElseIf s1 < "0" Then
            sVcode = "错误的字符"
            Exit Function
        ElseIf s1 <= "9" Then
            iCi = Asc(s1) - 48
        ElseIf s1 < "A" Then
            sVcode = "错误的字符"
            Exit Function
        ElseIf s1 <= "Z" Then
            iCi = Asc(s1) - 55
        Else
            sVcode = "错误的字符"
            Exit Function
        End If
        iC9 = iC9 + iCi * aW(I)     '取合计
      Next I
        iC9 = 11 - (iC9 Mod 11)
        If iC9 = 10 Then
            sVcode = "X"
        ElseIf iC9 = 11 Then
            sVcode = "0"
        Else
            sVcode = Chr(iC9 + 48)
        End If
   End If
End Function
20090617
用Excel打印证件通用程序

'设置本工作表的相应数据到“打印”工作表的相应单元,并打印。
'用法:
'   1.在打印工作表中设置好相应的打印设置。
'   2.把需要填充的单元格中添加“批注”,并使批注的内容为需要填充单元格的列号。如:B
'   3.把需要的数据信息,填写在当前的工作表中。
'   4.光标定位到需要打印的行(可以单击此行的任意单元格)。
'   5.单击“打印当前行证件”按钮。
'   6.根据需要预览后输出还是直接输出,只需要修改本过程的倒数第3和第4行的信息(去掉或加上前边的单引号)。
'  刁星伍 2008-5-8
'设置打印信息
Private Sub CommandButton1_Click()
    Dim s1 As String, s2 As String, s0 As String
    Dim L1 As Integer, L2 As Integer, H1 As Integer, H2 As Integer
    Dim i As Integer, j As Integer
    Dim Ocell As Object, oCell0 As Object
    Dim H0 As Integer
    s0 = ActiveSheet.Name
'    If s0 <> "数据库" Then
'      MsgBox "请到“数据库”工作表中执行本宏"
'      Exit Sub
'    End If
    H0 = ActiveCell.Row                         '当前行
    s1 = Sheets("打印").PageSetup.PrintArea     '打印工作表中的打印区域
    If Trim(s1) = "" Then
        MsgBox "“打印”工作表中没有定义打印区域,请定义好打印区域后再执行本功能。"
        Exit Sub
    End If
    H1 = Range(s1).Row                  '打印区域开始的行
    L1 = Range(s1).Column               '打印区域开始的列
    H2 = H1 + Range(s1).Rows.Count - 1 '打印区域结束的行
    L2 = L1 + Range(s1).Columns.Count - 1 '打印区域结束的列
    On Error Resume Next
    For i = L1 To L2
        '此循环设置一列数据
        For j = H1 To H2
            '此循环设置一行数据
            Set Ocell = Sheets("打印").Cells(j, i)
            If Ocell.Comment.Text = "" Then
            Else
                Set oCell0 = Sheets(s0).Range(Trim(Replace(Ocell.Comment.Text, Chr(10), "")) & H0)
                Set Ocell = Sheets("打印").Cells(j, i)
                Ocell.Value = oCell0.Value
            End If
        Next j
    Next i
    Sheets("打印").PrintPreview        '打印预览 ,如果直接打印输出,则屏蔽此行,开放下一行即可
    'Sheets("打印").PrintOut           '直接打印输出,如果预览后输出,则屏蔽此行,开放上一行即可
    Cells(H0 + 1, 1).Activate          '自动转动下一行
End Sub

20081115
遍历所有选择的单元格(一)
sub 遍例选定单元格1()
    Dim oCell As Object
    Dim n
    On Error Resume Next
    For Each oCell In Selection
       '处理单元格
       'oCell.value=
    Next oCell
    On Error Goto 0
End Sub
 
遍历所有选择的单元格(二)
Sub 遍例选定单元格2()
    Dim oCell As Object
    Dim i As Integer, j As Integer
    Dim L1 As Integer, L2 As Integer, H1 As Integer, H2 As Integer
    L1 = Selection.Columns.Column       '第一个选定单元格(左上角)的列号
    H1 = Selection.Rows.Row             '第一个选定单元格(左上角)的行号
    H2 = H1 - 1 + Selection.Rows.Count  'Selection.Rows.Count 选定的单元格行数
    L2 = L1 - 1 + Selection.Columns.Count 'Selection.Columns.Count 选定的单元格的列数
    For i = H1 To H2
        For j = L1 To L2
            Set oCell = Cells(i, j)         '待处理的单元格
            oCell.Value = Chr(64 + j) & i   '处理单元格
       Next j
    Next i
End Sub
 
清空选中单元各格的0.00的值
'如 0.00 或 0换成空白 ;
'
Sub Clear_0()
Dim oCell As Object
Dim val1 As Variant
Dim str1 As String, str2 As String, str3 As String
   For Each oCell In Selection
      On Error GoTo err1		'有错则下一单元格
      val1 = oCell.Value
      If IsNumeric(val1) Then		'检查是否是数字
        If Abs(val1) < 0.005 Then	'绝对值<0.005则清零
          str1 = ""
          oCell.Value = str1
        End If
      End If
err1:
   Next oCell
End Sub
        
 
删除左边的一半的空格
'
'把选中单元各中的左边空格的数量减半
'如 "    1234"换成"  1234"
'
Sub Modi_Space()
Dim oCell As Object
Dim val1 As Variant
Dim str1 As String, str2 As String, str3 As String
   For Each oCell In Selection
      On Error GoTo err1
      val1 = oCell.Value
      str1 = val1
      str2 = LTrim(str1)		'取消左边的所有空格
      str3 = Space(Len(str1) / 2 - Len(str2) / 2) + str2	'去掉左边一半的空格
      oCell.Value = str3
err1:
   Next oCell
End Sub
 
文本数字转换为数字
'把选择的单元的格式从字符转换为数字
Sub sub1()
 Dim oCell As Object
 On Error Resume Next
 For Each oCell In Selection
    If "L" & oCell.Value <> "L" Then
        oCell.Value = oCell.Value + 0
    End If
 Next
End Sub
        
 
 数字金额转大写金额
'改编于《施工企业财务核算系统》。
Function dxje(ByVal curJinE As Currency) 
  Dim pdxzf, pdxdw, pjezc, pdwwz, pjewz 
  Dim s1 As String 
  If curJinE = 0 Then 
     dxje = "" 
  Else
    pdxzf = "零壹贰叁肆伍陆柒捌玖" 
    pdxdw = "仟佰拾亿仟佰拾万仟佰拾元角分" 
    pjedx = IIf(curJinE < 0, "(红字)", "") 
    pjesz = Abs(curJinE) 
    pjezc = Format(pjesz * 100, "#0") 
    pjezc = Space(14 - Len(pjezc)) + pjezc 
    pdwwz = 0 
    For pjewz = 1 To Len(pjezc) 
        s1 = Mid(pjezc, pjewz, 1) 
        If s1 <> " " Then 
            pdwwz = pdwwz + 1 
            If s1 = "0" Then 
                If pjewz = 4 Then 
                    pjedx = pjedx + "亿" 
                ElseIf pjewz = 8 And Right(pjedx, 1) <> "亿" Then 
                    pjedx = pjedx + "万" 
                ElseIf pjewz = 12 Then 
                    pjedx = pjedx + "元" 
                ElseIf pjewz <> 14 And Mid(pjezc, pjewz + 1, 1) <> "0" Then  
                    pjedx = pjedx + "零" 
                End If 
            Else
                pjedx = pjedx + Mid(pdxzf, Val(Mid(pjezc, pjewz, 1) + 1), 1) 
                pjedx = pjedx + Mid(pdxdw, pjewz, 1) 
            End If 
        End If 
    Next
    pjedx = Trim(LTrim(pjedx + IIf(Right(pjedx, 1) = "分", "", "整"))) 
    dxje = pjedx 
  End If 
End Function
        
 
修改单元格的超链接
'把选中单元格的连接修改成当前的文本内容
'用Excel的自动编号功能生成网上的系列连接,后保存成网页html文件,最后使用下载工具下载。
Sub 修改单元格的超链接()
 Dim oCell As Object
 Dim val1 As Variant
 Dim str1 As String, str2 As String, str3 As String
   For Each oCell In Selection
      On Error GoTo err1
      val1 = oCell.Value
      ActiveSheet.Hyperlinks.Add Anchor:=oCell, Address:=val1
err1:
   Next oCell
End Sub
        
 
  Excel中使用宏语言打印证件实例 2005-3-7
删除PPT中的备注页  Sub 删除幻灯片的备注()
   DIM i As Integer
   For i = 1 To ActivePresentation.Slides.Count
     ActivePresentation.Slides(i).NotesPage.Shapes.Placeholders(2).TextFrame.TextRange.Text = ""
   Next i
End Sub
2006-10-24
 删除Excel中的图片 Sub 删除图片()
 Dim i As Integer
 For i = ActiveSheet.Shapes.Count To 1 Step -1
   If Left(ActiveSheet.Shapes(i).Name, 8) = "Picture " Then
     ActiveSheet.Shapes(i).Select
     Selection.Delete
   End If
 Next
End Sub
2007-01-31
 查找表格中的外部连接 '检查表格中的外部连接
'用法:在需要查找的工作表中执行本功能
'
Sub 检查外部链接()
  Dim i As Long, j As Long, k As Long
  Dim oCell As Range
  Dim v1, v2, v3
  Dim rowOfMax As Long, H1 As Long, H2 As Long '最后的行号
  Dim colOfMax As Integer, L1 As Integer '最后的列号
  Dim s1 As String
  Dim sNbook As String, sNsheet As String
  Dim blNoOutLink As Boolean
  blNoOutLink = True
  sNbook = ActiveWorkbook.Name
  sNsheet = ActiveSheet.Name
  '查找最后一行
  rowOfMax = 0
  For i = 1 To 256
    j = Workbooks(sNbook).Sheets(sNsheet).Cells(65536, i).End(xlUp).Row '当前列的最后一行
    If rowOfMax < j Then rowOfMax = j
  Next i

  '查找最后一列
  colOfMax = 0
  For i = 1 To rowOfMax
    j = Workbooks(sNbook).Sheets(sNsheet).Cells(i, 256).End(xlToLeft).Column '当前列的最后一行
    If colOfMax < j Then colOfMax = j
  Next i
  For i = 1 To rowOfMax
    For j = 1 To colOfMax
      s1 = Workbooks(sNbook).Sheets(sNsheet).Cells(i, j).Formula
      If Left(s1, 1) = "=" And InStr(s1, "[") > 0 Then
        Workbooks(sNbook).Sheets(sNsheet).Cells(i, j).Activate
        MsgBox "当前单元的公式为:" & s1
        Exit Sub
      End If
    Next
  Next
  If blNoOutLink Then MsgBox "当前工作表没有外部链接!"
End Sub

 
20070703