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中操作工作薄并不是件明智的事,但有些时候,还是避免不了要这么做.绝大多数情况下,我们要做的是获取到某个工作薄对象,并以此来获得其中的工作表对象,然后再对工作表中的数据进行处理. ...
随机推荐
- 前端每日实战:126# 视频演示如何用纯 CSS 创作小球变矩形背景的按钮悬停效果
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/yxbEzJ 可交互视频 此视频是可 ...
- Java面试之基础篇(1)
1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...
- vue父组件更新,子组件也更新的方法
1.父组件 使用 Math.ramdom() 2.子组件获取 然后监听这个ramdom变化,处理子组件的更新
- 在volist中用遍历
$('.InColor').each(function(){ if($(this).val()==1){ $('.absolute').css({"color":"gra ...
- 小程序中css3实现优惠券
效果如下: css3实现优惠券 知识储备 颜色渐变 linear-gradient() css伪类 :before :after index.wxss .app { /* padding: 20rpx ...
- [CF Round603 Div2 F]Economic Difficulties
题目:Economic Difficulties 传送门:https://codeforces.com/contest/1263/problem/F 题意:给了两棵tree:Ta(拥有a个节点,节点编 ...
- 前端每日实战:156# 视频演示如何用纯 CSS 创作一个飞机舷窗风格的 toggle 控件
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/jeaOrw 可交互视频 此视频是可 ...
- 简单三步同步你的 VSCode 用户配置
https://www.cnblogs.com/knight-errant/p/10444777.html 设备重装,换设备,VSCode 又要重新配置了?不不不,简单三步,让你的 VSCode 配置 ...
- 分享:陆行鸟BGM合集
第39首是原版哦 https://pan.baidu.com/mbox/homepage?short=pMkAqhX
- Vuex模块:不开启命名空间
模块不开启命名空间时,会共享全局命名空间. { state: { 模块1: "局部状态1", 模块2: "局部状态2" }, getters: { getter ...