一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

VBA常用小代碼402:按指定名稱批量將圖片插入到Excel工作表中

 L羅樂 2018-04-25

先說個(gè)事啊,近段時(shí)間會(huì)忙于《Excel 2016 VBA實(shí)戰(zhàn)技巧精粹》的書稿準(zhǔn)備工作,公眾號(hào)系列文章的推文會(huì)緩慢很多,比如VBA ADO SQL基礎(chǔ)教程以及新手學(xué)Excel入門系列等,握爪抱歉~

我們今天分享的內(nèi)容是按指定名稱和位置批量將圖片插入到Excel工作表中……這個(gè)問題后臺(tái)提問的朋友太多了,趕緊分享了事。

看個(gè)動(dòng)畫先:

代碼如下:

Sub InsertPic()

    'ExcelHome VBA編程學(xué)習(xí)與實(shí)踐 by:看見星光

    Dim Arr, i&, k&, n&, pd&

    Dim PicName$, PicPath$, FdPath$, shp As Shape

    Dim Rng As Range, Cll As Range, Rg As Range, book$

    'On Error Resume Next

    '用戶選擇圖片所在的文件夾

    With Application.FileDialog(msoFileDialogFolderPicker)

        .AllowMultiSelect = False '不允許多選

       If .Show Then FdPath = .SelectedItems(1) Else: Exit Sub

    End With

    If Right(FdPath, 1) <> '\' Then FdPath = FdPath & '\'

    Set Rng = Application.InputBox('請(qǐng)選擇圖片名稱所在的單元格區(qū)域', Type:=8)

    '用戶選擇需要插入圖片的名稱所在單元格范圍

    Set Rng = Intersect(Rng.Parent.UsedRange, Rng)

    'intersect語句避免用戶選擇整列單元格,造成無謂運(yùn)算的情況

    If Rng Is Nothing Then MsgBox '選擇的單元格范圍不存在數(shù)據(jù)!': Exit Sub

    book = InputBox('請(qǐng)輸入圖片偏移的位置,例如上1、下1、左1、右1', , '右1')

    '用戶輸入圖片相對(duì)單元格的偏移位置。

    If Len(book) = 0 Then Exit Sub

    x = Left(book, 1) '偏移的方向

    If InStr('上下左右', x) = 0 Then MsgBox '你未輸入偏移方位。': Exit Sub

    y = Val(Mid(book, 2)) '偏移的尺寸

    Select Case x

        Case '上'

        Set Rg = Rng.Offset(-y, 0)

        Case '下'

        Set Rg = Rng.Offset(y, 0)

        Case '左'

        Set Rg = Rng.Offset(0, -y)

        Case '右'

        Set Rg = Rng.Offset(0, y)

    End Select

    Application.ScreenUpdating = False

    Rng.Parent.Select

    For Each shp In ActiveSheet.Shapes '如果舊圖片存放在目標(biāo)圖片存放范圍則刪除

        If Not Intersect(Rg, shp.TopLeftCell) Is Nothing Then shp.Delete

    Next

    x = Rg.Row - Rng.Row: y = Rg.Column - Rng.Column

    '偏移的坐標(biāo)

    Arr = Array('.jpg', '.jpeg', '.bmp', '.png', '.gif')

    '用數(shù)組變量記錄五種文件格式

    For Each Cll In Rng

    '遍歷選擇區(qū)域的每一個(gè)單元格

        PicName = Cll.Text '圖片名稱

        If Len(PicName) Then '如果單元格存在值

            PicPath = FdPath & PicName '圖片路徑

            pd = 0 'pd變量標(biāo)記是否找到相關(guān)圖片

            For i = 0 To UBound(Arr)

            '由于不確定用戶的圖片格式,因此遍歷圖片格式

                If Len(Dir(PicPath & Arr(i))) Then

                '如果存在相關(guān)文件

                    ActiveSheet.Pictures.Insert(PicPath & Arr(i)).Select

                    '插入圖片并選中

                    With Selection

                        .ShapeRange.LockAspectRatio = msoFalse

                        '撤銷鎖定縱橫比

                        .Top = Cll.Offset(x, y).Top 5

                        .Left = Cll.Offset(x, y).Left 5

                        .Height = Cll.Offset(x, y).Height - 10 '圖片高度

                        .Width = Cll.Offset(x, y).Width - 10 '圖片寬度

                    End With

                    pd = 1 '標(biāo)記找到結(jié)果

                    n = n 1 '累加找到結(jié)果的個(gè)數(shù)

                    [a1].Select: Exit For '找到結(jié)果后就可以退出文件格式循環(huán)

                End If

            Next

            If pd = 0 Then k = k 1 '如果沒找到圖片累加個(gè)數(shù)

        End If

    Next

    MsgBox '共處理成功' & n & '個(gè)圖片,另有' & k & '個(gè)非空單元格未找到對(duì)應(yīng)的圖片。'

    Application.ScreenUpdating = True

End Sub

代碼已有注釋,這兒就再說明一下運(yùn)行過程。

首先,會(huì)讓用戶選擇存放圖片的文件夾。注意是選擇文件夾,不是選擇圖片;選擇文件夾后,看不到文件夾內(nèi)的圖片是正?,F(xiàn)象。

然后,選擇圖片名稱存放的單元格區(qū)域,可以選擇整列、多列、整行或多行,比如示例動(dòng)畫中的B:D列,2:2行等。。

最后,設(shè)置圖片相對(duì)于圖片名稱所在的單元格便宜的位置;比如圖片名稱在B列,圖片放在C列,那就是向右偏移1列,即右1。上下左右代表了方向,數(shù)字代表偏移的量。

代碼繼續(xù)運(yùn)行,先刪除存放于放置圖片單元格范圍的原圖片圖形(如何用代碼刪除指定位置的圖形圖片?這個(gè)問題也不要在后臺(tái)提問了),然后遍歷圖片名稱,根據(jù)偏移位置插入新圖片。

代碼運(yùn)行結(jié)束后會(huì)告之用戶一共成功插入了多少?gòu)垐D片,以及失敗了多少?gòu)?;有朋友說找不到圖片的單元格能否填充顏色作提醒,我想想覺得沒必要啊,就沒做……不要說我懶,認(rèn)真臉。

小貼士:

1,該段小代碼支持一下圖片格式:

'.jpg', '.jpeg', '.bmp', '.png', '.gif'

2,圖片的縱橫比是未鎖定的,如需鎖定,可以注釋掉下句代碼:

.ShapeRange.LockAspectRatio = msoFalse

3,圖片的行高和列寬是由放置圖片的單元格行高和列寬決定的。當(dāng)然,您也可以把代碼稍微修改,設(shè)置固定的圖片行高和列寬,并由圖片的行高和列寬決定單元格的大小。

4,圖片的名稱必須和指定單元格范圍內(nèi)的名稱一致,如果需要模糊匹配,使用DIR函數(shù)搭配通配符的方式即可。

5,還有什么……想不起來了,就先醬紫吧,揮手致安~

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    麻豆印象传媒在线观看| 日韩精品综合福利在线观看| 久久精品亚洲精品一区| 欧美日韩综合在线第一页| 色综合久久中文综合网| 国产成人一区二区三区久久| 东京不热免费观看日本| 欧美中文日韩一区久久| 最好看的人妻中文字幕| 在线观看视频日韩精品 | 亚洲午夜福利不卡片在线| 久久精品亚洲精品国产欧美| 在线观看国产成人av天堂野外| 少妇视频一区二区三区| 国产精品日韩精品最新| 国内精品一区二区欧美| 亚洲国产精品久久综合网 | 国产成人高清精品尤物| 伊人久久五月天综合网| 亚洲国产av国产av| 少妇丰满a一区二区三区| 丰满少妇被粗大猛烈进出视频| 老熟妇乱视频一区二区| 日韩人妻中文字幕精品| 欧美在线视频一区观看| 国产成人精品一区二区三区| 老鸭窝精彩从这里蔓延| 中国黄色色片色哟哟哟哟哟哟| 欧美国产日本免费不卡| 91福利视频日本免费看看| 日本人妻丰满熟妇久久| 日韩和欧美的一区二区三区| 久久精品中文字幕人妻中文| 欧美在线观看视频免费不卡| 国产一区二区三区成人精品| 精品日韩欧美一区久久| 亚洲中文字幕在线观看四区| 国产成人免费高潮激情电| 中文字幕高清免费日韩视频| 黄色污污在线免费观看| 黑色丝袜脚足国产一区二区|