需求:因为处理学生学籍照片,从照相馆拿回来的寸照是按班级整理好,文件名是相机编号的文件。那么处理的话,是这么一个思路,通过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
Sub deletePictures() '删除工作表所有图片函数

    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批量处理寸照名字的更多相关文章

  1. Excel VBA批量处理寸照名字(类模块加FSO版)

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

  2. Excel VBA ——批量工作表重命名

    虽然平常在用excel 2010重命名工作表的时候,一般可能会用"双击工作表"的方法来重名,但是遇到大批量重名的时候就很麻烦. 我的方法,先建一张新表,然后在第一列写好要命名的表名 ...

  3. Excel VBA批量修改文件夹下的文件名

    今天,有同事提出想批量修改文件名,规则比较简单,在第五位后加“-”即可, 上网没找到相关工具,就自己做了个excel,用宏代码修改. 代码如下: Private Sub CommandButton1_ ...

  4. Excel vba:批量生成超链接,添加边框,移动sheet等

    Excel vba 操作 批量生成sheet目录并添加超链接 Sub Add_Sheets_Link() 'Worksheets(5)为清单目录页 '在sheet页上生成sheet页名字并超链接 To ...

  5. 将excel文件批量转成pdf

    防止数据编辑.改动带来的不一致性,常常要将excel文件转成pdf文件再共享.发送给对方.有时excel文件还挺多,手头上保存实在是太慢了.就考虑用VBA批量转置. 掌握几个东西,就比较容易了: 1. ...

  6. 【游戏开发】Excel表格批量转换成lua的转表工具

    一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游 ...

  7. bat批量修改图片的名字实现(两种方法)

    问题描述: 业务中遇到需要批量修改大量图片的名字. 如下图,需要修改为图片名字“u=”之后和“,”之前的那一串 解决思路1: bat批处理,网上查找相关代码如下: @echo off SetLocal ...

  8. 【Python】通过python代码实现demo_test环境的登录,通过csv/txt/excel文件批量添加课程并开启课程操作--(刚开始 项目 页面 模块 元素这种鸟 被称作pageobject 等这些搞完 然后把你的定位器、数据 和脚本在分离 就是传说中那个叫数据驱动 的鸟)

    一.1.通过csv文件批量导入数据 1 from selenium import webdriver from time import ctime,sleep import csv #循环读取每一行每 ...

  9. Excel VBA入门(九)操作工作薄

    虽然我前面讲过,在VBA中操作工作薄并不是件明智的事,但有些时候,还是避免不了要这么做.绝大多数情况下,我们要做的是获取到某个工作薄对象,并以此来获得其中的工作表对象,然后再对工作表中的数据进行处理. ...

随机推荐

  1. MSSQL时间格式转换

    sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: ), 时间一, ) 结果: :/*时间一般为getdate()函数或数据表里的 ...

  2. 【前端】DOM操作

    1 什么是DOM 全称 Document Object Model 文档对象模型. 一个web页面的展示,是由html标签组合成的一个页面,dom对象实际就是将html标签转换成了一个文档对象.可以通 ...

  3. css图标与文字对齐实现方法

    1.移动端(安卓设备.ios设备)图标文字垂直居中对齐的最佳常用解决方案是采用弹性盒子布局,可以快捷有效实现子元素未知高度绝对垂直居中对齐.PC端考虑到兼容性的问题,一般不推荐使用弹性盒子,依旧只能采 ...

  4. linux运维、架构之路-MySQL(一)

    一.数据库管理系统 1.RDBMS关系型数据库特点 ①二维表 ②典型产品Oracle传统企业,MySQL是互联网企业产品 ③数据存取通过SQL ④最大的特点,数据安全性很强(ACID) 2.NoSQL ...

  5. Go简易分布式对象存储 合并文件的所有分块为一个文件

    项目 项目地址: https://github.com/Draymonders/cloud 欢迎大家Watch or Star 缘由 由于项目中对大文件进行5MB为一个分块上传(多线程,提升上传效率) ...

  6. linux php扩展模块安装

    安装Freetds Freetds 官方网站是 http://www.freetds.org,可以去官方网站下载程序,文中下载的是0.92.79版本. wget ftp://ftp.freetds.o ...

  7. 特征提取算法(4)——LoG特征提取算法

    目录 1.介绍 2.LoG原理 3.数学原理 4.模板性质 1.介绍 LoG(DoG是一阶边缘提取)是二阶拉普拉斯-高斯边缘提取算法,先高斯滤波然后拉普拉斯边缘提取. Laplace算子对通过图像进行 ...

  8. Internet History, Technology, and Security(week8)——Security: Encrypting and Signing

    Hiding Date from Ohters Security Introduction Alice and Bob是密码学.博弈论.物理学等领域中的通用角色之一.Alice(代表A)和Bob(代表 ...

  9. Windows10主机插入耳机只有一边有声音

    Windows10主机插入耳机只有一边有声音 在网上看了好几个版本,排除了主机插孔和耳机本身的问题,根据一篇文章在声音设置中找到了答案,原文章不是windows10,所以我找了好一会才找到,所以特地写 ...

  10. 箭头函数(Arrow Functions)

    ES5语法: var getPrice = function() { return 4.55; }; console.log(getPrice()); ES6 中,箭头函数就是函数的一种简写形式,使用 ...