1.用于批量删除图片的VBA代码
For Each a In ActiveSheet.Shapes
2.批量插入图片的VBA代码
假设要插入的列为B列,A列是对应的图片名称,图片路径和工作表路径需要一致,插入的图片从B2开始
无边距:
r_num = [a65536].End(xlUp).Row For Each a In ActiveSheet.Shapes Columns('B:B').ColumnWidth = 11 Rows('2:' & r_num).RowHeight = 92 For Each rg In Range('b2:b' & r_num) ActiveSheet.Shapes.AddShape(msoShapeRectangle, rg.Left, rg.Top, rg.Width, rg.Height).Select Selection.ShapeRange.Line.Visible = msoFalse Selection.ShapeRange.Fill.UserPicture ThisWorkbook.Path & '\' & rg.Offset(0, -1) & '.png'
有边距:
r_num = [a65536].End(xlUp).Row For Each a In ActiveSheet.Shapes Columns('B:B').ColumnWidth = 11 Rows('2:' & r_num).RowHeight = 92 For Each rg In Range('b2:b' & r_num) ActiveSheet.Shapes.AddShape(msoShapeRectangle, rg.Left + 4, rg.Top + 4, rg.Width - 8, rg.Height - 8).Select Selection.ShapeRange.Line.Visible = msoFalse Selection.ShapeRange.Fill.UserPicture ThisWorkbook.Path & '\' & rg.Offset(0, -1) & '.png'
3.批量下载文件或图片的VBA代码
假设下载文件的url在A列,文件名称在B列,要保存的文件类型在C列
Dim H, S, f_type, name, filename 'f_type 文件类型 name 文件名称 filename 路径名称 r_num = [a65536].End(xlUp).Row filename = ThisWorkbook.Path & '\' & 'img' If Dir(filename, vbDirectory) = '' Then '如果文件不存在 Set H = CreateObject('Microsoft.XMLHTTP') name = Range('b' & i).Value If name = '' Then name = i '为空则默认为数字 f_type = Range('c' & i).Value H.Open 'GET', Range('A' & i), False '网络中的文件URL Set S = CreateObject('ADODB.Stream') S.savetofile filename & '\' & name & '.' & f_type, 2 '本地保存文件名
4.查找本周的周一以及周日
MsgBox DateAdd('d', -(Weekday(d, 0) - 1), d) '周一 MsgBox DateAdd('d', (7 - Weekday(d, 0)), d) '周日
5.获取最后一列的行号的VBA代码
Function get_col(col_num) col_str = Chr(64 + col_num) col_str = Chr(64 + b_num - 1) + Chr(64 + 26) col_str = Chr(64 + b_num) + Chr(64 + e_num)
6.二维数组与一维数组,获取某行与某列,并转为一维数组
Dim arr1(1 To 6, 1 To 3), arr2() arr2 = Application.Transpose(Application.Index(arr1, 0, 3)) arr2 = Application.Index(arr1, 3, 0) For i = 1 To UBound(arr2)
7.打开工作簿,并将该工作表的某个工作表放入数组的VBA代码
Function get_arr(file, sh_name) '打开一个工作簿,并返回一个数组,第一个为路径,第二个参数为工作表的序号(工作表名称) Set wb = Workbooks.Open(file) wb.Sheets(sh_name).Select row_num = [b65536].End(xlUp).Row col_num = ActiveSheet.UsedRange.Columns.Count col_str = get_col(col_num) '获取行名称 arr = Sheets(sh_name).Range('a1:' & col_str & row_num)
8.循环当前工作簿,对每个工作表进行操作的VBA代码
9.在当前工作簿增加工作表,如果名字相同会删除
Function add_sheet(sh_name) Application.DisplayAlerts = False If sht.Name = sh_name Then sht.Delete Application.DisplayAlerts = True Sheets.add After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = sh_name
10.打开word并对其中内容进行替换
Application.EnableCancelKey = xlDisabled common_path = 'D:\new\' '输出的文档位置 doc_path='D:\analyse\20191118\计算\模板.docx' 'word模板路径 Set wd = CreateObject('Word.application') 'wd.Visible = True '设置窗体可见 Set w_doc = wd.Documents.Open(doc_path) Set myRange = w_doc.Content For i = UBound(arr) To 2 Step -1 myRange.Find.Execute FindText:=arr(i, 2), _ ReplaceWith:=arr(i, 3), Replace:=wdReplaceAll w_doc.SaveAs2 common_path & arr(2, 3) & '结果.docx' Application.EnableCancelKey = xlDisabled With CreateObject('Wscript.Shell') Call .RegWrite('HKEY_CURRENT_USER\Control Panel\International\iLZero', '1') ex_path='D:\analyse\模板.xlsx' 'excel模板位置 arr1 = get_arr(ex_path, 1) '替换的格式,get_arr为上方的函数 arr2 = get_arr(ex_path, 2) '替换的数据 For j = 2 To UBound(arr2) For k = 2 To UBound(arr1) arr1(k, 3) = CStr(arr2(j, k)) 'With CreateObject('Wscript.Shell') 'Call .RegWrite('HKEY_CURRENT_USER\Control Panel\International\iLZero', '0')
运行时,需要复制本文中的5、7函数,同时设置好word模板路径、excel模板路径和输出位置。
11.将当前工作表中的公式转换成数值
row_num = [a65536].End(xlUp).Row col_num = ActiveSheet.UsedRange.Columns.Count col_str = get_col(col_num) Range('A1:' & col_str & row_num).Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False
12.删除特定行
在原有数据上直接修改
row_num = [a65536].End(xlUp).Row For i = row_num To 1 Step -1 If Cells(1, i) = '同比' Or Cells(1, i) = '' Then '此处填写条件
先备份再进行删除
Function add_sheet(sh_name) Application.DisplayAlerts = False If sht.Name = sh_name Then sht.Delete Application.DisplayAlerts = True Sheets.add After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = sh_name row_num = [a65536].End(xlUp).Row col_num = ActiveSheet.UsedRange.Columns.Count col_str = get_col(col_num) arr=Range('A1:' & col_str & row_num) Sheets('删除后').Range('a1').Resize(row_num, UBound(arr, 2)) = arr For i = row_num To 1 Step -1 If Cells(1, i) = '同比' Or Cells(1, i) = '' Then '此处填写条件
13.判断文件夹和文件是否存在的VBA代码
testfile = 'D:\analyse\20191118\计算\new\' If Dir(testfile, vbDirectory) = '' Then
14.添加引用
'Name: Excel Major: 1 Minor: 7 GUID: {00020813-0000-0000-C000-000000000046} 'Name: DAO Major: 5 Minor: 0 GUID: {00025E01-0000-0000-C000-000000000046} 'Name: WMPLib Major: 1 Minor: 0 GUID: {6BF52A50-394A-11D3-B153-00C04F79FAA6} 'Name: VBIDE Major: 5 Minor: 3 GUID: {0002E157-0000-0000-C000-000000000046} 'Name: Office Major: 2 Minor: 5 GUID: {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} 'Name: stdole Major: 2 Minor: 0 GUID: {00020430-0000-0000-C000-000000000046} 'Name: Word Major: 8 Minor: 5 GUID: {00020905-0000-0000-C000-000000000046} 'Name: VBA Major: 4 Minor: 1 GUID: {000204EF-0000-0000-C000-000000000046} strGUID = '{00020905-0000-0000-C000-000000000046}' 'Microsoft Windows Media Player Marjor=1 Minor=0 ThisDocument.VBProject.References.AddFromGuid GUID:=strGUID, Major:=8, Minor:=5
|