[Excel 2000] Afbeelding verwijderen uit range met VBA*

Pagina: 1
Acties:

  • T!mb
  • Registratie: Oktober 2006
  • Laatst online: 12:42
Hoi,

Ik zit met het volgende probleem.
Ik wil een afbeelding verwijderen uit een bepaalde range van een werkblad.
Nu kan ik wel afbeeldingen verwijderen uit het hele werkblad met

code:
1
2
3
For Each GetShape In ActiveSheet.Shapes
       GetShape.Delete
       Next


maar dan verwijderd hij dus alle afbeeldingen.

Nu heb ik leven zitten googlen en kwam ik de volgende code tegen

code:
1
2
3
4
5
6
7
8
Dim GetShape As Shape
With ActiveSheet
   For Each GetShape In .Shapes
       If Not Application.Intersect(GetShape.TopLeftCell, .Range("B2:G3")) Is Nothing Then
         If GetShape.Type = msoPicture Then GetShape.Delete
       End If
    Next GetShape
End With


maar bij deze krijg ik een fout melding (fout 1004) in de volgende regel

code:
1
If Not Application.Intersect(GetShape.TopLeftCell, .Range("B2:G3")) Is Nothing Then


Weet iemand wat er fout is in deze code of heeft iemand een ander idee hoe je een afbeelding uit een bepaalde range kunt verwijderen?

Het gaat overigens om excel 2000

B.v.d.
Tim

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

En toen je ging [google=excel vba error 1004] welke websites hielpen je wel of niet verder?

Overigens horen Excel en aanverwante vragen in Officesuites en -software, dus ik verplaats je topic ook even meteen.

[ Voor 44% gewijzigd door BtM909 op 17-09-2008 11:27 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • T!mb
  • Registratie: Oktober 2006
  • Laatst online: 12:42
Ik heb inderdaad naar de fout code gezocht maar kwam er niet echt verder mee vandaar mijn vraag hier.

Excuses voor het verkeerd posten, ik had even snel gezocht op "excel vb" en toen kwam ik hier terecht, of eigenlijk daar.....

  • T!mb
  • Registratie: Oktober 2006
  • Laatst online: 12:42
Ik heb het anders opgelost je kunt er ook voor kiezen om type objecten te verwijderen.

code:
1
2
3
4
5
6
7
8
9
10
11
[Sub Shapes2()
'Loop through the Shapes collection and use the Type number of the control
    Dim myshape As Shape
    For Each myshape In ActiveSheet.Shapes
 
        ' ActiveX control (control toolbox) or a linked or embedded OLE object.
        If myshape.Type = 12 Then myshape.Delete
        ' You can also use  myshape.Visible = False
 
    Next myshape
End Sub


de "type's" die je in gebruik hebt kun je met de volgend macro zicht baar maken:

code:
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
Sub ListAllObjectsActiveSheet()
    Dim NewSheet As Worksheet
    Dim MySheet As Worksheet
    Dim myshape As Shape
    Dim I As Long

    Set MySheet = ActiveSheet
    Set NewSheet = Worksheets.Add

    With NewSheet
        .Range("A1").Value = "Name"
        .Range("B1").Value = "Visible(-1) or Not Visible(0)"
        .Range("C1").Value = "Shape type"
        I = 2

        For Each myshape In MySheet.Shapes
            .Cells(I, 1).Value = myshape.Name
            .Cells(I, 2).Value = myshape.Visible
            .Cells(I, 3).Value = myshape.Type
            I = I + 1
        Next myshape

        .Range("A1:C1").Font.Bold = True
        .Columns.AutoFit
        .Range("A1:C" & Rows.Count).Sort Key1:=Range("C1"), _
                        Order1:=xlAscending, Header:=xlYes
    End With

End Sub


Bron


Maar mocht iemand weten hoe je afbeeldingen in een bepaalde range verwijderd hou ik me aanbevolen.

Tim

Verwijderd

de intersectcode uit de ts zou gewoon moeten functioneren. misschien eens proberen de with constructie weg te laten, aimgh was deze af en toe buggy in office 2000.
Visual Basic:
1
2
For Each GetShape In activesheet.Shapes
       If Not Application.Intersect(GetShape.TopLeftCell, activesheet.Range("B2:G3")) Is Nothing Then

  • T!mb
  • Registratie: Oktober 2006
  • Laatst online: 12:42
Helaas werkt ook niet, zelfde foutmelding in de zelfde lijn.

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 23-10 18:32
Foutcode 1004 komt doordat een member van een object niet bestaat, en wel omdat het object zelf ook niet bestaat.

Ik gok dat door delete, de verzameling kleiner wordt, en dat Excel 2000 dan vervolgens een shape wil gebruiken die niet bestaat (want als je er 20 hebt en de eerste 10 verwijdert, bestaat nr 11 niet meer, maar zijn 11 tm 20 hernummert naar 1 tm 10.) Gezien de wijze waarop je de For-lus hebt gedefinieerd zou je dat niet verwachten, maar Excel 2000 kan daarin nog buggy zijn?

Voeg voor de gein (en controle) eens net na de For statement en voor de Intersect de volgende code toe:
Visual Basic:
1
If GetShape is Nothing then MsgBox "Dit is vreemd."
Pagina: 1