2012-02-08 29 views
5

Pracuję nad arkuszem kalkulacyjnym programu Excel, który po wybraniu wartości pola rozwijanego spowoduje wyświetlenie obrazu, a jeśli zostanie wybrana inna wartość, ukryje bieżące obraz i wyskakuje obraz związany z zaznaczeniem. Znalazłem kilka metod, które są po prostu zbyt czasochłonne przy użyciu tylko arkusza i pozycjonowania obrazu przy użyciu współrzędnych; to nie jest dokładnie ta sama droga, którą chciałbym wybrać. Zrobiłem sporo badań przed użyciem StackOverflow i nic nie działało do tej pory. Poniżej jest to, co próbuję osiągnąć. Próbuję zachować wszystkie obrazy w arkuszu kalkulacyjnym, co dodaje kolejny poziom wyzwania, ale uważam, że jest sposób, aby to zrobić, ponieważ program Excel przydziela obrazowi numer po wstawieniu EX. Zdjęcie 9.(Excel VBA) Jeśli wartość komórki jest równa "" Następnie pokaż/ukryj obrazy

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

    Picture1 show 

    Picture2 hide 

    End If 
End Sub 

Każda pomoc jest bardzo doceniana. Dzięki

Odpowiedz

5

Zamiast ukrywać/przesuwać/zmniejszać rozmiar niechcianego zdjęcia, dlaczego nie po prostu go usunąć?

Logika: Zapisz wszystkie swoje zdjęcia w arkuszu tymczasowym. Jeśli kiedykolwiek zostanie pokazane odpowiednie zdjęcie, pobierz je z arkusza tymczasowego i usuń poprzednie.

Oto przykład.

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 

Migawka arkusza temp

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 

Poręczna wskazówka: zapisz makro i spójrz na kod, który generuje!

+0

to zrobić sam, ale nigdy nie myślał tylko kurczyć to nic dzięki za rozwiązanie zamiar spróbować go teraz –

+0

Nie traf na tamtym pozwala jedynie na jednym obrazie nie można zrobić wiele zdjęć. Miałem nadzieję, że za pomocą wartości komórki można kontrolować, jaki obraz jest wyświetlany. –

0

Może być lepiej po prostu przenieść zdjęcia "poza ekranem", szczególnie jeśli mają one różne rozmiary.

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

Tutaj jest rozwiązanie wykorzystujące właściwość Visible obiektu. Użyłem tego do pokazania obrazu na podstawie wartości w polu. Pole miało formułę, która powodowała "dobre" lub "złe". Jeśli jego wartość była "dobra", chciałem pokazać jedno zdjęcie; dla "złego", powinien pokazać inny obraz; i nigdy nie powinny pokazywać się w tym samym czasie. Pole potrzebne do zaktualizowania jego wartości za każdym razem, gdy użytkownik odświeży tabelę przestawną, dlatego wstawiam kod w tej metodzie arkusza roboczego, w którym ma się pojawiać tabela przestawna i obraz.

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

Bardzo przydatne, dziękuję. – JCO9

Powiązane problemy