有时候第一列有2个或者以上的图片,输出的时候,有的图片就不输出了,想要输出,以第三列的iten no为名称,重复的就在后面加个(1)或者字母a
时间:2011-11-04
来源:互联网
Sub PicOutput()
OpenFile = Application.GetOpenFilename("请选择任一文件后按确定(*.*),*.*", , "选择任一文件确定图片输出文件夹,或取消获得当前文件所在文件夹。")
If OpenFile = False Then
myDir = ThisWorkbook.Path & "\"
Else
myDir = Left(OpenFile, InStrRev(OpenFile, "\"))
End If
k = InputBox("1=列左,2=列右,3=上一行,4=下一行,取消=图片所在单元格或无名称", "选择图片名称位置:", 2)
If k = 1 Then
r = 0: c = -1
ElseIf k = 2 Then
r = 0: c = 2
ElseIf k = 3 Then
r = -1: c = 0
ElseIf k = 4 Then
r = 1: c = 0
End If
k = MsgBox("Yes=按原尺寸,No=按新设定,Cancel=按现在显示", vbYesNoCancel, "输出图片尺寸大小选择")
For Each p In ActiveSheet.Shapes
ph = p.Height
pw = p.Width
On Error Resume Next
pn = p.TopLeftCell.Offset(r, c).Value
If Err.Number <> 0 Then Err.Clear
If pn = "" Then n = n + 1: pn = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & Format(n, "000")
GetPicName:
On Error Resume Next
p.Name = pn & ".jpg"
'If Err.Number <> 0 Then
' p.Name = pn & 1 & ".jpg"
'End If
p.Select
If k = vbYes Then
Selection.Copy
ActiveSheet.PasteSpecial Format:="图片 (JPEG)" '英文版为"Picture (JPEG)"
Selection.Name = "myPic"
ElseIf k = vbNo Then
Selection.ShapeRange.LockAspectRatio = msoFalse
f = InputBox("放大缩小比率", "图片尺寸设定", 2)
If IsNumeric(f) And f > 0 Then
Selection.ShapeRange.Height = ph * f
Selection.ShapeRange.Width = pw * f
Else
Selection.ShapeRange.Height = InputBox("重新设定图片高度", "图片高尺寸设定", ph)
Selection.ShapeRange.Width = InputBox("重新设定图片宽度", "图片宽尺寸设定", pw)
End If
End If
Selection.CopyPict
With ActiveSheet.ChartObjects.Add(0, 0, Selection.Width + 5, Selection.Height + 5).Chart
.Paste
.Export myDir & p.Name, "JPG"
.Parent.Delete
End With
If k = vbYes Then
ActiveSheet.Shapes("myPic").Delete
ElseIf k = vbNo Then
p.Height = ph
p.Width = pw
End If
p.TopLeftCell.Offset(, -1).Select
Next
End Sub
OpenFile = Application.GetOpenFilename("请选择任一文件后按确定(*.*),*.*", , "选择任一文件确定图片输出文件夹,或取消获得当前文件所在文件夹。")
If OpenFile = False Then
myDir = ThisWorkbook.Path & "\"
Else
myDir = Left(OpenFile, InStrRev(OpenFile, "\"))
End If
k = InputBox("1=列左,2=列右,3=上一行,4=下一行,取消=图片所在单元格或无名称", "选择图片名称位置:", 2)
If k = 1 Then
r = 0: c = -1
ElseIf k = 2 Then
r = 0: c = 2
ElseIf k = 3 Then
r = -1: c = 0
ElseIf k = 4 Then
r = 1: c = 0
End If
k = MsgBox("Yes=按原尺寸,No=按新设定,Cancel=按现在显示", vbYesNoCancel, "输出图片尺寸大小选择")
For Each p In ActiveSheet.Shapes
ph = p.Height
pw = p.Width
On Error Resume Next
pn = p.TopLeftCell.Offset(r, c).Value
If Err.Number <> 0 Then Err.Clear
If pn = "" Then n = n + 1: pn = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1) & Format(n, "000")
GetPicName:
On Error Resume Next
p.Name = pn & ".jpg"
'If Err.Number <> 0 Then
' p.Name = pn & 1 & ".jpg"
'End If
p.Select
If k = vbYes Then
Selection.Copy
ActiveSheet.PasteSpecial Format:="图片 (JPEG)" '英文版为"Picture (JPEG)"
Selection.Name = "myPic"
ElseIf k = vbNo Then
Selection.ShapeRange.LockAspectRatio = msoFalse
f = InputBox("放大缩小比率", "图片尺寸设定", 2)
If IsNumeric(f) And f > 0 Then
Selection.ShapeRange.Height = ph * f
Selection.ShapeRange.Width = pw * f
Else
Selection.ShapeRange.Height = InputBox("重新设定图片高度", "图片高尺寸设定", ph)
Selection.ShapeRange.Width = InputBox("重新设定图片宽度", "图片宽尺寸设定", pw)
End If
End If
Selection.CopyPict
With ActiveSheet.ChartObjects.Add(0, 0, Selection.Width + 5, Selection.Height + 5).Chart
.Paste
.Export myDir & p.Name, "JPG"
.Parent.Delete
End With
If k = vbYes Then
ActiveSheet.Shapes("myPic").Delete
ElseIf k = vbNo Then
p.Height = ph
p.Width = pw
End If
p.TopLeftCell.Offset(, -1).Select
Next
End Sub
作者: fh321123 发布时间: 2011-11-04
菜鸟求教!大家帮帮忙!
作者: fh321123 发布时间: 2011-11-04
该回复于2011-11-04 11:39:52被管理员删除
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
|
#3楼 得分:0回复于:2011-11-04 12:07:05
|
作者: jhpirate5214 发布时间: 2011-11-04
不好意思 请把excel附件 发来 还有我的操作系统是日文的 ~
作者: jhpirate5214 发布时间: 2011-11-04
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28