Als je de tags [code=vb] en [⁄code] gebruikt komen er leuke kleurtjes in je post te staan. Je code ziet er ook niet uit. Lees de
P&W-FAQ eens door.
Het duurde even voordat ik door had dat die functie in een module moet voordat je hem kan gebruiken (
link).
Wat je hebt werkt gewoon. Je krijgt geen plaatje te zien als je plaatje niet bestaat. In dit geval geeft ShowPicD False terug.
Verder moet je er rekening mee houden dat de functie pas wordt uitgevoerd als er iets in de cellen veranderd is. Dat kan opgelost worden door events af te vangen (Open, Activate) en daar alles opnieuw te laten berekenen. Sheet1.Calculate werkt bij mij maar 1 keer, maar Application.CalculateFull doet het daarentegen wel goed.
Verder nog:
- De functie PicExists geeft altijd False.
- Static P As Shape. Geeft problemen bij meerdere cellen met plaatjes.
Ik zou het zo doen:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| Function ShowPicD(PicFile As String) As String
'Same as ShowPic except deletes previous picture
On Error GoTo Failure
Dim PrevPic As String
Dim AC As Range
Set AC = Application.Caller
PrevPic = AC.Text
If PicExists(PrevPic) Then
ActiveSheet.Shapes(PrevPic).Delete
End If
ShowPicD = ActiveSheet.Shapes.AddPicture(PicFile, True, True, AC.Left, AC.Top, 200, 200).Name
Exit Function
Failure:
ShowPicD = "Error loading: " + PicFile
End Function |
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
| Function PicExists(PictureName As String) As Boolean
'Returns true if PictureName is the name of an existing shape
On Error GoTo NoPic
If Not (ActiveSheet.Shapes(PictureName) Is Nothing) Then
PicExists = True
Exit Function
End If
NoPic:
PicExists = False
End Function |
.
.
.
Of zo (ook met PicExists die hierboven staat):
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| Function ShowPicD(PicFile As String) As String
'Same as ShowPic except deletes previous picture when PicFile changes
On Error GoTo Failure
Dim PrevPicId As String
Dim PrevPicFile As String
Dim AC As Range
Set AC = Application.Caller
PrevPic = AC.Text
Delimiter = InStr(PrevPic, "|")
If (Delimiter > 0) Then
PrevPicId = Left(PrevPic, Delimiter - 1)
PrevPicFile = Right(PrevPic, Len(PrevPic) - Delimiter)
End If
If PicExists(PrevPicId) And StrComp(PicFile, PrevPicFile) = 0 Then
ShowPicD = PrevPic
Else
If PicExists(PrevPicId) Then
ActiveSheet.Shapes(PrevPicId).Delete
End If
PicId = ActiveSheet.Shapes.AddPicture(PicFile, True, True, AC.Left, AC.Top, 200, 200).Name
ShowPicD = PicId + "|" + PicFile
End If
Exit Function
Failure:
ShowPicD = "Error loading " + PicFile
End Function |
[
Voor 66% gewijzigd door
Daos op 15-01-2005 00:23
]