msgbox的用法: 它有多个参数,但常用的就前两个。详情如下表。其实它就是个vba函数 显示全部为(vba.interation.msgbox)
参数,主要用前两个
示例
Sub test() Dim i As Integer i = MsgBox("您好吗", 1 + 48) '它有返回值,对应的返回值是多少,参考下表 MsgBox i End Sub
msgbox第二参数的详细表格说明
inputbox函数:
示例
Sub test() Dim str '在这里如果定义dim i as integer 那么用户输入只能是数字,否则就会报错 str = InputBox("请输入名字", "请输入名字", "在这里写") '主要用这三个参数 MsgBox str End Sub
在vba里还有个方法也是,这个输入方法能控制输入的类型
示例,在下面只能输入数字,如果输入其他类型,会报出 无效输入类型
Sub test() i = Application.InputBox("输入", , , , , , , 1) End Sub
后面type类型的方法怎么用,如下图 也可以相加,来使用多个类型
GeOpenFilename的用法
示例:第一个参数限制打开文件类型,第二个参数默认选择哪个打开方式为第一个,第三,四不常用,最后一个控制是否可以多选,True/False
Sub test() Dim str As String Dim wb As Workbook str = Application.GetOpenFilename("老表,*.xls,新表,*.xlsx", 2) '得到打开的某文件的完整路径,然后可以在()内使用参数限制打开的文件类型 'str = Application.GetOpenFilename("Excel文件,*xls*", 2) '可以这样来统一上面所写的
'这里需要说明下,如果你没打开文件,Application.getopenfilename 返回的“False”,所以设置一个if来进行控制,以免报错 If str <> "False" Then Set wb = Workbooks.Open(str) '如果是进行赋值,就需要用()将后面的参数扩进去 End If '借此就可以对文件进行操作 End Sub
那么打开多个文件的方式,需要使用数组来接收
Sub test() Dim arr() Dim wb As Workbook arr = Application.GetOpenFilename("Excel文件,*.xls*", 2, , , True) Workbooks.Open arr(1) '在这个存储文件的arr数组里,1就是1,2就是2,和之前的数组不一样,不是从0开始 MsgBox LBound(arr) '以此验证arr的下表 End Sub
完整版:打开多文件
Sub test() Dim arr() Dim wb As Workbook arr = Application.GetOpenFilename("Excel文件,*.xls*", 2, , , True) If arr(i) <> "False" Then For i = LBound(arr) To UBound(arr) Set wb = Workbooks.Open(arr(i))
'可以在此操作
wb.close Next End If End Sub
Application.Dialogs的用法:这里面是真实调用的,是excel表的实体功能
Sub test() Application.Dialogs(5).Show End Sub
有两百多个值,仅显示一部分
最后一点说下加载宏,这个加载宏里面的代码不能出现thisworkbook,因为出现这个 会将代码写进宏文件里,导致无法运行,因此使用使用activeworkbook来说明是当前要操作的文件,取消掉thisworkbook,如下
Sub test() '打开多文件,然后进行合并 Dim str() Dim i As Integer Dim wb, wb1 As Workbook Dim sht As Worksheet On Error Resume Next '加上以后防止点了取消发生的错误 Set wb1 = ActiveWorkbook Set sht1 = ActiveSheet On Error Resume Next str = Application.GetOpenFilename("Excel数据文件,*.xls*", , , , True) For i = LBound(str) To UBound(str) Set wb = Workbooks.Open(str(i)) For Each sht In wb.Sheets sht.Copy after:=wb1.Sheets(wb1.Sheets.Count) wb1.Sheets(wb1.Sheets.Count).Name = Split(wb.Name, ".")(0) & sht.Name Next wb.Close Next End Sub
进一步在此完善,有时候,用户新建一个excel文件,但是并没有对此进行操作,这时候在打开其他excel文件,这个新建的文件就消失了,因此这个代码在此进行优化
Sub test() '代码有所改变,作用一样 Dim arr() Dim wb, wb1 As Workbook Dim sht As Worksheet Set wb1 = Workbooks.Add arr = Application.GetOpenFilename("Excel数据文件,*.xls*", , , , True) If arr(1) <> "False" Then For i = LBound(arr) To UBound(arr) Set wb = Workbooks.Open(arr(i)) For Each sht In wb.Sheets sht.Copy after:=wb1.Sheets(wb1.Sheets.Count) wb1.Sheets(wb1.Sheets.Count).Name = Split(wb.Name, ".")(0) & sht.Name Next wb.Close Next End If End Sub