Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

浏览:653次阅读
没有评论

共计 3366 个字符,预计需要花费 9 分钟才能阅读完成。

简介

VBA(Visual Basic for Applications)是依附在应用程序(例如Excel)中的VB语言。只要你安装了Office Excel就自动默认安装了VBA,同样Word和PowerPoint也能调用VBA对软件进行二次开发而让一些特别复杂的操作“脚本化”。

如何打开VBA

1. 打开”开发工具“功能(首次使用VBA)

如果你是第一次使用VBA,需要打开“开发工具”功能。

Window:文件——选项——自定义功能区——勾选开发工具

Mac:Excel——偏好设置——视图

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

2. 打开VBA的三种方式

2.1 开发工具——VisualBasic

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

2.2 ALT F11快捷键
2.3 右键sheet页查看代码

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

3. VBA界面

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

一个简单的VBA程序

大部分程序入门都会写一个代码输出“Hello World”,我们写第一个程序在选定的单元格输出自己的昵称。

  1. Sub 插入文字() 'sub定义一个过程
  2. Selection.Value = "TOMOCAT" '代码块
  3. End Sub '结束一个过程

1. 新建模块

模块方便我们导出代码用于其他的Excel,所以养成良好的编程习惯插入模块。

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

2. 在指定区域写代码

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

3.执行代码

下面三种方法实现的功能相同,无须太纠结,选择最方便的即可。

  • F5执行
  • 运行选项卡

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

  • 运行按钮Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

一点小建议——使用“立即窗口”

如果你用过Rstudio写R代码或者Spyder写Python代码的话,“立即窗口”类似于控制台,能提示代码编译错误和进行实时计算。

1. 打开“立即窗口

视图——立即窗口

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

2. 在立即窗口输入代码直接作用于excel

选中一个单元格,然后在立即窗口输入代码(不必定义Sub过程),敲击回车键执行:

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

可以看到执行后被选中的单元格出现了你的昵称,到此为止你已经完成了第一个VBA程序。

实例:将URL转化成图片

1. 背景描述

现在excel中有多个图片链接,我们希望将这些链接都转成图片。

2. 方法一:同时保留链接和图片

开发工具——Visual Basic(或者ALT F11快捷键)进入VB界面,然后双击sheet1按钮打开VB编程窗口:

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

输入如下代码并保存:

  1. Sub loadimage()
  2. Dim HLK As Hyperlink, Rng As Range
  3. For Each HLK In ActiveSheet.Hyperlinks '循环活动工作表中的各个超链接
  4. If HLK.Address Like "*.jpg" Or HLK.Address Like "*.gif" Or HLK.Address Like "*.png" Then '如果链接的位置是jpggif图片(此处仅针对此两种图片类型,更多类型可以通过建立数组或字典或正则来判断)
  5. Set Rng = HLK.Parent.Offset(, 1) '设定插入目标图片的位置
  6. With ActiveSheet.Pictures.Insert(HLK.Address) '插入链接地址中的图片
  7. If .Height / .Width > Rng.Height / Rng.Width Then '判断图片纵横比与单元格纵横比的比值以确定针对单元格缩放的比例
  8. .Top = Rng.Top
  9. .Left = Rng.Left (Rng.Width - .Width * Rng.Height / .Height) / 2
  10. .Width = .Width * Rng.Height / .Height
  11. .Height = Rng.Height
  12. Else
  13. .Left = Rng.Left
  14. .Top = Rng.Top (Rng.Height - .Height * Rng.Width / .Width) / 2
  15. .Height = .Height * Rng.Width / .Width
  16. .Width = Rng.Width
  17. End If
  18. End With
  19. End If
  20. Next
  21. End Sub

开发工具-宏-执行:

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

执行结果:

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

2. 删除链接只保留图片(插入VB脚本方式)

新建记事本保存以下代码另存为.bas格式:

  1. 'charset GB2312 . Excel 中的图片链接转为图片文件
  2. Attribute VB_Name = "LoadImage"
  3. Sub LoadImage()
  4. Dim HLK As Hyperlink, Rng As Range
  5. For Each HLK In ActiveSheet.Hyperlinks '循环活动工作表中的各个超链接
  6. If UCase(HLK.Address) Like "*.JPG" Or UCase(HLK.Address) Like "*.JPEG" Or UCase(HLK.Address) Like "*.PNG" Or UCase(HLK.Address) Like "*.GIF" Then '如果链接的位置是jpg或gif图片(此处仅针对此两种图片类型,更多类型可以通过建立数组或字典或正则来判断)
  7. Set Rng = HLK.Parent.Offset(, 0) '设定插入目标图片的位置
  8. With ActiveSheet.Pictures.Insert(HLK.Address) '插入链接地址中的图片
  9. If .Height / .Width > Rng.Height / Rng.Width Then '判断图片纵横比与单元格纵横比的比值以确定针对单元格缩放的比例
  10. .Top = Rng.Top
  11. .Left = Rng.Left (Rng.Width - .Width * Rng.Height / .Height) / 2
  12. .Width = .Width * Rng.Height / .Height
  13. .Height = Rng.Height
  14. Else
  15. .Left = Rng.Left
  16. .Top = Rng.Top (Rng.Height - .Height * Rng.Width / .Width) / 2
  17. .Height = .Height * Rng.Width / .Width
  18. .Width = Rng.Width
  19. End If
  20. End With
  21. HLK.Parent.Value = "" '删除单元格的图片链接
  22. End If
  23. Next
  24. End Sub

在VB界面右键sheet页选择导入文件:

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

执行效果:

Office之VBA零基础入门及实践:把链接批量转换成图片宏命令

3. 主动选择是否打开图片

同方法1,但是需要选择声明为BeforeRightClick,设置为右键时触发:

  1. With Target
  2. If Left(.Value, 7) = "http://" Then '如果单元格内容为网址
  3. '添加网络图片,并设置为图片大小位置随单元格变化而变化
  4. ActiveSheet.Shapes.AddPicture(.Value, msoCTrue, msoCTrue, .Left, .Top, .Width, .Height).Placement = xlMoveAndSize
  5. .WrapText = True '单元格设置为自动换行,以隐藏网址
  6. End If
  7. End With

执行宏后右击单元格就可以展示图片。

4. 补充

如果你的Excel未能正确将网址识别成超链接,可以使用如下代码:

  1. Sub loadimage()
  2. Dim ranTotal As Range, rng As Range, imageRng As Range '设定三个Range变量
  3. Set rngTotal = Range("o:o") '选中存放网址的o
  4. For Each rng In rngTotal '遍历所有的o列单元格
  5. If Left(rng.Value, 7) = "http://" Then '如果单元格内容为网址
  6. Set imageRng = rng.Offset(, 1) '存放图片的地址
  7. With ActiveSheet.Pictures.Insert(rng.Value)
  8. If .Height / .Width > imageRng.Height / imageRng.Width Then '判断图片纵横比与单元格纵横比的比值以确定针对单元格缩放的比例
  9. .Top = imageRng.Top
  10. .Left = imageRng.Left (imageRng.Width - .Width * imageRng.Height / .Height) / 2
  11. .Width = .Width * imageRng.Height / .Height
  12. .Height = imageRng.Height
  13. Else
  14. .Left = imageRng.Left
  15. .Top = imageRng.Top (imageRng.Height - .Height * imageRng.Width / .Width) / 2
  16. .Height = .Height * imageRng.Width / .Width
  17. .Width = imageRng.Width
  18. End If
  19. End With
  20. End If
  21. Next
  22. End Sub
● 版权所有,转载请注明出处!
正文完
 0
挨批网络ipwl.cn
版权声明:本站原创文章,由 挨批网络ipwl.cn 2023-02-26发表,共计3366字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。

关于挨批网络

挨批网络IPWL.CN挨批网络是通过域名直译而来,主打一个好记!希望只一眼就可以留在你的记忆中!
评论(没有评论)
没有账号? 忘记密码?

社交账号快速登录