Verwijderen per foto uit excelbestand mbv macro

Status
Niet open voor verdere reacties.

Offthefield

Gebruiker
Lid geworden
27 apr 2005
Berichten
369
Ik heb een klein probleem, ik wil een aantal foto's verwijderen uit een excel-bestand,
maar dat wil ik per foto doen. Ik heb een macro voor alle foto's, maar ik moet alleen de foto's
per stuk wijzigen (Ze staan op de volgende cellen G8, G23, N8, N23).
Ik wil dus 4 knoppen maken of een combobox met een macro om ze per stuk te verwijderen.

Mijn vraag is of iemand een idee heeft hoe ik de foto's per stuk kan wijzigen?

Code:
' Alle foto's verwijderen
For Each sh In ActiveSheet.Shapes
        If sh.Type = msoPicture Then sh.Delete
Next


Alvast dank voor het meedenken
 
Je kan met:
Code:
sh.TopLeftCell.Address
controleren welke cel het om gaat.
Of kijk naar de naam van de shape (sh.Name)

Of direct op naam:
Code:
ActiveSheet.Pictures("Afbeelding 1").Delete
 
Laatst bewerkt:
Ze staan op de volgende cellen G8, G23, N8, N23
Foto's kun je niet koppelen of terugvinden op celniveau. Wel kun je de positie van de foto vergelijken met die van de cel (Left, Top) en op basis daarvan kijken of je een foto weg kan doen of niet.
 
Edmoor,

Bedankt voor de snelle reactie, alleen ik snap niet wat je bedoeld, de cellen zijn nl. bekend waar de foto's staan G8, G23, N8, N23

De bedoeling is dat de bestaande foto, die in bv. cel G8 staat wordt verwijderd, want anders krijg je op den duur
een x aantal foto's op elkaar, dit zijn nl. foto's die aan een bepaald nummer gelinkt staan en dus iedere keer
een andere foto opleveren.
 
Foto's staan niet in een cel maar op het werkblad, zoals Octafish ook al zei.
 
Mijn kennis van VBA is zeer beperkt, in de afgelopen jaren heb ik door jullie heel veel macro's kunnen
maken (ook snap ik ze niet) en zelf een beetje kunnen aanpassen

Nu begin ik een beetje te begrijpen, dat de foto die geplaatst moet worden in cel B8, bij het begin van de macro nog niet bekend is,
maar ik daar moet je met shape achter zien te komen?

Is het mogelijke om in de kleine macro ' Foto's verwijderen' de bepaalde foto aan te geven?, alleen ik snap nog steeds niet hoe?


Ik heb nu nl. 4 buttons die verwijzen naar de 4 plaatsen op het werkblad

Hieronder de volledige macro van de button!

Code:
Private Sub Plaatsen1()
Sheets("PRINT1").Select

' Foto's verwijderen
For Each sh In ActiveSheet.Shapes
        If sh.Type = msoPicture Then sh.Delete
Next

On Error Resume Next
[O1] = C_Dir.Value
myDir = [O1]
'
With Sheets("PRINT1").Pictures.Insert(myDir & T_13.Text)
  .ShapeRange.LockAspectRatio = msoFalse
  .Top = Sheets("PRINT1").[B8].Top
  .Left = Sheets("PRINT1").[B8].Left
  .Height = 213
  .Width = 196
End With

' Verwijderen van text
'
    Range("G8:M21").Select
    Selection.ClearContents
    Range("G8").Select
'
' geen .Text maar .Value !!!
Range("G8").Select
''ActiveCell.Offset(0, 0).Value = LB01.Caption
ActiveCell.Offset(0, 0).Value = T_02.Text
ActiveCell.Offset(2, 0).Value = T_03.Text
ActiveCell.Offset(3, 0).Value = T_04.Text
ActiveCell.Offset(4, 0).Value = T_05.Text
ActiveCell.Offset(5, 0).Value = T_06.Text
ActiveCell.Offset(6, 0).Value = T_07.Text
''
ActiveCell.Offset(9, 0).Value = T_13.Text
''
ActiveCell.Offset(10, 0).Value = T_08.Text
ActiveCell.Offset(11, 0).Value = T_09.Text
ActiveCell.Offset(12, 0).Value = T_10.Text

End Sub
 
Nu begin ik een beetje te begrijpen, dat de foto die geplaatst moet worden in cel B8, bij het begin van de macro nog niet bekend is,
Goed lezen is ook een kunst: zowel edmoor als ik hebben het al gezegd: een foto staat niet in een cel. Je kunt een foto hooguit boven een cel hangen. Er zijn een paar dingen die je kan doen:
1. lees in je macro de positie van cel en foto uit, en vergelijk ze met elkaar. Test bijvoorbeeld eens met deze macro:
Code:
Sub FotoPlaats()
Dim sh As Shape
    MsgBox Range("G8").Left & vbLf & Range("C4").Top
    For Each sh In ActiveSheet.Shapes
        If sh.Type = msoPicture Then MsgBox sh.Left & vbLf & sh.Top
    Next
End Sub

Dat werkt, mist alle foto's perfect aanlijnen op de cel. Dat kan op een makkelijke manier, als je de foto's met de <Alt> toets ingedrukt hebt neergezet; dan lijnen ze op de celrand links en boven. maar het blijft tricky, want als de posities niet gelijk zijn, gaat het fout.

Optie 2:
Zet in de eigenschap <Titel> van je foto's de 'cel' waaraan je ze 'koppelt' Gebruik vervolgens een macro om de celnaam te gebruiken om ze te verwijderen. Krijg je iets als dit:
Code:
Sub FotoPlaats()
Dim sh As Shape
    For Each sh In ActiveSheet.Shapes
        If sh.Type = msoPicture Then If sh.Title = "P28" Then sh.Delete
    Next
End Sub
 
OctaFish,

Ik snap er niets van!, daarom heb ik het programma (klein beetje aangepast), maar in de bijlage gedaan, met enkele foto's
dan zie je misschien het probleem of je kan het mij misschien uitleggen dat ik het, als leek het begrijp (De uitleg was heel uitgebreid, maar ik heb te weinig
kennis van VBA om het te snappen)

Als ik nu een bepaald gegeven selecteer en ik druk op Foto1, verwijdert hij ook Foto2 en Foto3, maar hij hoeft alleen
Foto1 te verwijderen en Foto2 en Foto3 te laten staan.

Selecteer je Foto2, dan moet hij alleen Foto2 verwijderen ect.


Ik hoop dat je me verder kan helpen, alvast hartelijk dank


Offthefield
 

Bijlagen

  • TEST.ZIP
    34 KB · Weergaven: 32
De sub Plaatsen1 moet dus alleen Foto 1 verwijderen.
Zoals ik in #2 al zei:
Code:
[COLOR="#008000"]'Foto 1 verwijderen[/COLOR]
For Each sh In ActiveSheet.Shapes
    If sh.Type = msoPicture Then
        If sh.TopLeftCell.Address = "$B$8" Then sh.Delete
    End If
Next
 
Wat wil je precies doen met dat formulier? Ik snap helemaal niets van de werking. Om te beginnen heb je bij elke knop deze actie staan:
Code:
    For Each sh In ActiveSheet.Shapes
        If sh.Type = msoPicture Then sh.Delete
    Next
Daarmee gooi je dus echt alle afbeeldingen weg. Als je dat niet wilt
Als ik nu een bepaald gegeven selecteer en ik druk op Foto1, verwijdert hij ook Foto2 en Foto3, maar hij hoeft alleen Foto1 te verwijderen en Foto2 en Foto3 te laten staan.
dan doe je dus precies het omgekeerde van wat je wilt! Aan de rest van de procedures en code kan ik inderdaad wel zien dat je nog niet veel kennis van VBA hebt, en een hoop van de code bij elkaar 'gescharreld' hebt zonder blijkbaar goed te weten wat het allemaal doet, maar dat is niet de oorzaak van je probleem dus: dat is de code waarmee je alles verwijdert dus wèl. Overigens is dat stukje lijkt mij niet zo moeilijk om te begrijpen! Iedereen zou toch onderhand wel moeten weten wat de opdracht 'Delete' doet :).

Kortom: je procedures gooien dus eerst alle foto's weg, en zetten vervolgens één foto weer terug, en die ene foto haal je dan ook nog eens uit een teksdtvak waarin je werkuren neerzet. Erg verwarrend allemaal.
 
OctaFish, edmoor,

OctaFish, Klopt wat je zegt, het is nog al onoverzichtelijk.
Ik had een programma, waar eerst alle foto's in 1x weggehaald moesten worden (in mijn geval 4x),
en met met nieuwe programma wil ik ze per stuk aanpassen en de oude foto verwijderen, maar ik begreep de aanwijzigingen van jullie niet.

De macro van edmoor is precies wat ik zocht.

Ik wil jullie hartelijk danken voor de snelle en goede hulp, ik kan weer verder met het aanpassen van mijn programma.

Ik vind het een TOP forum waar ik al heel veel programma's door heb kunnen maken en wijzigen
 
Hou bij mijn voorbeeld wel in gedachten wat Octafish erover zei.
De juiste positie van de foto is daarbij heel erg bepalend.
 
Persoonlijk zou ik inderdaad een methode gebruiken waarbij ik ofwel de eigenschap Title van de foto vul, ofwel de eigenschap AlternativeText. Beiden zijn simpel te vullen, en je bent totaal niet meer afhankelijk van de juiste koppeling met een cel. Bovendien kun je het hele proces van inlezen, markeren en plaatsen op die manier ook beter sturen.
 
Edmoor, OctaFish,

De uitleg is voor mij niet te snappen (ligt aan mij), maar het resultaat dat ik voor ogen had is gelukt en ziet er gelikt uit,
dus missie geslaagd!!, nogmaals hartelijk dank!! top!!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan