Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4726|回复: 1

[已解决]vba 删除某行某列的图片

[复制链接]
发表于 2013-2-22 14:17 | 显示全部楼层 |阅读模式
  1. Sub insertPic()
  2. '
  3. '删除已有图片
  4.     Dim S1 As Shape '声明变量 as后 变量类型
  5.     For Each S1 In ActiveSheet.Shapes 'ActiveSheet 代表活动工作簿中的,或者指定的窗口或工作簿中的活动工作表(最上面的工作表)。
  6.       If S1.Type <> 8 Then 'type属性返回图表类型
  7.       S1.Delete
  8.       End If
  9.     Next S1
  10.    
  11. '插入图片
  12.     '直接获取某列的值
  13.     'imgWidth = Range("A2")
  14.     'imgHeight = Range("B2")
  15.     'hColumn = Range("C2")
  16.     'imgPath = Range("D2")
  17.    
  18.     'imgWidth = InputBox("请输入一个,大于等于1 数字", "设置图片插入列的列宽", 20)
  19.     'imgHeight = InputBox("请输入一个,大于等于1 数字", "设置图片插入行的行高", 40)
  20.     'hColumn = InputBox("请输入插入图片的所在列", "设置图片插入所在列的列数(大于等于 1 的整数)", 11)
  21.    
  22.     '通过自定义窗体获取数据
  23.     imgWidth = imgSetting.ColumnWidth.Text
  24.     imgHeight = imgSetting.RowHeight.Text
  25.     hColumn = imgSetting.ColumnC.Text
  26.     imgPath = imgSetting.imgPath.Text
  27.     imgRow = imgSetting.imgRow.Text
  28.    
  29.     If Trim(hColumn) <> "" And Trim(imgWidth) <> "" And Trim(imgHeight) <> "" And Trim(imgPath) <> "" And Trim(imgRow) <> "" Then
  30.         'Fix 函数返回参数的整数部分
  31.         If IsNumeric(hColumn) = True And IsNumeric(imgWidth) = True And IsNumeric(imgHeight) = True And hColumn >= 1 And imgWidth >= 1 And imgHeight >= 1 And IsNumeric(imgRow) = True And imgRow >= 1 And InStr(imgPath, "") > 0 Then
  32.             If hColumn - Fix(hColumn) = 0 And imgRow - Fix(imgRow) = 0 Then
  33.                 imgWidth = CDbl(imgWidth)
  34.                 imgHeight = CDbl(imgHeight)
  35.                 hColumn = CInt(hColumn)
  36.                 Dim i As Integer
  37.                 Dim FilPath As String
  38.                 Dim rng As Range
  39.                 Dim S As String
  40.                 S = ""
  41.                 With Sheet1
  42.                     For i = 2 To .Range("a65536").End(xlUp).Row '查找A列从65536位置的单元格起,向上查找,直到找到最后一个非空单元格为止,并显示其行号
  43.                         If Trim(Cells(i, 1).Text) <> "" Then
  44.                             'FilPath = ThisWorkbook.Path & "\photos" & .Cells(i, 1).Text & ".jpg"
  45.                             FilPath = imgPath & .Cells(i, 1).Text & ".jpg"
  46.                             If Dir(FilPath) <> "" Then
  47.                               
  48.                                .Pictures.Insert(FilPath).Select '选中
  49.                                 Set rng = .Cells(i, hColumn)
  50.                                 With Selection  '当前的选择对象
  51.                                     ActiveSheet.Rows(i).RowHeight = imgHeight '调整行高适合图片大小 Selection.ShapeRange.Height * imgHeight
  52.                                     'MsgBox ActiveSheet.Rows(i).RowHeight
  53.                                     ActiveSheet.Columns(hColumn).ColumnWidth = imgWidth '粗略调整列宽适合图片大小 Selection.ShapeRange.Width * imgWidth
  54.                                     .Top = rng.Top + 1
  55.                                     .Left = rng.Left + 2
  56.                                     .Width = rng.Width
  57.                                     .Height = rng.Height
  58.                                 End With
  59.                             Else
  60.                                 S = S & Chr(10) & .Cells(i, 1).Text
  61.                             End If
  62.                         End If
  63.                     Next
  64.                     
  65.                     .Cells(hColumn, i).Select
  66.                 End With
  67.                 If S <> "" Then
  68.                     MsgBox S & Chr(10) & "没有照片"
  69.                 End If
  70.              Else
  71.                 MsgBox "输入有误"
  72.              End If
  73.         Else
  74.             MsgBox "输入有误"
  75.         End If
  76.     Else
  77.         MsgBox "输入有误"
  78.     End If
  79. End Sub
复制代码
上面代码中的删除图片把所有图片都给删除了,现在想根据 hColumn 这个变量的所指列删除本列的图片,怎么删除呀?
最佳答案
2013-2-22 14:59
可以判断一下 每个 S1.left 是否大于插入列的Left坐标 并且 S1的右坐标及(S1.left+S1.width)的值是否 小于 插入列的left坐标+列宽, 如果满足条件,则删除即可.
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-2-22 14:59 | 显示全部楼层    本楼为最佳答案   
可以判断一下 每个 S1.left 是否大于插入列的Left坐标 并且 S1的右坐标及(S1.left+S1.width)的值是否 小于 插入列的left坐标+列宽, 如果满足条件,则删除即可.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-15 13:43 , Processed in 0.251842 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表