Excel VBA(05)自定义函数&窗口对话框组件&字符串操作

自定义函数

一、函数使用

  • 自定义的函数如果要在 excel 表格中直接引用的话,需要在模块中定义,实测工作表和工作簿中定义的话都是无法在excel 中直接引用的
  • 如果一个工作簿的自定函数想在另外的excel 文件中使用的话,最好的方就通过另存为加载宏的方式,加载宏的具体的用法前面已经说过了这里不再赘述
  • vba 函数可以返回数组,只要将函数名变量赋值为数组即可

二、函数参数

  • 支持选择参数
  • 支持参数默认值
  • 支持类似java中的可变参
Function test(Optional ha As Integer = 100)
'    Application.volatile
    If ha = 0 Then
        MsgBox "ha = 0"
    Else
        MsgBox "ha = " & ha
    End If
End Function

Sub hello()
    Call test
    Call test(11111)
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub hello()
    Call t1(10, 12, 13)
    Call t1(100, 45)
End Sub

Function t1(ParamArray n())
    Dim sum
    For Each a In n
       sum = sum + a
    Next a
    Debug.Print sum
End Function

窗口和对话框组件

一、msgbox

  • 基本的参数
msgbox (显示内容 ,按钮和图标, 窗口标题, 帮助文件 ,帮助文件编号)
  • 几个常用的特殊符号:
chr(10) 换行、chr(13)回车、chr(9) 制表、space(n)生成空格
  • 点击不同按钮对应的返回值
确定:1
取消:2
终止:3
重试:4
忽略:5
是:6
否:7
Sub t2()
    Debug.Print MsgBox("hello" & Chr(9) & "haha", vbYesNo + vbInformation, "alert")
End Sub

二、inputbox

1、概述

  • 使用输入框的话,可以使用inputbox 函数,也可以使用 application 的 inputbox 方法
  • 二者基本的参数就是一致的,app 的 inputbox 方法就是多了指定输入类型的参数而已,简单使用的话 inputbox 函数就够用了
  • 具体的参数的参考如下图
    Excel VBA(05)自定义函数&窗口对话框组件&字符串操作_第1张图片
  • 最后一个类型参数的具体值参考如下
0---公式
1---数字
2---文本
4---true or false
8---range 对象
16---错误值
64---数组

2、使用细节

引用单元格
  • 注意:对象一定要用 set 进行初始化!!!
Dim ret As Variant
Set ret = Application.InputBox("请选择一个单元格区域", "输入框", , , , , , 8)
Debug.Print ret.Address
公式引用
Sub test()
    Dim ret As Variant
    ret = Application.InputBox("输入一个公式", "提示", , , , , 0)
    Debug.Print TypeName(ret)
    Debug.Print ret
End Sub
限制输入返回的类型
  • 就是用最后一个参数对输入的类型进行限制
数值数组
Sub test10()
    Dim r
    r = Application.InputBox("输入数组", "输入提示", , , , , , 64) 
    Debug.Print r(1, 1)
    Debug.Print TypeName(r)
End Sub

Excel VBA(05)自定义函数&窗口对话框组件&字符串操作_第2张图片

三、Excel 对话框

1、getOpenFilename

  • 参数参考如下
    Excel VBA(05)自定义函数&窗口对话框组件&字符串操作_第3张图片
  • 基本的用法如下,最后就是打印出文件名,并不会打开文件
Sub test()
    f = Application.GetOpenFilename("excel文件,*.xlsx")
    Debug.Print f
End Sub

2、GetSaveAsFilename

  • 打开另存为的窗口选择文件,本质还是获取文件名,并不会真正保存文件
Sub test()
    f = Application.GetSaveAsFilename("excel文件,*.xlsx")
    Debug.Print f
End Sub

3、FileDialog

  • 对比前面两个的优势是可以真正打开文件,而且可以获取文件夹的路径
Sub UseFileDialogOpen()
 
    Dim lngCount As Long
 
    ' Open the file dialog
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True
        .Show
 
        ' Display paths of each file selected
        For lngCount = 1 To .SelectedItems.Count
            MsgBox .SelectedItems(lngCount)
        Next lngCount
 
    End With
 
End Sub

4、Dialogs

  • 该集合代表所有内置对话框,通过指定不同的参数可以显示各种对话框
Sub test()
Application.Dialogs(xlDialogOpen).Show
End Sub
  • 参数参考
    Excel VBA(05)自定义函数&窗口对话框组件&字符串操作_第4张图片

字符串操作

一、基本操作

1、截取

  • left、right、mid、len
Sub test()
    Dim h  As String
    h = "你的问题就是这样的"
    Debug.Print Left(h, 2)
    Debug.Print Right(h, 2)
    Debug.Print Mid(h, 2, 3)
End Sub

'output
你的
样的
的问题
  • split、join
  • val 函数取字符串中的数字,但是这个函数只能取开头的数字
Sub test()
    Dim h  As String, h2 As String
    h = "89元的汉堡"
    h2 = "汉堡89元"
    Debug.Print Val(h)
    Debug.Print Val(h2)
End Sub

'output
89
0

2、组合

  • 就是 join 方法和连字符&

3、查找替换

  • inStr、inStrRev
Sub test()
    Dim h  As String, h2 As String
    h = "89元的汉堡89"
    Debug.Print InStr(h, 89)
    Debug.Print InStrRev(h, 89)
End Sub

  • replace、mid:mid会改变原来的字符串,而replace不会
Sub test()
    Dim h  As String, h2 As String
    h = "89元的汉堡89"
    Debug.Print Replace(h, 89, 100)
    Mid(h, 1, 3) = 999
    Debug.Print h
End Sub
'output
100元的汉堡100
999的汉堡89

4、大小写转换

  • Lcase、Ucase、strConv
Sub test()
    Debug.Print LCase("HELLO")
    Debug.Print UCase("hello")
    Debug.Print StrConv("hello", 1)
    Debug.Print StrConv("HELLO", 2)
    Debug.Print StrConv("hello how are you", 3)
End Sub

5、空格去除

  • Ltrim、Rtrim、trim

6、字符数字转换

  • Asc("a")Chr(10)

7、生成重复字符

  • space(10):10个空格
  • string(10,"*"):10个 *

二、like 匹配

  • 单个占位符多个占位符*
  • 通配符加[?]转换为普通意义的符号
  • 数字匹配符#
  • 区间匹配[a-zA-z][!a-z]
  • 单个匹配[abcd]
  • 首尾匹配[a]*[p]

你可能感兴趣的:(其他)