在办公自动化方面,目前Python那可谓是相当的火,但是在用Python操作Office三件套的时候,有些功能还是无法实现,且可移植性较差,当然,这不光是Python自己的问题。 最近在使用Word的时候遇到了批量排版的问题,就在B站找了使用python-docx批量操作Word的视频看了一下,但是发现用起来还是有点弱鸡,有些功能还是无法实现;当然,用pandas操作Excel还是挺Six的。VBA是微软为了操作Office系列专门生的亲儿子,与Office的适配性那肯定是毋庸置疑的,目前网上最近有很多的文章在唱衰VB,对VB不太懂,所以在这不多做讨论。虽然微软对VBA早已停止更新了,但是只要Office三件套在办公领域存在一天,VBA是肯定不会死掉的,这一点是毋庸置疑的,为了在以后工作的时候能够不把时间浪费在一些重复性的工作中,懂得对VBA的基本使用还是有非常大的益处的,但是刚开始接触,发现VBA的方法和属性真的好繁杂,<mark>脑壳疼</mark>,<mark>壳疼</mark>,<mark>疼</mark>。下面是学习VBA过程记录的一些常用操作,希望和各位道友共同交流学习,下面只是一小部分内容,日后慢慢更吧。
工作表
'批量添加工作表sheet
Sub add_sheets()
Dim i As Integer
Sheets.Add Count:=3
For i = 1 To 3
Sheets(i).Name = "table" & i
Next
End Sub
'批量删除工作表sheet
Sub delete_sheets()
Excel.Application.DisplayAlerts = False
For i = 1 To Sheets.Count - 1
Sheets(1).Delete
Next
Excel.Application.DisplayAlerts = False
End Sub
'批量获取表名
Sub get_sheet_names()
Dim i As Integer
For i = 1 To Sheets.Count
Sheet1.Range("A" & i) = Sheets(i).Name
Next
End Sub
'批量添加sheet name,并在固定单元格添加数值
Sub add_sheet_name()
Dim i As Integer
For i = 1 To 31
Sheet1.Copy after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "1月" & i & "日"
Sheets(Sheets.Count).Range("a5") = "2021-1-" & i
Next
End Sub
'删除多个工作表
Sub delete_some_sheets()
Excel.Application.DisplayAlerts = False
Dim sheet As Worksheet
For Each sheet In Sheets
If sheet.Name <> "No Delete" Then
sheet.Delete
End If
Next
Excel.Application.DisplayAlerts = False
End Sub
Sub open_file()
Application.DisplayAlerts = False
Workbooks.Open Filename:="file_path"
ActiveWorkbook.Sheets(1).Range("A1") = "CSDN"
Active.Workbook.Save
'Active.Workbook.Close
Application.DisplayAlerts = False
End Sub
'拆分表格中的多个sheet为单个文件
Sub spilt_sheet()
Dim sheet As Worksheet
For Each sheet In Sheets
sheet.Copy
ActiveWorkbook.SaveAs Filename:="path\" & sheet.Name & ".xlsx"
ActiveWorkbook.Close
Next
End Sub
单元格
Sub operate_cells()
[A1]
'表示A1单元格,此类写法无法传变量
cells(1,1)
'表示第一行第一列单元格
range("a10")
range("a10").value
range("A1").offset(0,1)
'A1单元格向下偏移0行,向右偏移1列
Range("a10").End(*).Select
'*可传4个参数xlUp/xlDown/xlToLeft/xlToRight任意一个(在Excel中表示双击某一单元格上/下/左/右边界,会自动选中sheet表中数据集的边界单元格)
range("A10").EntireRow.Select
'选取整行单元格,EntireColumn即为选中整列
Range("A1").Resize(4, 5).Select
'选中从A1单元格开始的向下4行,向右5列
End Sub