VBA-VBA中的用户信息交互

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
原文地址:https://www.cnblogs.com/xiao-xuan-feng/p/12682342.html