[Skill]VBA零基礎入門及實例:批量將連接轉成圖片

簡介

VBA(Visual Basic for Applications)是依附在應用程序(例如Excel)中的VB語言。只要你安裝了Office Excel就自動默認安裝了VBA,一樣Word和PowerPoint也能調用VBA對軟件進行二次開發而讓一些特別複雜的操做「腳本化」。編程

如何打開VBA

1. 打開」開發工具「功能(首次使用VBA)

若是你是第一次使用VBA,須要打開「開發工具」功能。數組

Window:文件——選項——自定義功能區——勾選開發工具網絡

Mac:Excel——偏好設置——視圖工具

image.png

image.png

2. 打開VBA的三種方式

2.1 開發工具——VisualBasic

image.png

2.2 ALT+F11快捷鍵
2.3 右鍵sheet頁查看代碼

image.png

3. VBA界面

image.png

一個簡單的VBA程序

大部分程序入門都會寫一個代碼輸出「Hello World」,咱們寫第一個程序在選定的單元格輸出本身的暱稱。開發工具

Sub 插入文字() 'sub定義一個過程
    Selection.Value = "TOMOCAT" '代碼塊
End Sub '結束一個過程

1. 新建模塊

模塊方便咱們導出代碼用於其餘的Excel,因此養成良好的編程習慣插入模塊。spa

image.png

2. 在指定區域寫代碼

image.png

3.執行代碼

下面三種方法實現的功能相同,無須太糾結,選擇最方便的便可。excel

  • F5執行
  • 運行選項卡

image.png

  • 運行按鈕

image.png

一點小建議——使用「當即窗口」

若是你用過Rstudio寫R代碼或者Spyder寫Python代碼的話,「當即窗口」相似於控制檯,能提示代碼編譯錯誤和進行實時計算。code

1. 打開「當即窗口

視圖——當即窗口圖片

image.png

2. 在當即窗口輸入代碼直接做用於excel

選中一個單元格,而後在當即窗口輸入代碼(沒必要定義Sub過程),敲擊回車鍵執行:開發

image.png

能夠看到執行後被選中的單元格出現了你的暱稱,到此爲止你已經完成了第一個VBA程序。

實例:將URL轉化成圖片

1. 背景描述

如今excel中有多個圖片連接,咱們但願將這些連接都轉成圖片。

2. 方法一:同時保留連接和圖片

開發工具——Visual Basic(或者ALT+F11快捷鍵)進入VB界面,而後雙擊sheet1按鈕打開VB編程窗口:

image.png

輸入以下代碼並保存:

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

開發工具-宏-執行:

image.png

執行結果:

image.png

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頁選擇導入文件:

image.png

image.png

執行效果:
image.png

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
相關文章
相關標籤/搜索