简介
VBA(Visual Basic for Applications)是附丽在应用程序(例如 Excel)中的 VB 语言。只有你装置了 Office Excel 就主动默认装置了 VBA,同样 Word 和 PowerPoint 也能调用 VBA 对软件进行二次开发而让一些特地简单的操作“脚本化”。
如何关上 VBA
1. 关上”开发工具“性能(首次应用 VBA)
如果你是第一次应用 VBA,须要关上“开发工具”性能。
Window:文件——选项——自定义功能区——勾选开发工具
Mac:Excel——偏好设置——视图
2. 关上 VBA 的三种形式
2.1 开发工具——VisualBasic
2.2 ALT+F11 快捷键
2.3 右键 sheet 页查看代码
3. VBA 界面
一个简略的 VBA 程序
大部分程序入门都会写一个代码输入“Hello World”,咱们写第一个程序 在选定的单元格输入本人的昵称。
Sub 插入文字() 'sub 定义一个过程
Selection.Value = "TOMOCAT" ' 代码块
End Sub ' 完结一个过程
1. 新建模块
模块不便咱们导出代码用于其余的 Excel,所以养成良好的编程习惯插入模块。
2. 在指定区域写代码
3. 执行代码
上面三种办法实现的性能雷同,毋庸太纠结,抉择最不便的即可。
- F5 执行
- 运行选项卡
- 运行按钮
一点小倡议——应用“立刻窗口”
如果你用过 Rstudio 写 R 代码或者 Spyder 写 Python 代码的话,“立刻窗口”相似于控制台,能提醒代码编译谬误和进行实时计算。
1. 关上“立刻窗口
视图——立刻窗口
2. 在立刻窗口输出代码间接作用于 excel
选中一个单元格,而后在立刻窗口输出代码(不用定义 Sub 过程),敲击回车键执行:
能够看到执行后被选中的单元格呈现了你的昵称,到此为止你曾经实现了第一个 VBA 程序。
实例:将 URL 转化成图片
1. 背景形容
当初 excel 中有多个图片链接,咱们心愿将这些链接都转成图片。
2. 办法一:同时保留链接和图片
开发工具——Visual Basic(或者 ALT+F11 快捷键)进入 VB 界面,而后双击 sheet1 按钮关上 VB 编程窗口:
输出如下代码并保留:
Sub loadimage()
Dim HLK As Hyperlink, Rng As Range
For Each HLK In ActiveSheet.Hyperlinks ' 循环流动工作表中的各个超链接
If HLK.Address Like "*.jpg" Or HLK.Address Like "*.gif" Or HLK.Address Like "*.png" Then ' 如果链接的地位是 jpg 或 gif 图片(此处仅针对此两种图片类型, 更多类型能够通过建设数组或字典或正则来判断)
Set Rng = HLK.Parent.Offset(, 1) ' 设定插入指标图片的地位
With ActiveSheet.Pictures.Insert(HLK.Address) ' 插入链接地址中的图片
If .Height / .Width > Rng.Height / Rng.Width Then ' 判断图片纵横比与单元格纵横比的比值以确定针对单元格缩放的比例
.Top = Rng.Top
.Left = Rng.Left + (Rng.Width - .Width * Rng.Height / .Height) / 2
.Width = .Width * Rng.Height / .Height
.Height = Rng.Height
Else
.Left = Rng.Left
.Top = Rng.Top + (Rng.Height - .Height * Rng.Width / .Width) / 2
.Height = .Height * Rng.Width / .Width
.Width = Rng.Width
End If
End With
End If
Next
End Sub
开发工具 - 宏 - 执行:
执行后果:
2. 删除链接只保留图片(插入 VB 脚本形式)
新建记事本保留以下代码另存为 .bas
格局:
'charset GB2312 . Excel 中的图片链接转为图片文件
Attribute VB_Name = "LoadImage"
Sub LoadImage()
Dim HLK As Hyperlink, Rng As Range
For Each HLK In ActiveSheet.Hyperlinks ' 循环流动工作表中的各个超链接
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 图片(此处仅针对此两种图片类型, 更多类型能够通过建设数组或字典或正则来判断)
Set Rng = HLK.Parent.Offset(, 0) ' 设定插入指标图片的地位
With ActiveSheet.Pictures.Insert(HLK.Address) ' 插入链接地址中的图片
If .Height / .Width > Rng.Height / Rng.Width Then ' 判断图片纵横比与单元格纵横比的比值以确定针对单元格缩放的比例
.Top = Rng.Top
.Left = Rng.Left + (Rng.Width - .Width * Rng.Height / .Height) / 2
.Width = .Width * Rng.Height / .Height
.Height = Rng.Height
Else
.Left = Rng.Left
.Top = Rng.Top + (Rng.Height - .Height * Rng.Width / .Width) / 2
.Height = .Height * Rng.Width / .Width
.Width = Rng.Width
End If
End With
HLK.Parent.Value = "" ' 删除单元格的图片链接
End If
Next
End Sub
在 VB 界面右键 sheet 页抉择导入文件:
执行成果:
3. 被动抉择是否关上图片
同办法 1,然而须要抉择申明为BeforeRightClick
,设置为右键时触发:
With Target
If Left(.Value, 7) = "http://" Then '如果单元格内容为网址' 增加网络图片,并设置为图片大小地位随单元格变动而变动
ActiveSheet.Shapes.AddPicture(.Value, msoCTrue, msoCTrue, .Left, .Top, .Width, .Height).Placement = xlMoveAndSize
.WrapText = True ' 单元格设置为主动换行,以暗藏网址
End If
End With
执行宏后右击单元格就能够展现图片。
4. 补充
如果你的 Excel 未能正确将网址辨认成超链接,能够应用如下代码:
Sub loadimage()
Dim ranTotal As Range, rng As Range, imageRng As Range ' 设定三个 Range 变量
Set rngTotal = Range("o:o") ' 选中寄存网址的 o 列
For Each rng In rngTotal ' 遍历所有的 o 列单元格
If Left(rng.Value, 7) = "http://" Then ' 如果单元格内容为网址
Set imageRng = rng.Offset(, 1) ' 寄存图片的地址
With ActiveSheet.Pictures.Insert(rng.Value)
If .Height / .Width > imageRng.Height / imageRng.Width Then ' 判断图片纵横比与单元格纵横比的比值以确定针对单元格缩放的比例
.Top = imageRng.Top
.Left = imageRng.Left + (imageRng.Width - .Width * imageRng.Height / .Height) / 2
.Width = .Width * imageRng.Height / .Height
.Height = imageRng.Height
Else
.Left = imageRng.Left
.Top = imageRng.Top + (imageRng.Height - .Height * imageRng.Width / .Width) / 2
.Height = .Height * imageRng.Width / .Width
.Width = imageRng.Width
End If
End With
End If
Next
End Sub