VBA(Visual Basic for Applications)是依附在應用程序(例如Excel)中的VB語言。只要你安裝了Office Excel就自動默認安裝了VBA,一樣Word和PowerPoint也能調用VBA對軟件進行二次開發而讓一些特別複雜的操做「腳本化」。編程
若是你是第一次使用VBA,須要打開「開發工具」功能。數組
Window:文件——選項——自定義功能區——勾選開發工具網絡
Mac:Excel——偏好設置——視圖工具
大部分程序入門都會寫一個代碼輸出「Hello World」,咱們寫第一個程序在選定的單元格輸出本身的暱稱。開發工具
Sub 插入文字() 'sub定義一個過程 Selection.Value = "TOMOCAT" '代碼塊 End Sub '結束一個過程
模塊方便咱們導出代碼用於其餘的Excel,因此養成良好的編程習慣插入模塊。spa
下面三種方法實現的功能相同,無須太糾結,選擇最方便的便可。excel
若是你用過Rstudio寫R代碼或者Spyder寫Python代碼的話,「當即窗口」相似於控制檯,能提示代碼編譯錯誤和進行實時計算。code
視圖——當即窗口圖片
選中一個單元格,而後在當即窗口輸入代碼(沒必要定義Sub過程),敲擊回車鍵執行:開發
能夠看到執行後被選中的單元格出現了你的暱稱,到此爲止你已經完成了第一個VBA程序。
如今excel中有多個圖片連接,咱們但願將這些連接都轉成圖片。
開發工具——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
開發工具-宏-執行:
執行結果:
新建記事本保存如下代碼另存爲.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頁選擇導入文件:
執行效果:
同方法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
執行宏後右擊單元格就能夠展現圖片。
若是你的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