Msgbox
参数:
Msgbox(提示文字,按钮类型,标题文字,帮助文件,帮助文件索引)
示例:
MsgBox "你还好吗?", 4 + 32, "打招呼对话框", "C:/a.chm", 0
1.了解Msgbox的第二个参数
Sub tt()
MsgBox "爱你哦", 4 + 48, "我是一个标题"
End Sub
这里4 +48 指显示 是 及 否 按钮和警告图示

常数 | 值 | 描述 |
---|---|---|
vbOKOnly | 0 | 只显示 确定 按钮 |
VbOKCancel | 1 | 显示 确定 及 取消 按钮。 |
VbAbortRetryIgnore | 2 | 显示 放弃、重试 及 忽略 按钮。 |
VbYesNoCancel | 3 | 显示 是、否 及 取消 按钮。 |
VbYesNo | 4 | 显示 是 及 否 按钮。 |
VbRetryCancel | 5 | 显示 重试 及 取消 按钮。 |
VbCritical | 16 | 危险图标 |
VbQuestion | 32 | 询问图标 |
VbExclamation | 48 | 警告图示 |
VbInformation | 64 | 信息图标 |
vbDefaultButton1 | 0 | 第一个按钮是缺省值。 |
vbDefaultButton2 | 256 | 第二个按钮是缺省值。 |
vbDefaultButton3 | 512 | 第三个按钮是缺省值。 |
vbDefaultButton4 | 768 | 第四个按钮是缺省值。 |
vbApplicationModal | 0 | 应用程序强制返回;应用程序一直被挂起,直到用户对消息框作出响应才继续工作。 |
vbSystemModal | 4096 | 系统强制返回;全部应用程序都被挂起,直到用户对消息框作出响应才继续工作。 |
vbMsgBoxHelpButton | 16384 | 将Help按钮添加到消息框 |
VbMsgBoxSetForeground | 65536 | 指定消息框窗口作为前景窗口,就是显示在窗口的最上层 |
vbMsgBoxRight | 524288 | 文本为右对齐 |
vbMsgBoxRtlReading | 1048576 | 指定文本应为在希伯来和阿拉伯语系统中的从右到左显示 |
3.Msgbox的返回值
常数 | 值 | 说明 |
---|---|---|
vbOK | 1 | 确定 |
vbCancel | 2 | 取消 |
vbAbort | 3 | 终止 |
vbRetry | 4 | 重试 |
vbIgnore | 5 | 忽略 |
vbYes | 6 | 是 |
vbNo | 7 | 否 |
即点击确定,返回1;点击取消,返回2…
Sub tt()
Dim i As Integer
i = MsgBox("爱你哦", 4 + 48, "我是一个标题")
MsgBox i
End Sub
Inputbox
有两种 inputbox
1.Inputbox函数样式参数
参数:
Inputbox(提示文字,标题文字,默认值,左边距,上边距,帮助文件,帮助文件索引)
示例:
Name = InputBox("请输入姓名", "登陆框", "此处输入", 100, 100, "C:/a.chm", 0)

2.Inputbox方法样式参数
参数:
Application.Inputbox(提示文字,标题文字,默认值,左边距,上边距,帮助文件,帮助文件索引,输入类型)
示例:
A = Application.InputBox("输入金额", "汇率计算", "此处输入", 100, 100, "C:/a.chm", 0, 1)
这个 inputbox 和上一个的区别就只是参数中多了一个输入类型,可以定义输入的类型
最后一个参数(输入类型):
值 | 含义 |
---|---|
0 | 公式 |
1 | 数字 |
2 | 文本 (字符串) |
4 | 逻辑值 (True 或 False) |
8 | 单元格引用,作为一个 Range 对象 |
16 | 错误值,如 #N/A |
64 | 数值数组 |
GetOpenFilename
参数:
GetOpenFilename (文件类型,优先类型,对话框标题,按钮文字,是否支持多选)
示例:
A= Application.GetOpenFilename("新表,*.xlsx,老表,*.xls", 1, "快特么选啊!", "确定", False)
注意:
- 这个方法并不会真正打开文件,只是返回文件完整路径!
- 文件类型参数中,先指定文件类型名,再指定后缀,要成对出现。
- 优先类型是指文件类型中列出的各种类型,哪种优先显示。
例如:“Excel文件,.xlsx,老表,.xls,所有文件,.”
用户任意选取(多个)文件操作——壳子
Sub tt()
Dim arr() '数组
Dim wb As Workbook
Dim i As Integer
On Error Resume Next '防止用户取消选取
arr = Application.GetOpenFilename("Excel文件,*.xls*", 2, , , True) '只能选择excel文件,并且支持同时选多个文件
'选择了多个文件后,返回的文件路径是数组
'注意:但是这里的数组的下标是从1开始
'如果没有选择文件也不报错
If arr(1) <> "False" Then
'打开选中的文件
For i = LBound(arr) To UBound(arr)
Set wb = Workbooks.Open(arr(i))
对表的操作
wb.Close
Next
End If
End Sub
以上代码就是一个壳子,在工作中套用(可以加载为宏,设置一个多表合并按钮,快速完成合并)
对比之前的 Dir 壳子(是遍历文件夹里面的所有文件,返回某文件夹中的所有文件名)
Sub test()
Dim str As String
Dim wb As Workbook
str = VBA.Dir("C:\data\*.xls*")
For i = 1 To 100
Set wb = Workbooks.Open("C:\data\" & str) '将每个表打开(批量操作)
对表的操作
wb.Close '关闭
str = VBA.Dir
If str = "" Then
Exit For
End If
Next
End Sub
以上代码就是一个壳子,在工作中套用(可以加载为宏,设置一个多表合并按钮,快速完成合并)
两个壳子的效果是一样的,区别就是这里GetOpenFilename是用户自己选择想要打开的文件,然后进行操作,更加符合我们的要求
看一下效果
这里是打开了,又马上关闭。
在套用之前的代码
Sub tt()
Dim arr() '数组
Dim wb As Workbook
Dim i As Integer
On Error Resume Next '防止用户取消选取
arr = Application.GetOpenFilename("Excel文件,*.xls*", 2, , , True) '只能选择excel文件,并且支持同时选多个文件
'选择了多个文件后,返回的文件路径是数组
'注意:但是这里的数组的下标是从1开始
'如果没有选择文件也不报错
If arr(1) <> "False" Then
'打开选中的文件
For i = LBound(arr) To UBound(arr)
Set wb = Workbooks.Open(arr(i))
For Each biao In wb.Sheets
biao.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(wb.Name, ".")(0) & "-" & biao.Name
Next
wb.Close
Next
End If
End Sub
Application.Dialogs
参数:
Dialogs(对话框)
示例:
Application.Dialogs(xlDialogSaveAs).Show
注意:
对话框中所做的操作会真实执行。
最后对GetOpenFilename壳子在修改一点点,让其更容易加载到宏
Set wb1 = Workbooks.Add '新建一个文件,在新建的文件中操作
Sub tt()
Dim arr() '数组
Dim wb, wb1 As Workbook
Dim i As Integer
On Error Resume Next '防止用户取消选取
Set wb1 = Workbooks.Add '新建一个文件,在新建的文件中操作
arr = Application.GetOpenFilename("Excel文件,*.xls*", 2, , , True) '只能选择excel文件,并且支持同时选多个文件
'选择了多个文件后,返回的文件路径是数组
'注意:但是这里的数组的下标是从1开始
'如果没有选择文件也不报错
If arr(1) <> "False" Then
'打开选中的文件
For i = LBound(arr) To UBound(arr)
Set wb = Workbooks.Open(arr(i))
For Each biao In wb.Sheets
biao.Copy after:=wb1.Sheets(wb1.Sheets.Count)
wb1.Sheets(wb1.Sheets.Count).Name = Split(wb.Name, ".")(0) & "-" & biao.Name
Next
wb.Close
Next
End If
End Sub