需求:因为处理学生学籍照片,从照相馆拿回来的寸照是按班级整理好,文件名是相机编号的文件。那么处理的话,是这么一个思路,通过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. bzoj1367 [Baltic2004]sequence 左偏树+贪心

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1367 题解 先考虑条件为要求不下降序列(不是递增)的情况. 那么考虑一段数值相同的子段,这一段 ...

  2. Django【第26篇】:中介模型以及优化查询以及CBV模式

    中介模型以及优化查询以及CBV模式 一.中介模型:多对多添加的时候用到中介模型 自己创建的第三张表就属于是中介模型 class Article(models.Model): ''' 文章表 ''' t ...

  3. vue项目中打包background背景路径问题

    项目中图片都放在src/img文件夹,img和background-image引用都用相对路径,即../../这种形式 在打包build的设置路径assetsPublicPath: ‘./‘,然后那些 ...

  4. 推荐一些CSS命名规范

    常用的CSS命名规则 头:header内容:content/container尾:footer导航:nav侧栏:sidebar栏目:column页面外围控制整体佈局宽度:wrapper左右中:left ...

  5. Python---进阶---函数式编程---按照权重排序

    一. 权重是100 价格占的权重是40%,销量占的权重是17%,评级站的权重是13%,评论占的权重是30% ---------------------------------------------- ...

  6. 【JavaScript】数组方法之基础方法

    数组方法之基础方法 Array 对象属性 属性 描述 constructor 返回对创建此对象的数组函数的引用. length 设置或返回数组中元素的数目. prototype 使您有能力向对象添加属 ...

  7. JS中的执行机制(setTimeout、setInterval、promise、宏任务、微任务)

    1.执行机制 JS 是单线程的,处理 JS 任务(程序)只能一个一个顺序执行,所以 JS 中就把任务分为了同步任务和异步任务.同步的进入主线程先执行,异步的进入Event Table并注册函数,当指定 ...

  8. Java——方法重写

  9. Leetcode 15. Sum(二分或者暴力或者哈希都可以)

    15. 3Sum Medium Given an array nums of n integers, are there elements a, b, c in nums such that a +  ...

  10. 170830-关于JdbcTemplate的知识点

    1.Spring提供的一个操作数据库的技术JdbcTemplate,是对Jdbc的封装.语法风格非常接近DBUtils. JdbcTemplate可以直接操作数据库,加快效率,而且学这个JdbcTem ...