问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Excel VBA,VBA程序代码改变图片内容

发布网友 发布时间:2022-05-02 00:29

我来回答

5个回答

热心网友 时间:2022-06-25 13:59

 1.ALT+F11打开VBE编辑器,新建一个模块1,输入如下代码:

Sub picxz() '以插入图片文件原名称作为图形名称,单元格大小为基准,依次先行方向再列方向插入,即先A1,A2....再B1,B2....依次类推

Dim picname As Variant, p As Shape, pname As String, stly, p1 As Shape, pnamewr As String, x As Byte, x1 As Byte, itop, ileft, iheight, iwidth, l As Long, h As Long

Const hs As Long = 65536 '每列所能插入图片的最大个数

stly = vbQuestion & vbYesNo

l = -Int(-Sheets("图库").Shapes.Count / hs) '列号

h = Sheets("图库").Shapes.Count - (l - 1) * hs '行号

picname = Application.GetOpenFilename(FileFilter:="图片文件 (*.jpg; *.gif;*.bmp),*.jpg; *.gif;*.bmp,所有文件(*.*),*.*", _

       Title:="图片选择", MultiSelect:=False)

If picname <> False Then

pname = Split(Dir(picname), ".", 2)(0) '取图片文件原名称

pnamewr = pname

itop = Sheets("图库").Cells(h, l).Top '确定坐标

ileft = Sheets("图库").Cells(h, l).Left

iheight = Sheets("图库").Cells(h, l).Height '确定大小

iwidth = Sheets("图库").Cells(h, l).Width

For Each p In Sheets("图库").Shapes

 If p.Name = pname Then

 x = MsgBox("发现你的图库中已经存在同名图片,请确定是否为新图片?", stly, "图片重名,警告!")

 If x = 7 Then

 Exit Sub

 Else

x1 = MsgBox("您确定需要替换名为:《" & pname & "》的图片吗?", stly, "图片替换,警告!")

If x1 = 6 Then

itop = Sheets("图库").Shapes(pname).Top

ileft = Sheets("图库").Shapes(pname).Left

iheight = Sheets("图库").Shapes(pname).Height

iwidth = Sheets("图库").Shapes(pname).Width

Sheets("图库").Shapes(pname).Delete

Else

chongshu:

 If pnamewr = "" Then

 pnamewr = InputBox("您尚未对图片命名,需要正确命名,方能插入此图片!", "图片命名")

 Else

 pnamewr = InputBox("您的图库已经存在以《" & pnamewr & "》为名称的图片,需要重新命名,方能插入此图片!", "图片命名")

 End If

 If pnamewr = "" Or pnamewr = pname Then

jinggao:

 MsgBox "警告!输入为空或为同名!请继续输入", vbExclamation, "图片命名警告!"

 GoTo chongshu

 End If

 For Each p1 In Sheets("图库").Shapes

  If p1.Name = pnamewr Then GoTo jinggao

 Next

 End If

 End If

 End If

Next

    ActiveSheet.Pictures.Insert(picname).Select

    With Selection.ShapeRange

     .Name = pnamewr

     .LockAspectRatio = msoFalse

     .Top = itop

     .Left = ileft

     .Height = iheight

     .Width = iwidth

     .Rotation = 0#

    End With

End If

End Sub

 

2新建一个工作表取名为:“图库”。

3左键单击菜单:视图-工具栏-窗体,用窗体工具栏上的按钮控件,在图库工作表,左键拖拉画出一个按钮,名称改为插入图片,指定宏为picxz,然后随机插入几张图片。效果如下:

4 ALT+F11打开VBE编辑器,在ThisWorkbook中粘贴如下代码:

Option Explicit

Const ofsrow As Integer = 0, ofscol As Integer = 1 '插入图片相对单元格的位置,即在ofsrow行、ofscol列,位置插入

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

On Error Resume Next

Dim pic As Shape, rg As Range, flagch As Boolean, rng As Range, flagempty As Boolean, pic1 As Shape, flagcf As Boolean

flagch = True '标记相对应位置是否有对应图片,默认有

flagempty = True '标记相对应位置是否无任何图片,默认是

flagcf = False '标记相对应位置对应图片是否有重复,默认无

Application.ScreenUpdating = False '关闭刷屏

Application.DisplayAlerts = False '关闭警告和消息

Sh.UsedRange.SpecialCells(xlCellTypeFormulas).Select '选中已经编辑且含有公式单元格区域

For Each rg In Selection

 For Each pic In Sh.Shapes

  If InStr(1, pic.Name, "Drop Down") = 0 Then

   If pic.Name <> rg.Value And pic.TopLeftCell.Address = rg.Offset(ofsrow, ofscol).Address Then

    If flagch Then

    flagch = False

    Set rng = rg

    End If

    Set rng = Union(rng, rg)

   End If

  End If

 Next

Next

For Each rg In Selection

 For Each pic In Sh.Shapes

  If InStr(1, pic.Name, "Drop Down") = 0 Then

   If rg.Offset(ofsrow, ofscol).Address = pic.TopLeftCell.Address Then flagempty = False

  End If

 Next

 If flagch And flagempty Then

 Set rng = rg

 flagch = False

 End If

 If flagch = False And flagempty Then Set rng = Union(rng, rg)

 flagempty = True

Next

rng.Select '将无对应图片的相对应位置选中

If flagch = False Then

For Each rg In Selection

 For Each pic In Sheets("图库").Shapes

  If rg.Value = pic.Name And rg.Offset(ofsrow, ofscol).Address <> pic.TopLeftCell.Address Then '在图库找到相对应图片,且相应位置无对应图片,则插入图片

   For Each pic1 In Sh.Shapes

    If InStr(1, pic1.Name, "Drop Down") = 0 Then

     If pic1.TopLeftCell.Address = rg.Offset(ofsrow, ofscol).Address And pic1.Name <> rg.Value Then pic1.Delete '将相对应位置名称不符的图片删除

    End If

   Next

   pic.Copy

   Sh.Select

   rg.Offset(ofsrow, ofscol).Select

   ActiveSheet.Paste

   With Selection.ShapeRange

    .LockAspectRatio = msoFalse

    .Left = rg.Offset(ofsrow, ofscol).Left + rg.Offset(ofsrow, ofscol).Width / 20

    .Top = rg.Offset(ofsrow, ofscol).Top

    .Height = rg.Offset(ofsrow, ofscol).Height

    .Width = rg.Offset(ofsrow, ofscol).Width * 0.95

   End With

   rg.Select

  End If

 Next

 Application.CutCopyMode = False

 For Each pic1 In Sh.Shapes

  If InStr(1, pic1.Name, "Drop Down") = 0 Then

   If pic1.TopLeftCell.Address = rg.Offset(ofsrow, ofscol).Address And pic1.Name = rg.Value And flagcf Then pic1.Delete '对应位置相符但重复的图片删除

   If pic1.TopLeftCell.Address = rg.Offset(ofsrow, ofscol).Address And pic1.Name <> rg.Value Then pic1.Delete '对应位置不符的图片删除

   If pic1.TopLeftCell.Address = rg.Offset(ofsrow, ofscol).Address And pic1.Name = rg.Value And flagcf = False Then flagcf = True

  End If

 Next

 flagcf = False

Next

End If

Application.ScreenUpdating = True '打开刷屏

Application.DisplayAlerts = True '打开警告和消息

End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

On Error Resume Next

Dim flag As Boolean, flag1 As Boolean, p As Shape, rg As Range, rg1 As Range

flag = True '标记对应位置是否已含有相符图片,默认不含有

flag1 = False '标记图库中是否含有相符图片,默认不含有

Application.ScreenUpdating = False '关闭刷屏

Application.DisplayAlerts = False '关闭警告和消息

For Each p In Sh.Shapes

 For Each rg In Target

  If InStr(1, p.Name, "Drop Down") = 0 Then

   If p.TopLeftCell.Address = rg.Offset(ofsrow, ofscol).Address And p.Name = rg.Value Then flag = False

  End If

 Next

Next

For Each p In Sheets("图库").Shapes

 For Each rg In Target

  If InStr(1, p.Name, "Drop Down") = 0 Then

   If p.Name = rg.Value Then flag1 = True

  End If

 Next

Next

For Each rg In Target

 If rg <> False And flag And flag1 Then '图库中找到相符图片且对应位置尚无对应图片,则插入图片

  For Each p In Sh.Shapes

   For Each rg1 In Target

    If InStr(1, p.Name, "Drop Down") = 0 Then

     If p.TopLeftCell.Address = rg1.Offset(ofsrow, ofscol).Address Then p.Delete

    End If

   Next

  Next

  Sheets("图库").Shapes(rg.Value).Copy

  Sh.Select

  rg.Offset(ofsrow, ofscol).Select

  ActiveSheet.Paste

  On Error GoTo err

  If rg.Validation.Type Then '是否含数据有效性

   With Selection.ShapeRange

    .LockAspectRatio = msoFalse

    .Left = rg.Offset(ofsrow, ofscol).Left + rg.Offset(ofsrow, ofscol).Width / 4

    .Top = rg.Offset(ofsrow, ofscol).Top

    .Height = rg.Offset(ofsrow, ofscol).Height

    .Width = rg.Offset(ofsrow, ofscol).Width * 0.75

   End With

  Else

err:

   With Selection.ShapeRange

    .LockAspectRatio = msoFalse

    .Left = rg.Offset(ofsrow, ofscol).Left + rg.Offset(ofsrow, ofscol).Width / 20

    .Top = rg.Offset(ofsrow, ofscol).Top

    .Height = rg.Offset(ofsrow, ofscol).Height

    .Width = rg.Offset(ofsrow, ofscol).Width * 0.95

   End With

  End If

  rg.Select

 End If

Next

Application.CutCopyMode = False

For Each p In Sh.Shapes

 For Each rg In Target

  If InStr(1, p.Name, "Drop Down") = 0 Then

   If p.TopLeftCell.Address = rg.Offset(ofsrow, ofscol).Address And p.Name <> rg.Value Then p.Delete

  End If

 Next

Next

Application.ScreenUpdating = True '打开刷屏

Application.DisplayAlerts = True '打开警告和消息

End Sub

5当更改单元格内容或者因为计算而引起单元格内容变化时,将在对应位置更新图片,最终效果如下:

热心网友 时间:2022-06-25 13:59

可以。

下面以jpg图片为例:

Sub lqxs()

Dim Filename$

Filename = Application.GetOpenFilename("JPG Files (*.jpg), *.jpg", , "请选取文件", , MultiSelect:=False)

If Filename <> "" Then

ActiveSheet.Pictures.Insert (Filename)

End If

ActiveSheet.Shapes(Application.Caller).Select

Selection.Delete

End Sub

热心网友 时间:2022-06-25 14:00

如果图片1,图片2是已经存在Excel的页面中的,
1、要图片1显示图片2可用代码:
Image1.Picture = Image2.Picture
2、要让图片1不显示图片(无签名)可用代码:
Image1.Picture = LoadPicture("")

热心网友 时间:2022-06-25 14:00

既然已经在页面中,那就把不要的隐藏就好了。
ActiveSheet.Shapes("Picture 1").Visible = False

热心网友 时间:2022-06-25 14:01

选择图片1
Selection.InlineShapes.AddPicture FileName:="C:\图片2", LinkToFile:=False, SaveWithDocument:=True
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎样移动手机应用的位置 不戴安全套但没有射精会怀孕吗 青岛哪所学校空乘专业就业率高 属牛的是什么星座1985年 m.xzw.com m.xingzuo360.cn 敏卡·凯利基本信息 想问一下eve用什么船刷古斯塔斯怪比较好?如果能有配置图就更好了... EVE加达里恐惧古斯塔斯小型控制塔一个月要多少燃料块 eve古斯塔斯据点需要打建筑么? 对煮饭手艺好的 应该用什么词语修饰 去哪里搜上海中小学教师招聘信息呢,怎么找都找不到呀,大家来帮帮忙吧... 在Excel里,怎么用VBA编程实现每隔几秒循环更换图片? 用vba如何批量插入图片,公式详解? 国内最早的健康管理公司是哪家? vba 如何打印当前image中的图片? 国内哪个公司做健康管理做得最好 电脑c盘满了,怎么能清理干净。 国内健康管理公司做的好有哪几家?? 国内的比较好的健康管理公司有哪些,统计用,请不要打广告! 有关“快乐幸福美好”的句子。30字左右 什么叫健康管理?目前国内做健康管理的有哪几家大型公司? 美的热水器投诉电话 有哪些公司能提供健康管理? 国内有哪些比较出名的健康管理公司,推荐一下~ Excel中VBA如何区分正常的图片? 目前,国内做健康管理服务的公司有哪些?具体公司名称说下 美的热水器投诉哪里有效 vba 怎么自动插入多个文件夹中的图片? 生活上的成功源于对快乐美好向往的坚持的事例,简短点,四五行左右 中信银行信用卡两张,都不想用了,可以去柜台消卡吗,电话消卡我知道,两张可以一起消吗 美好向往的唯美句子 excel 用VBA做图片另存为按钮? VBA excel 查找图片文件夹下的图片文件,并打开。 Excel VBA 将图片保存到本地文件夹 税局里大堂报税员工作内容主要是什么? 《夏洛的网》好词好句摘抄有哪些? 发票金额大于报税金额怎么处理 夏洛的网好句赏析 报税:铺租大于报税金额 如果营业收入大于税务申报应该怎么写文字澄清 河北龙山交大报税软件怎么升级 《夏洛的网》好词好句 夏洛的网好句30字好段30以上及赏析30字 香港签订的股权转让协议可用于大陆报税的凭证吗 信息采集人数大于申报个税人数可以吗?还是采集几个就得报几个人 《夏洛的网》好词好句赏析 夏洛的网.好词好句 夏洛的网所有好句 夏洛的网第三章好词好句? 如果有大笔钱进帐如何报税 夏洛的网好词好句及感悟多一点