简介

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 RangeFor 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 IfNextEnd Sub

开发工具-宏-执行:

执行后果:

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

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

'charset GB2312 . Excel 中的图片链接转为图片文件Attribute VB_Name = "LoadImage"Sub LoadImage()Dim HLK As Hyperlink, Rng As RangeFor 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 IfNextEnd 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 IfEnd 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 IfNextEnd Sub