2012-04-16 3 views
6

Я пытаюсь использовать VBA для автоматизации функции «Изменить изображение», когда вы щелкните правой кнопкой мыши по форме в Excel/Word/Powerpoint.Использование VBA для изменения Picture

Тем не менее, я не могу найти никакой ссылки, вы можете помочь?

+0

Пробовали ли вы использовать магнитофон и проверять, что такое автоматический код? – assylias

+0

@assylias это один из немногих рекордеров действий, который не записывает –

+0

@chrisneilsen достаточно честно - я не знал. – assylias

ответ

7

Насколько я знаю, вы не можете изменить источник картины, вам нужно удалить старый и вставить новый один

Вот начало

strPic ="Picture Name" 
Set shp = ws.Shapes(strPic) 

'Capture properties of exisitng picture such as location and size 
With shp 
    t = .Top 
    l = .Left 
    h = .Height 
    w = .Width 
End With 

ws.Shapes(strPic).Delete 

Set shp = ws.Shapes.AddPicture("Y:\our\Picture\Path\And\File.Name", msoFalse, msoTrue, l, t, w, h) 
shp.Name = strPic 
shp.ScaleHeight Factor:=1, RelativeToOriginalSize:=msoTrue 
shp.ScaleWidth Factor:=1, RelativeToOriginalSize:=msoTrue 
+0

Привет, Крис, я тоже думал об этом, когда речь заходит о Shadow, Contrast, Brightness, я даже не могу изменить их свойства, это даст мне ошибки, такие как копирование свойства со старого изображения на новое изображение. Но, я могу программно, как Shadow.Blur = 30, но если я скажу NewPic.Shadow.Blur = OldPic.Shadow.Blur, я получаю ошибки. – PlayKid

+0

Либо запишите свойства старого изображения в переменных перед его удалением или оставьте изображение на месте, когда вы скопируете его свойства, запишите его z-порядок, затем удалите его и переместите новое изображение обратно в исходный код z –

+0

1up так как я не могу найти код для изменения изображения :(так что я, хотя это единственный способ, но это не имеет никакого смысла. Microsoft :( –

7

Вы можете измените источник изображения с использованием метода UserPicture применительно к форме прямоугольника. Однако вам нужно будет изменить размер прямоугольника соответственно, если вы хотите сохранить исходное соотношение сторон изображения, так как на картинке будут отображаться размеры прямоугольника.

В качестве примера:

ActivePresentation.Slides(2).Shapes(shapeId).Fill.UserPicture ("C:\image.png") 
+3

Технически это добавляет заливку в форму, а заливка не будет быть видимым, если ваша фигура - это изображение. – rgmatthes

+0

Хорошо работает в excel –

0

Что я сделал в прошлом, это создать несколько элементов управления изображения на форму и положите их друг на друга. Затем вы программно устанавливаете все изображения .visible = false, кроме тех, которые вы хотите показать.

1

В Word 2010 VBA это помогает изменить параметр .visible для этого элемента изображения, который вы хотите изменить.

  1. установить .Visible к ложному изменению
  2. картину
  3. установить .visilbe истинной

, который работал для меня.

0

то, что я делаю, лежит на обоих изображениях поверх каждого другого и назначает макрос ниже для обоих изображений. Очевидно, я назвал изображения «lighton» и «lightoff», поэтому убедитесь, что вы изменили их на свои изображения.

Sub lightonoff() 

If ActiveSheet.Shapes.Range(Array("lighton")).Visible = False Then 
    ActiveSheet.Shapes.Range(Array("lighton")).Visible = True 
     Else 
    ActiveSheet.Shapes.Range(Array("lighton")).Visible = False 
    End If 

End Sub 
1
'change picture without change image size 
Sub change_picture() 
strPic = "Picture 1" 
Set shp = Worksheets(1).Shapes(strPic) 

'Capture properties of exisitng picture such as location and size 
With shp 
    t = .Top 
    l = .Left 
    h = .Height 
    w = .Width 
End With 

Worksheets(1).Shapes(strPic).Delete 

Set shp = Worksheets(1).Shapes.AddPicture("d:\pic\1.png", msoFalse, msoTrue, l, t, w, h) 
shp.Name = strPic 

End Sub 
0

я использую этот код:

Sub changePic(oshp As shape) 
    Dim osld As Slide 
    Set osld = oshp.Parent 
    osld.Shapes("ltkGambar").Fill.UserPicture (ActivePresentation.Path & "\" & oshp.Name & ".png") 
End Sub 
+0

, который был для powerpoint – Yeera

+0

, и это было для левого клика, а не щелчка правой кнопкой мыши, coz в powerpoint есть только щелчок мышью и мышкой – Yeera

+0

, если у вас все еще требуется щелчок правой кнопкой мыши, Я еще не найду решение – Yeera

0

Я работаю в Excel и VBA. Я не могу накладывать изображения, потому что у меня есть несколько листов с переменным номером, и на каждом листе есть изображения, поэтому файл станет огромным, если, скажем, 20 листов имеют все 5 изображений, которые я хочу оживить.

Таким образом, я использовал комбинацию этих приемов, перечисленных здесь: 1) Я вставил форму RECTANGLE на месте и размер я хотел:

ActiveSheet.Shapes.AddShape(msoShapeRectangle, 1024#, 512#, 186#, 130#).Select 
Selection.Name = "SCOTS_WIZARD" 
With Selection.ShapeRange.Fill 
    .Visible = msoTrue 
    .UserPicture "G:\Users\ScotLouis\Documents\My Spreadsheets\WordFind Wizard\WordFind Wizard 1.jpg" 
    .TextureTile = msoFalse 
End With 

2) Теперь для анимации (изменить) картину, я только нужно изменить Shape.Fill.UserPicture:

ActiveSheet.Shapes("SCOTS_WIZARD").Fill.UserPicture _ 
    "G:\Users\ScotLouis\Documents\My Spreadsheets\WordFind Wizard\WordFind Wizard 2.jpg" 

так что я достиг своей цели только имея 1 изображение в листе (не 5, как и в моей анимации) и тиражирование лист только дублирует активного изображения, поэтому анимация продолжается без проблем со следующего p icture.