2012-02-08 6 views
5

Я работаю над таблицей Excel, что при выборе значения выпадающего окна появится изображение, и если будет выбрано другое значение, оно скроет текущее изображение и всплывающее изображение, связанное с выбором. Я нашел несколько методов, которые слишком трудоемки, используя только лист и позиционирование изображения с использованием координат; это не совсем тот маршрут, на который я бы хотел пойти. Я провел довольно много исследований, прежде чем использовать StackOverflow, и пока ничего не работает. Ниже я пытаюсь достичь. Я пытаюсь сохранить все изображения в электронной таблице, что добавляет еще один уровень сложности, но я считаю, что есть способ сделать это, потому что excel присваивает изображению номер при вставке EX. Изображение 9.(Excel VBA) Если значение ячейки равно «» Затем показать/скрыть изображения

Sub Main() 
    If Range(G11).Value = "anything" Then 

    Picture1 show 

    Picture2 hide 

    End If 
End Sub 

Любая помощь с благодарностью. Спасибо

ответ

5

Вместо того, чтобы скрывать/перемещать/уменьшать размер нежелательной картинки, почему бы просто не удалить ее?

Logic: Сохраните все ваши изображения на листе временного доступа. Когда когда-либо должен отображаться соответствующий снимок, извлеките его из временного листа и удалите предыдущий.

Вот пример.

Sub Sample() 
    Select Case Range("G11").Value 
     Case "Picture 1": ShowPicture ("Picture 1") 
     Case "Picture 2": ShowPicture ("Picture 2") 
     Case "Picture 3": ShowPicture ("Picture 3") 
     Case "Picture 4": ShowPicture ("Picture 4") 
    End Select 
End Sub 

Sub ShowPicture(picname As String) 
    '~~> The reason why I am using OERN is because it is much simpler 
    '~~> than looping all shapes and then deleting them. There could be 
    '~~> charts, command buttons and other shapes. I will have to write 
    '~~> extra validation code so that those shapes are not deleted. 
    On Error Resume Next 
    Sheets("Sheet1").Shapes("Picture 1").Delete 
    Sheets("Sheet1").Shapes("Picture 2").Delete 
    Sheets("Sheet1").Shapes("Picture 3").Delete 
    Sheets("Sheet1").Shapes("Picture 4").Delete 
    On Error GoTo 0 

    Sheets("Temp").Shapes(picname).Copy 

    '<~~ Alternative to the below line. You may re-position the image 
    '<~~ after you paste as per your requirement 
    Sheets("Sheet1").Range("G15").Select 

    Sheets("Sheet1").Paste 
End Sub 

Снимок Темп листа

enter image description here

0
Sub hidePicture(myImage) 
    ActiveSheet.Shapes.Range(Array(myImage)).Select 
    Selection.ShapeRange.Height = 0 
    Selection.ShapeRange.Width = 0 
End Sub 

Sub showPicture(myImage) 
    ActiveSheet.Shapes.Range(Array(myImage)).Select 
    Selection.ShapeRange.Height = 200 
    Selection.ShapeRange.Width = 300 
End Sub 

Полезный совет: запишите макрос и посмотрите на код, который он генерирует!

+0

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

+0

Не повезло на том не допускает только одно изображение не может сделать несколько снимков. Я надеялся, что использование значения ячейки будет контролировать, какое изображение показано –

0

Возможно, лучше просто переместить свои фотографии «за кадром», особенно если они имеют разные размеры.

Sub Tester() 
    ShowPicture "Picture 3" 
End Sub 

Sub ShowPicture(PicName As String) 

    Dim s As Shape 
    For Each s In ActiveSheet.Shapes 
     With s 
     .Top = IIf(.Name = PicName, 100, 100) 
     .Left = IIf(.Name = PicName, 100, 1000) 
     End With 
    Next s 

End Sub 
2

Вот решение, используя Visible свойство объекта. Я использовал это, чтобы показать изображение, основанное на значении в поле. Поле имело формулу, которая привела к «хорошему» или «плохому». Если его значение было «хорошим», я хотел показать одну картинку; для «плохого» должна показать другое изображение; и они никогда не должны показывать одновременно. Поле должно обновлять его значение всякий раз, когда пользователь обновляет сводную таблицу, поэтому я помещаю код в этот метод рабочего листа, где должна отображаться сводная таблица и изображение.

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) 
'hide both pictures by loopng through all the shapes on the sheet 
Dim s As Shape 
For Each s In ActiveSheet.Shapes 
'hide the shape if it is a picture, leave other shapes on the page visible. 
If s.Type = msoPicture Then s.Visible = msoFalse 
Next 

Dim judgement As String 
'The field whose value tells what picture to use is a one-cell named range called "judgement" 
judgement = Range("judgement") 

'you need to know which picture is which. 
If judgement = "Good" Then ActiveSheet.Shapes("Picture 8").Visible = True 
If judgement = "Bad" Then ActiveSheet.Shapes("Picture 1").Visible = True 

End Sub 
+0

Довольно полезно, спасибо. – JCO9

Смежные вопросы