VBA入门之实战

这篇文章是对上一篇的VBA入门的实战总结,有助于之后自己对入门知识的运用。传送连接:VBA入门
#一、创建工作簿

Public Sub WorkBookAdd()
    Dim Wb As Workbook, sht As Worksheet '定义一个Workbook对象变量和一个Worksheet对象变量
    Set Wb = Workbooks.Add  '创建一个工作簿并赋值给Wb变量
    Set sht = Wb.Worksheets(1)
    With sht
        .Name = "日报" '设置sheet的标签名
        .Range("A1:F1") = Array("客户号", "客户名", "逾期天数", "逾期金额", "贷款期数", "剩余本金") '设置表头
    End With
    Wb.SaveAs ThisWorkbook.Path & "\客户日报.xlsx"  '将该工作簿另存为客户日报.xlsx
    ActiveWorkbook.Close
End Sub

#二、判断文件是否打开

Public Sub JudgeOpen()
Public Sub JudgeOpen()
    Dim i As Integer '定义一个整型变量
    For i = 1 To Workbooks.Count '进行循环,次数为已打开的工作簿个数
        If Workbooks(i).Name = "客户日报.xlsx" Then '判断是否有工作簿名为“客户日报.xlsx”的工作簿
            MsgBox "文件已打开!" '
            Exit Sub '如果有的话就关闭程序
        End If
    Next
    MsgBox "文件没有打开!"
End Sub


#三、判断文件是否存在

Public Sub JudgeExist()
    Dim fil As String
    fil = ThisWorkbook.Path & "\客户日报.xlsx"
    If Len(Dir(fil)) > 0 Then '如果fil指代的文件存在则返回文件名否则为空字符串
        MsgBox "工作簿存在!"
    Else
        MsgBox "工作簿未存在!"
    End If
End Sub

#四、向未打开的工作簿中存入文件

Public Sub InputData()
    Dim wb As String, xrow As Integer, LenRow As Integer, arr 'arr的定义方式是变体变量
    wb = ThisWorkbook.Path & "\客户日报.xlsx"
    Workbooks.Open (wb) '打开客户日报
    With ActiveWorkbook.Worksheets(1)
        xrow = .Range("A1").CurrentRegion.Rows.Count + 1 '计算空白行的行数
        arr = Array(xrow - 1, "小花", "1", "1000", "12", "1888") '生成一个数组将其赋值给arr变量
        LenRow = UBound(arr) - LBound(arr) + 1 '计算arr数组的长度
        .Cells(xrow, 1).Resize(1, LenRow) = arr '将数组的值写入单元格区域中
    End With
    ActiveWorkbook.Close savechanges:=True '保存修改并关闭
        
End Sub

#五、对工作表进行隐藏

Public Sub Implicit()
    Dim sht As Worksheet
    For Each sht In Worksheets '对当前活动工作簿中所有的工作表进行循环
        If sht.Name <> ActiveSheet.Name Then '对名字进行判断
            sht.Visible = xlSheetVeryHidden '这种隐藏方式不能在excel中取消隐藏
        End If
    Next
End Sub

#六、用某列进行生成多个工作表

Public Sub AddSheets()
    '用B列来分表,B列有重复值
    Dim i As Integer, wb As Workbook, sht As Worksheet
    i = 2
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\客户日报.xlsx")
    Set sht = wb.Worksheets("日报")
    Do While sht.Cells(i, "B").Value <> "" '判断该行是否为空
        On Error Resume Next    '从该句开始语句有误也会直接跳到下一行
        If wb.Worksheets(sht.Cells(i, "B").Value) Is Nothing Then '如果这个工作表存在则执行if中的代码
            wb.Worksheets.Add after:=Worksheets(Worksheets.Count) '添加一个工作表
            ActiveSheet.Name = sht.Cells(i, "B").Value  '将新加的工作表重命名
        End If
        i = i + 1
    Loop
End Sub

#七、对某列分类并且分到不同的表中

Sub ShtClear()
    Dim i As Long, Cont As String, rng As Range
    Dim ColLen As Single, sht As Worksheet
    ColLen = Worksheets(1).Cells(1, 16384).End(xlToLeft).Column() '获取第一列的行数
    For Each sht In Worksheets '把第一列复制到每一个表格的第一列中
        Set rng = sht.Cells(1, 1).Resize(1, ColLen)
        Worksheets(1).Range(Cells(1, 1), Cells(1, ColLen)).Copy rng
    Next
    i = 2
    bj = Cells(i, "B").Value
    Do While bj <> "" '对要分类的列的值进行判断,当单元格为空时停止
        Set rng = Worksheets(bj).Range("A65535").End(xlUp).Offset(1, 0)
        Cells(i, 1).Resize(1, ColLen).Copy rng
        i = i + 1
        bj = Cells(i, "B").Value
    Loop
End Sub

需要用到的excel模板,下载excel模板链接
#八、将工作表保存为工作簿

Sub SaveToFile()
    Application.ScreenUpdating = False
    Dim folder As String, sht As Worksheet
    folder = ThisWorkbook.Path & "\" & Worksheets(1).Name
    If Len(Dir(folder, vbDirectory)) = 0 Then 'dir的第二个参数是文件类型
        MkDir folder 'MkDir可以生成目录
    End If
    For Each sht In Worksheets
        sht.Copy '复制sht后会生成一个新的工作簿,如果该工作簿会是活动工作簿
        ActiveWorkbook.SaveAs folder & "\" & sht.Name & ".xls"
        ActiveWorkbook.Close
    Next
    Application.ScreenUpdating = True
End Sub

#九、合并多表数据

//ToDo

#十、合并多工作簿数据

//ToDo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值