Excel VBA批量导入图片教程与源代码

5星 · 超过95%的资源 需积分: 44 79 下载量 166 浏览量 更新于2024-09-12 2 收藏 2KB TXT 举报
"这篇VBA代码用于批量导入图片到Excel工作表中,将图片放置在指定列的单元格内。用户可以选择多个文件,程序会依次处理这些文件并将图片插入到对应的单元格。" 在Excel VBA中,批量导入图片是一项非常实用的功能,尤其在处理大量数据时,可以极大地提高工作效率。以下是对给定代码的详细解释: 1. **变量声明**: - `fileN`:用来存储图片文件名。 - `aFile`:数组,存储完整路径被分解后的各个部分。 - `aPath`:存储图片文件的完整路径。 - `ws`:定义工作表对象,用于指定要在哪个工作表上操作。 - `图片列`:变量`图片列`设置为15,表示图片将被导入到第16列(因为Excel列索引从1开始)。 - `起始行`:变量`ʼ`默认设置为38,表示图片将从第39行开始插入。 2. **用户交互**: - 使用`Application.Dialogs(xlDialogPrinterSetup).Show`显示打印机设置对话框,但这在这段代码中似乎没有实际作用,可能是一个遗留或错误的部分。 - 使用`Application.FileDialog(msoFileDialogFilePicker)`让用户选择要导入的图片文件。`AllowMultiSelect=True`允许用户一次选择多个文件,`Filters.Clear`清除默认过滤器,然后添加了几个过滤器来限制选择的文件类型(Excel文件和所有文件)。 3. **循环处理选定的文件**: - 对于每个选定的文件,代码执行以下操作: - 显示当前处理的文件路径。 - 分割文件路径得到文件名`fileN`。 - 将图片路径`aPath`和文件名`fileN`写入Excel工作表的相应单元格。 - 使用`ActiveSheet.Pictures.Insert(aPath)`插入图片,并通过`Select`和`ShapeRange.LockAspectRatio=msoFalse`调整图片的比例,使其不锁定纵横比,允许图片根据单元格大小自适应。 4. **代码问题与优化**: - 这段代码在插入图片后没有清理选择,这可能导致后续操作出现问题。通常建议在插入图片后使用`ActiveCell.Unselect`来取消选择。 - `DoEvents`语句在这段代码中的使用可能不是必需的,因为它主要用于在等待用户输入或处理长时间运行任务时更新用户界面。在此场景中,它可能不会带来显著的益处。 - 在导入图片前,代码尝试打开并关闭工作簿,但这个步骤在这里是不必要的,因为我们可以直接使用文件路径插入图片。 通过优化和修复这些问题,这段代码可以更高效地工作,同时保持用户友好的界面。对于需要在Excel中批量处理图片的工作流,这是一个非常实用的VBA解决方案。
2016-09-16 上传
以前用Excel2003做了些宏,在网上还有不少粉丝,因一些功能在Excel2010中无法使用,故重新整理,欢迎指正; 本Excel中的宏在Excel2010中测试表现出色; 运行宏前,要保证EXCEL没有禁用宏。 Michael Ho QQ: 9900060 ----------------------- 本Excel有以下功能: 插入图片1 1.点击执行后,会出现文件夹选择窗,请选择你JPG图片所在文件夹(选择“文件夹”而不是选择文件); 2.宏会自动复制Sheet2到新工作簿,并插入你所选文件夹中的全部JPG图片到B列,对应的图片名自动填到C列; 3.图片的大小会自动适应Sheet2的B3单元格,因此可以在点击执行前调整Sheet2的B3单元格的大小来控制插入图片的大小。 -------- 插入图片2 1.点击执行后,会出现文件夹选择窗,请选择你JPG图片所在文件夹(选择“文件夹”而不是选择文件); 2.宏会自动复制Sheet3到新工作簿,并插入你所选文件夹中的全部JPG图片制作图册,对应的图片名自动填到图片下方; -------- 插入图片3 如果用户自己的Excel文件中有一列是型号,该宏可以插入指定文件夹里以型号命名的JPG图片到另一列; 1.打开本Excel文件,不要关闭; 2.再另外打开你自己需要操作的另一个Excel文件,并保持你要操作的工作表做为当前活动工作表; 3.在你的文件中按Ctrl+I (或在你的文件中手动执行宏,然后选择本EXCEL文件中的宏InsertPic3); 4.然后会出现文件夹选择窗,请选择你JPG图片所在文件夹(选择“文件夹”而不是选择文件); 5.在弹出的对话框中指定型号在第几列,图片要插入到第几列,以及从哪一行开始; 6.图片的大小会自动适应你设定的第一行要插入图片的单元格,因此提前调整那个单元格的大小可以控制插入图片的大小。 ------------- 删除活动工作表中所有图片 Ctrl+d 删除活动工作表里所有的JPG图片,(不一定是本工作簿中的工作表); 1.打开本Excel文件,不要关闭; 2.再另外打开你自己需要操作的另一个Excel文件,并保持你要操作的工作表做为当前活动工作表; 3.在你的文件中按Ctrl+d (或在你的文件中手动执行宏,然后选择本EXCEL文件中的宏DelPic); ------------- 导出活动工作表中被选中的一张JPG图片 Ctrl+e 导出活动工作表中被选中的一张JPG图片,(不一定是本工作簿中的工作表); 1.打开本Excel文件,不要关闭; 2.再另外打开你自己需要操作的另一个Excel文件,并保持你要操作的工作表做为当前活动工作表; 3.请选中一张要导出的图片; 4.在你的文件中按Ctrl+e (或在你的文件中手动执行宏,然后选择本EXCEL文件中的宏OutputOnePic); 5.在弹出的对话框中指定图片要保存的名字; 1.不管图片在Excel中是否被缩放过,导出的图片是按图片的原始尺寸进行保存。 2.在桌面上会自动新建一个"OutputPic"的文件夹,导出的图片将会存在那个文夹里; 3.如果文件夹中已有相同名字的文件,则后面导出的文件会自动加上(v1), (v2), (v3)... ------------- 导出活动工作表中所有JPG图片 Ctrl+f 导出活动工作表中所有JPG图片,并且图片名自动使用指定列中的图片名; 1.打开本Excel文件,不要关闭; 2.再另外打开你自己需要操作的另一个Excel文件,并保持你要操作的工作表做为当前活动工作表; 3.在你的文件中按Ctrl+f (或在你的文件中手动执行宏,然后选择本EXCEL文件中的宏OutputAllPic); 4.在弹出的对话框中指定图片所在列,图片名所在的列; 1.不管图片在Excel中是否被缩放过,导出的图片是按图片的原始尺寸进行保存; 2.在桌面上会自动新建一个"OutputPic"的文件夹,所有导出的图片将会存在那个文夹里; 3.如果文件夹中已有相同名字的文件,则后面导出的文件会自动加上(v1), (v2), (v3)... ---------------- 对指定文件夹中的JPG图片进行重命名 Ctrl+r 利用活动工作表中的所有图片的旧名与新名的对照,对指定文件夹中JPG图片进行重命名; 1.打开本Excel文件,不要关闭; 2.再另外打开你自己需要操作的另一个Excel文件,并保持你要操作的工作表做为当前活动工作表; 3.在你的文件中按Ctrl+r (或在你的文件中手动执行宏,然后选择本EXCEL文件中的宏RenamePic); 4.在弹出的对话框中指定图片旧名所在列和图片新名所在的列; 1.可以结合插入图片的宏,将所有图片的旧名输入到Excel中,再在另一列中填上新图片名,然后使用该宏。 2.如果顺利运行,会在原来那个文件夹下面新建一个叫“New”的子文件夹,所有重命好名的图片会自动放入子文件夹里; 3.如果文件夹中已有相同名字的文件,则后面的文件会覆盖原来的文件。