VBA技术技巧收集(一)

VBA技术技巧收集(一)
分类:ExcelVBA>>技术技巧

[001]在工作表中插入图片
使用Insert方法,例如,下面的代码将从Web网上相应的地址中获取图片并在当前工作表中以活动单元格为起点放置图片。
Sub InsertPicture()
ActiveSheet.Pictures.Insert “UploadFiles/2006-10/1025523341.jpg"
End Sub
同理,下面的代码将从您的计算机中的C盘相应文件夹中获取图片并在当前工作表中以活动单元格为起点放置图片。
Sub InsertPicture()
    ActiveSheet.Pictures.Insert _
      "C:/Documents and Settings/All Users/Documents/My Pictures/示例图片/Water lilies.jpg"
End Sub

[002]将所选单元格区域存储为图片
Private Type PicBmp
  Size As Long
  Type As Long
    hBmp As Long
    hPal As Long
    Reserved As Long
  End Type
   
  Private Type Guid
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
  End Type
    
  Private Const CF_BITMAP = 2
  Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" _
    (PicDesc As PicBmp, RefIID As Guid, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
  Private Declare Function GetClipboardData Lib "user32" _
    (ByVal wFormat As Long) As Long
  Private Declare Function CloseClipboard Lib "user32" () As Long
  Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
  Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
‘- - - - - - - - - - - - - - - - - - - - - - - - -
Sub SaveImage(rng As Range, strFileName As String)
    Dim hwnd As Long
    Dim hPtr As Long
    hwnd = FindWindow("xlmain", Application.Caption)
    rng.CopyPicture xlScreen, xlBitmap
    OpenClipboard hwnd
    hPtr = GetClipboardData(CF_BITMAP)
    SavePicture CreateBitmapPicture(hPtr), strFileName
    CloseClipboard
  End Sub
‘- - - - - - - - - - - - - - - - - - - - - - - - -
Function CreateBitmapPicture(ByVal hBmp As Long) As IPicture
    Dim lngR As Long, Pic As PicBmp, IPic As IPicture, IID_IDispatch As Guid
    With IID_IDispatch
      .Data1 = &H20400
      .Data4(0) = &HC0
      .Data4(7) = &H46
    End With
    With Pic
      .Size = Len(Pic)
      .Type = 1
      .hBmp = hBmp
    End With
    lngR = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)
    Set CreateBitmapPicture = IPic
  End Function
‘- - - - - - - - - - - - - - - - - - - - - - - - -
  Sub selectRangeToBmp()
    Dim rng As Range
    Dim strName As String
    On Error Resume Next
    Set rng = Application.InputBox(prompt:="请选择单元格区域", Title:="将单元格区域存储为图片", Type:=8)
    strName = InputBox(prompt:="请输入完整路径和扩展名的文件名", Title:="输入文件名")
    SaveImage rng, strName
  End Sub
[代码说明] 运行selectRangeToBmp()程序后,将出现两个对话框,第一个对话框要求用户选择当前工作表中想要存储为图片的单元格区域,第二个对话框要求用户输入图片的存放位置和文件名,要求写出完整的文件路径且须带.bmp或.jpg等扩展名,例如C:/<文件夹和子文件夹>/<文件名>.<扩展名>,若只写出文件名,则会将图片存放在默认文件夹中。
本示例代码摘自Mark Rowlinson的文章《 Saving a Spreadsheet Range as a .bmp image file》,稍作调整和修改。

[003]仿Word中的字数统计功能
下面的代码仿照Word中的字数统计功能,对单元格或者单元格区域中的字数(字符数)进行分类统计:
Sub SubTotalSelectionCharNum()
  Dim str As String, ChineseChar As Long
  Dim Alphabetic As Long, Number As Long
  Dim blank As Long, AlpAndNum As Long
  Dim i As Long, rng As Range, j As Long, k As Long
  For Each rng In Selection
    j = j + Len(rng.Value)
    For i = 1 To Len(rng)
      str = Mid(rng.Value, i, 1)
      If str Like "[一-龥]" = True Then
        ChineseChar = ChineseChar + 1 '汉字累加
      ElseIf str Like "[a-zA-Z]" = True Then
        Alphabetic = Alphabetic + 1 '字母累加
        '字母和数字在一起被认为是一个字
        If i <> 1 And i = k + 1 Then AlpAndNum = AlpAndNum + 1
        k = i
      ElseIf str Like "[0-9]" = True Then
        Number = Number + 1 '数字累加
        If i <> 1 And i = k + 1 Then AlpAndNum = AlpAndNum + 1
        k = i
      ElseIf str Like " " = True Then
        blank = blank + 1
      End If
    Next
  Next
  MsgBox "所选单元格区域中共有字符数(不计空格)" & j - blank & "个,其中:" & vbCrLf & "汉字:" & ChineseChar & "个" & _
     vbCrLf & "字母:" & Alphabetic & "个" & _
     vbCrLf & "数字:" & Number & "个" & _
     vbCrLf & "- - - - - - - - -" & _
     vbCrLf & "空格:" & blank & "个" & _
     vbCrLf & "- - - - - - - - -" & _
     vbCrLf & "所选单元格区域中共有字数(不计空格)" & j - blank - AlpAndNum & "个", _
     vbInformation, "字数统计"
End Sub
运行后的结果如下图所示。
  图:字数统计信息

[004]自动隐藏公式栏
在Excel工作表的单元格中输入文字时,如果单个单元格中的字符数超过50个,则其公式编辑栏会展开并遮盖住部分单元格,这对于查看工作表或编辑工作表都很不方便。下面的代码将会通过隐藏公式编辑栏来解决这个问题。(参考自《巧学巧用Excel 2003 VBA与宏(中文版)》,我觉得本示例很有用)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Cells.Count > 1 Then Exit Sub
  On Error Resume Next
  If Len(Target.Text) > 50 Or Len(Target.Formula) > 50 Then
    Application.DisplayFormulaBar = False
  Else
    Application.DisplayFormulaBar = True
  End If
End Sub
在工作表模块中输入上述代码后,如果该工作表上的单元格中所输入的字符数超过50,则自动隐藏公式编辑栏,如果单元格中的字符数少于50,则显示公式编辑栏。 
第1章Range(单元格)对象8 技巧1单元格的引用方法8 1-1使用Range属性8 1-2使用Cells属性9 1-3使用快捷记号9 1-4使用Offset属性10 1-5使用Resize属性11 1-6使用Union方法12 1-7使用UsedRange属性12 1-8使用CurrentRegion属性13 技巧2选定单元格区域的方法13 2-1使用Select方法13 2-2使用Activate方法14 2-3使用Goto方法15 技巧3获得指定行、列中的最后一个非空单元格15 技巧4定位单元格18 技巧5查找单元格19 5-1使用Find方法19 5-2使用Like运算符23 技巧6替换单元格内字符串24 技巧7复制单元格区域25 技巧8仅复制数值到另一区域28 8-1使用选择性粘贴28 8-2直接赋值的方法29 技巧9单元格自动进入编辑状态30 技巧10禁用单元格拖放功能30 技巧11单元格格式操作31 11-1单元格字体格式设置31 11-2设置单元格内部格式33 11-3为单元格区域添加边框34 11-4灵活设置单元格的行高列宽36 技巧12单元格中的数据有效性37 12-1在单元格中建立数据有效性37 12-2判断单元格是否存在数据有效性39 12-3动态的数据有效性39 12-4自动展开数据有效性下拉列表41 技巧13单元格中的公式42 13-1在单元格中写入公式42 13-2检查单元格是否含有公式43 13-3判断单元格公式是否存在错误44 13-4取得单元格中公式的引用单元格45 13-5将单元格中的公式转换为数值46 技巧14单元格中的批注47 14-1判断单元格是否存在批注47 14-2为单元格添加批注48 14-3删除单元格中的批注49 技巧15合并单元格操作50 15-1判断单元格区域是否存在合并单元格50 15-2合并单元格时连接每个单元格的文本51 15-3合并内容相同的连续单元格52 15-4取消合并单元格时在每个单元格中保留内容54 技巧16高亮显示单元格区域55 技巧17双击被保护单元格时不显示提示消息框56 技巧18重新计算工作表指定区域58 技巧19录入数据后单元格自动保护58 技巧20工作表事件Target参数的使用方法60 20-1使用单元格的Address 属性60 20-2使用Column属性和Row属性61 20-3使用Intersect方法61 第2章Worksheet(工作表)对象63 技巧21引用工作表的方式63 21-1使用工作表的名称63 21-2使用工作表的索引号63 21-3使用工作表的代码名称64 21-4使用ActiveSheet属性引用活动工作表64 技巧22选择工作表的方法65 技巧23遍历工作表的方法66 23-1使用For...Next 语句66 23-2使用For Each...Next 语句68 技巧24在工作表中上下翻页69 技巧25工作表的添加与删除70 技巧26禁止删除指定工作表74 技巧27自动建立工作表目录76 技巧28工作表的深度隐藏78 技巧29防止更改工作表的名称80 技巧30工作表中一次插入多行81 技巧31删除工作表中的空行82 技巧32删除工作表的重复行84 技巧33定位删除特定内容所在的行86 技巧34判断是否选中整行87 技巧35限制工作表的滚动区域88 技巧36复制自动筛选后的数据区域89 技巧37使用高级筛选获得不重复记录91 技巧38工作表的保护与解除保护92 技巧39奇偶页打印95 第3章Wordbook(工作簿)对象97 技巧40工作簿的引用方法97 40-1使用工作簿的名称97 40-2使用工作簿的索引号97 40-3使用ThisWorkbook98 40-4使用ActiveWorkbook99 技巧41新建工作簿文件99 技巧42打开指定的工作簿101 技巧43判断指定工作簿是否打开104 43-1遍历Workbooks集合方法104 43-2错误处理方法104 技巧44禁用宏则关闭工作簿105 技巧45关闭工作簿不显示保存对话框109 45-1使用Close方法关闭工作簿109 45-2单击工作簿关闭按钮关闭工作簿111 技巧46禁用工作簿的关闭按钮111 技巧47保存工作簿的方法113 47-1使用Save方法113 47-2直接保存为另一文件名113 47-3保存工作簿副本113 技巧48保存指定工作表为工作簿文件114 技巧49打印预览时不触发事件116 技巧50设置工作簿文档属性信息118 技巧51不打开工作簿取得其他工作簿数据119 51-1使用公式119 51-2使用GetObject函数120 51-3隐藏Application对象121 51-4使用ExecuteExcel4Macro
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值