Excel VBA批量处理寸照名字
需求:因为处理学生学籍照片,从照相馆拿回来的寸照是按班级整理好,文件名是相机编号的文件。那么处理的话,是这么一个思路,通过Excel表格打印出各班A4照片列表,让学生自行填上照片对应姓名。表格收回来后Excel表格上填入对应姓名,通过VBA更改电子档照片文件名。


Function getSubDirectory()'获取当前文件的下层所有目录
Dim strCurDir, strDirectoryName, strDirs As String
Dim arrDirectoryName()
Dim i As Integer strCurDir = ThisWorkbook.Path & "\" strDirectoryName = Dir(strCurDir, vbDirectory)
'暂存目录的数组arrTemp下标从“0”开始
i = 0
Do While strDirectoryName <> "" ' 开始循环。
'跳过当前的目录及上层目录(一个点个两个点为名字的目录)。
If strDirectoryName <> "." And strDirectoryName <> ".." Then
'使用位比较来确定 MyName 代表一目录。
If (GetAttr(strCurDir & strDirectoryName) And vbDirectory) = vbDirectory Then
'动态增加数组元素
ReDim Preserve arrDirectoryName(i)
arrDirectoryName(i) = strDirectoryName
i = i + 1
'Debug.Print MyName
'如果它是一个目录,将其名称显示出来。
End If
End If
strDirectoryName = Dir
If strDirectoryName = "" And i = 0 Then
getSubDirectory = ""
Exit Function
End If '查找下一个目录。
Loop If UBound(arrDirectoryName) = 0 Then
getSubDirectory = arrDirectoryName(0)
Else
strDirs = Join(arrDirectoryName, ",") '把数组处理为“,”分隔字符串返回
Erase arrDirectoryName
getSubDirectory = strDirs
End If
End Function
Function getSubDirFileNames(subDir1 As String) As String() '返回当前工作簿目录的指定子目录文件名数组的函数
Dim arrFileNames() As String '存储文件名数组
Dim i As Integer If subDir1 = "" Then
ReDim Preserve arrFileNames(0)
arrFileNames(0) = ""
getSubDirFileNames = arrFileNames
Exit Function
End If myPath = ThisWorkbook.Path + "\" + subDir1 + "\*.jpg" '当前工作簿目录子目录文件存放路径 i = 0
strName = Dir(myPath)
Do While strName <> ""
ReDim Preserve arrFileNames(i)
arrFileNames(i) = strName
i = i + 1
strName = Dir '再次执行不带参数dir函数即显示下一文件的文件名(参照vba的dir函数执行规则)
Loop If i < 1 Then
ReDim Preserve arrFileNames(0)
arrFileNames(0) = ""
getSubDirFileNames = arrFileNames
Exit Function
End If
getSubDirFileNames = arrFileNames
End Function
Application.ScreenUpdating = False '禁止屏幕刷新
'=====================================
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
If shp.Type = msoPicture Then 'shape类型包含按钮、美术字、自选图形之类,msoPicture代表图片
shp.Delete
End If
Next
'===================================== Application.ScreenUpdating = True '恢复屏幕刷新 End Su
Sub insertPicture(PictureFileName As String, TargetCell As Range)'插入图片函数
Dim p As Object
Dim t As Double, l As Double, w As Double, h As Double 't:top,l:left,w:with,h:height
t = TargetCell.Top: l = TargetCell.Left: w = TargetCell.Width: h = TargetCell.Height
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub '“工作表”外的其他类型表(如宏表,图表)中不插图片
If Dir(PictureFileName) = "" Then Exit Sub '文件名路径为空,没有图片,退出插入操作
TargetCell.Select
Set p = ActiveSheet.Pictures.Insert(PictureFileName)'Pictures.Insert()函数是老版本函数,vbe对象浏览器中隐藏了,需要查看的话按F2键
p.Placement = xlMoveAndSize'图片随单元格缩放
p.Width = w - 6'根据需要调整图片高宽
p.Height = h - 2
p.Left = l + 3'根据需要调整图片左上插入位置
p.Top = t + 1
'p.Left = p.Left + (TargetCell.Offset(0, 1).Left - l - p.Width) / 2
'insertPicture = p
Set p = Nothing
End Sub
下面是ThisWorkbook的open过程跟“插入图片”、“删除图片”、“重命名图片”的按钮代码
Private Sub Workbook_Open()
ThisWorkbook.Sheets(1).Select
Dim dirs As String
Dim rngList As Range Set rngList = Range("l1")
rngList.ClearContents
rngList.Validation.Delete dirs = getSubDirectory
If dirs <> "" Then
rngList.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=dirs
rngList.Value = Split(dirs, ",")(0)
End If End Sub
“插入图片”按钮
Sub doInsertPictures()
Dim arrFiles() As String
Dim myPath As String
Dim i, j As Integer
i = 2: j = 1
Sheets(1).Select
myPath = ThisWorkbook.Path & "\" & Range("l1").Value & "\"
arrFiles = getSubDirFileNames(Range("l1").Value)
If arrFiles(0) <> "" Then
For Each file In arrFiles
Call insertPicture((myPath & file), Sheets(1).Cells(i, j))
Sheets(1).Cells(i, j).Offset(1, 0).Value = file
j = j + 1
If j > 9 Then
j = 1
i = i + 3
If i > 20 Then Exit For
End If
Next
End If
End Sub
“删除图片”按钮
Sub deletePicsNpicNames()
Call deletePictures
For i = 0 To 7
Sheets(1).Range("a3:i3").Offset(i * 3).ClearContents
Next
End Sub
“重命名图片”按钮
Sub renamePics()
Dim i, j As Integer
Dim picPath As String picPath = ThisWorkbook.Path & "\" & Range("l1").Value & "\" For i = 1 To 7
For j = 1 To 9
If Sheets("照片处理").Range("a" & i).Offset(0, j - 1).Value="" Or Sheets("照片处理").Range("a" & i).Offset(1, j - 1).Value = "" Then Exit Sub
Name picPath & Sheets("照片处理").Range("a" & i).Offset(0, j - 1).Value As picPath & Sheets("照片处理").Range("a" & i).Offset(1, j - 1).Value
Next Next End Sub
源文件下载:照片处理xls
Excel VBA批量处理寸照名字的更多相关文章
- Excel VBA批量处理寸照名字(类模块加FSO版)
需求:因为处理学生学籍照片,从照相馆拿回来的寸照是按班级整理好,文件名是相机编号的文件.那么处理的话,是这么一个思路,通过Excel表格打印出各班A4照片列表,让学生自行填上照片对应姓名.表格收回来后 ...
- Excel VBA ——批量工作表重命名
虽然平常在用excel 2010重命名工作表的时候,一般可能会用"双击工作表"的方法来重名,但是遇到大批量重名的时候就很麻烦. 我的方法,先建一张新表,然后在第一列写好要命名的表名 ...
- Excel VBA批量修改文件夹下的文件名
今天,有同事提出想批量修改文件名,规则比较简单,在第五位后加“-”即可, 上网没找到相关工具,就自己做了个excel,用宏代码修改. 代码如下: Private Sub CommandButton1_ ...
- Excel vba:批量生成超链接,添加边框,移动sheet等
Excel vba 操作 批量生成sheet目录并添加超链接 Sub Add_Sheets_Link() 'Worksheets(5)为清单目录页 '在sheet页上生成sheet页名字并超链接 To ...
- 将excel文件批量转成pdf
防止数据编辑.改动带来的不一致性,常常要将excel文件转成pdf文件再共享.发送给对方.有时excel文件还挺多,手头上保存实在是太慢了.就考虑用VBA批量转置. 掌握几个东西,就比较容易了: 1. ...
- 【游戏开发】Excel表格批量转换成lua的转表工具
一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游 ...
- bat批量修改图片的名字实现(两种方法)
问题描述: 业务中遇到需要批量修改大量图片的名字. 如下图,需要修改为图片名字“u=”之后和“,”之前的那一串 解决思路1: bat批处理,网上查找相关代码如下: @echo off SetLocal ...
- 【Python】通过python代码实现demo_test环境的登录,通过csv/txt/excel文件批量添加课程并开启课程操作--(刚开始 项目 页面 模块 元素这种鸟 被称作pageobject 等这些搞完 然后把你的定位器、数据 和脚本在分离 就是传说中那个叫数据驱动 的鸟)
一.1.通过csv文件批量导入数据 1 from selenium import webdriver from time import ctime,sleep import csv #循环读取每一行每 ...
- Excel VBA入门(九)操作工作薄
虽然我前面讲过,在VBA中操作工作薄并不是件明智的事,但有些时候,还是避免不了要这么做.绝大多数情况下,我们要做的是获取到某个工作薄对象,并以此来获得其中的工作表对象,然后再对工作表中的数据进行处理. ...
随机推荐
- 强大的VS插件CodeRush发布v19.1.4|支持Visual Studio 2019
CodeRush是一个强大的Visual Studio .NET 插件,它利用整合技术,通过促进开发者和团队效率来提升开发者体验. [CodeRush for Visual Studio v19.1. ...
- git-bash下, 启动sshd
今天发现git-shell下居然有sshd.exe, 尝试了一下,居然起来了.在windiwos下起sshd也是如此简单. #先编辑C:\Program Files (x86)\Git\etc\ssh ...
- 基于http方式搭建YUM源服务器
基于http方式搭建YUM源服务器 (2012-09-21 11:59:14) 转载▼ 标签: yum linux lnmp lamp http 分类: Linux 为了方便公司80多台Linux服务 ...
- unigui ios微信界面错位和点击失灵问题
IOS微信下会出现二个严重问题: 1.输入框失去焦点导致控件错位,造成无点正常点击. 此问题是微信自带浏览器,一直遗留问题, 尝试了多种方法始终无解.因此要用来开发公众号的一定要注意. 2.界面下移 ...
- Thread的几种方法的使用
1:setPriority() 设置线程的优先级,从1 到10. 5是默认的. 1是最低优先级. 10是最高优先级 public class MyThread01 implements Runn ...
- PHP入门培训教程PHP程序员要掌握哪些技术
总有那么一群人,学个半吊子就急着找工作,面试题做不出来,吹牛都吹不来所以你只能低工资.PHP程序员要掌握哪些技术?那么兄弟连PHP培训 就来小结一下. 面试前请参考:(前三阶段完成80%在北京月薪5k ...
- mysql CHECK约束 语法
mysql CHECK约束 语法 作用:CHECK 约束用于限制列中的值的范围. 直线电机 说明:如果对单个列定义 CHECK 约束,那么该列只允许特定的值.如果对一个表定义 CHECK 约束,那么此 ...
- 贪心整理&一本通1431:钓鱼题解
题目传送 (其实有一个更正经的题解) 看了许久,发现这题貌似就是一个动态规划啊,但毕竟是贪心题库里的题,还是想想用贪心解吧. 经过(借鉴大佬思路)十分复杂的思考后,终于理解出了这题的贪心思路.该题的难 ...
- hihocoder1286 : 子矩阵求和
http://hihocoder.com/problemset/problem/1286 题解 NB分析题. 首先我们令\(s[i][j]\)表示以\((i,j)\)为左上角的矩形的权值和. 因为\( ...
- CMAK找不到相关编译器的问题
本机安装了vs2019,在编译vulkansdk所带的samples时,遇到 错误提示: CMake Error at CMakeLists.txt: (project): Generator Vis ...