Excel 2010 VBA Objekte und Bilder

... komplette Frage anzeigen

2 Antworten

Hi, antworte Dir hier nochmal separat, da ich zwei Bilder angehängt habe (was bei Kommentaren nicht geht).

Also wenn ich Dich recht verstehe, willst Du Internet-Seiten mit Bild und Text ins Excel kopieren und anschließend die Bilder löschen. Dieser Vorgang soll mehrmals wiederholt werden, wobei Excel jedesmal den Zähler für die Bilddateien erhöht. Soweit richtig?

Mit folgendem Codebeispiel sollte Dich der von Excel vergebene Name nicht interessieren, da das ganze über eine For Each-Schleife abgearbeitet wird. Hier kommts dann auch nicht zu einem Zählerüberlauf. Die 4 oder 5 Objekte, die Du selbst erstellt hast und die nicht gelöscht werden sollen nimmst Du explizit heraus.

Dim o As Object
For Each o In ActiveSheet.Shapes
   If o.Name <> "Bild 1" And o.Name <> "Bild 2" And o.Name <> "Bild 3" And o.Name <> "Bild 4" Then
        o.Delete
   End If
Next

Im folgenden Beispiel (s. Bild 1) sind die auszuschließenden Objekte mit "Bild 1" bis "Bild 4" benannt. Nach dem Ausführen des Skriptes sind alle Bilder (bis auf die erwähnten 4) gelöscht (s. Bild 2).

Vielleicht hilft Dir das weiter?

Antwort bewerten Vielen Dank für Deine Bewertung

puba07 11.07.2011, 09:59

Hinweis: Solltest Du deutlich mehr als 5 Objekte haben, die nicht gelöscht werden sollen, so bietet es sich an, die Namen der Objekte in einem Array zu speichern und o.Name in der For-Each-Schleife gegen das Array zu prüfen, da die If-Abfrage sonst riesig wird. Aber das ist dann wieder eine andere Sache ;-)

0
laborthomas 17.07.2011, 17:37

Hallo Puba07

vielen, vielen Dank für deine Hilfe... mit der Schleife bin ich nicht weit weg von deiner Antwort... habs fast wie der Meister geschafft gg

Ich lasse den Zähler nur erst bei 5 starten und somit löscht er meine bilder nicht...

Interessanterweise geht es nur mit object_xx usw., nicht mit dem, von mir vergebene Namen :-/

Mit der fortlaufnden Nummer muss ich dann wohl leben...

THX nochmal - Thomas

0

Normalerweise solltest Du die eingefügten Bilder über ActiveSheet.Shapes("Name des Bildes") ansprechen können. Für "Name des Bildes" steht der im Namensfeld angezeigte bzw. zugewiesene Name. Beim Einfügen aus anderen Anwendungen bekommen die Bilder normalerweise die Namen "Bild 1", "Bild 2" oder "Objekt 1", "Objekt 2" usw. zugewiesen.

Um jetzt den Namen (und damit den Zähler) zu ändern weist Du im VBA-Code einfach einen neuen Namen zu. Bsp.:

  ActiveSheet.Shapes("Alter Name").Name = "Neuer Name"

Hilft Dir das weiter? Wenn nicht, dann poste mal nen Stück Quellcode.

Antwort bewerten Vielen Dank für Deine Bewertung

laborthomas 08.07.2011, 16:58

hallo puba07 danke für deine Antwort.

mit activeshapes(name).name kann ich meine Steuerelemente nicht ansprechen.

diese heißen zb: loeschen, kopieren, zuruecksetzen...

wenn ich die schleife mit zähler laufen lasse, dann werden diese auch gelöscht, obwohl nur

name="object "&zaehler

activeshapes(name).select selection delete

das ist mein erstes prob...

wenn ich aus einer IE - anwendung eine seite kopiere und in mein tabellenblatt einfüge (strg a; strg c; strg v), werden auch objekte mit kopiert, welche ich mit meiner schleife löschen möchte. dies funktioniert soweit, dass ich den zähler bei 5 beginnen lasse (die ersten 5 objekte (command button) sind jene, welche ich erstellt habe) und bis max. 30000 laufen lasse.

die "eingeschleppten" objekte werden zwar gelöscht (zb 10 objekte), jedoch wird die fortlaufende nummer (automatisch von excel) beim erneuten kopieren bei zb object_15 fortgesetzt und nach erfolgtem kopieren habe ich die laufende nummer bei den objekten bei 25.. wenn ich das nun oft genug mache, dann wird mir die laufende nummer - beim VBA, bei meiner schleife, der zähler überlaufen...

darum würde ich gerne vor jedem kopiervorgang, die laufenden nummern bei den eingefügten objekten zurücksetzen...

0
Iamiam 08.07.2011, 20:18
@laborthomas

puba hat ja nicht geschrieben: activeshapes(name), sondern

.

ActiveSheet.Shapes("Name des Bildes")

.

Das mit dem Zählerüberlauf könnte ich mir vorstellen, dass dann ginge, wenn Du das aktive Blatt in eine neue Datei (ich denke, dass ein neues Blatt nicht reicht, ausprobieren) kopierst, vorher die Formate überträgst (am Blattkopf, dann werden auch Zeilenhöhen und Spaltenbreiten übernommen) und dann entweder die anderen Blätter auch rüberschiebst oder das alte Blatt löscht und das aus der neuen Datei rüberschiebst. Irgendsowas müsste die Liste wieder neu anlegen, soweit ich die Logik von xl-Listen kenne.

Habs aber noch nie gemacht.

Ich hab nur mal in einer früheren Version eine Datei geschrottet, weil ich per Makro Alle Kombinationen von Schrift- und Hintergrundfarbe durchexerzieren wollte, war zuviel des Guten. (kann auch sein, dass das noch Lotus-123 war, da gabs ja auch früher schon die 256 Farben, schon lange vor xl)

0

Was möchtest Du wissen?