drhouse
Goto Top

Bilder mitsortieren

Guten Tag,

ich habe in Excel 2007 eine Tabelle die ich nach Spalte B sortieren lassen will.
Soweit kein Problem, bis auf Spalte A

In Spalte A befinden sich Bilder zu dem Gegenstand der in Spalte B beschrieben wird.
In meinem Fall ein Bild von einem Nokia5700 in Spalte a und in Spalte B steht "Nokia 5700".

Das Problem ist, dass sich die Bilder nicht mitsortieren lassen, auch wenn ich Sie in das Feld kopiert habe.

Wie schaffe ich es, dass sich die Bilder mitsortieren lassen?


Besten Dank im voraus.

Content-Key: 56578

Url: https://administrator.de/contentid/56578

Printed on: April 23, 2024 at 19:04 o'clock

Member: geTuemII
geTuemII Apr 13, 2007 at 15:09:58 (UTC)
Goto Top
Die Bilder befinden sich in Spalte A? Du meinst, die Bilder sind da, wo sich die Spalte A befindet?! Ich kenne nämlcuh keine Möglichkeit, Bilder direkt in Zellen einzufügen, korrigiere mich, wenn ich mich irre. Damit wäre auch gleich deine Frage beantwortet: Die Bilder sind zwar in das Arbeitsblatt eingebettet, haben aber keinen Bezug zu den zellen und können daher auch nicht über die Tabellenfunktionen sortiert werden.

geTuemII
Member: bastla
bastla Apr 13, 2007 at 22:29:20 (UTC)
Goto Top
@geTuemII

Korrigieren kann ich Dich nur bedingt, da (zumindest für Excel 2003) gilt:

Wenn über "Grafik formatieren... / Eigenschaften / Objektpositionierung" die "Abhängigkeit von der Zellposition" nicht ausgeschaltet wurde (3. Option), ist an sich doch ein Bezug zur Zelle vorhanden. Allerdings muss die Zelle groß genug für das Bild sein (oder, anders formuliert, das Bild darf nicht aus der Zelle hinausragen). Dann wird es auch beim Sortieren "mitgenommen".

Natürlich muss die Größe der Zelle an der neuen Position wiederum für das Bild ausreichend sein - ist sie das nicht, wird das Bild zwar so platziert, dass die linke obere Ecke des Bildes der ursprünglichen relativen Position entspricht (sich also weiterhin in der gleichen Zeile wie der zugehörige Text befindet), ein neuerliches "Mit-Sortieren" wird dann aber nicht mehr funktionieren.

Lösungsansatz daher: Vorweg alle Zellen auf ausreichende Größe für das größte vorkommende Bild einstellen. Dann sollte das Sortieren hoffentlich auch in einem Excel 2007 noch klappen.

Grüße
bastla
Member: drhouse
drhouse Apr 16, 2007 at 06:27:28 (UTC)
Goto Top
Das mit der passenden Spaltengröße war die Lösung.
vielen Dank.
Member: geTuemII
geTuemII Apr 16, 2007 at 11:11:39 (UTC)
Goto Top
@bastla:
Danke, und schon habe ich wieder was gelernt. face-smile

geTuemII
Member: bastla
bastla Apr 16, 2007 at 11:47:08 (UTC)
Goto Top
@geTuemII

... schon habe ich wieder was gelernt. face-smile
Ich übrigens auch - musste mir die Lösung erst basteln. face-wink

Grüße
bastla
Member: drhouse
drhouse Apr 16, 2007 at 13:59:41 (UTC)
Goto Top
Jetzt wird das aber ganz kompliziert.
Jetzt ist die Tabelle soweit fertig, da soll ich die Tabelle in weitere untertabellen aufteilen.
Quasi wenn in spalte X die Zahl 30 steht soll die Zelle in einem weitern arbeitsblatt auftauchen.
Dank SVERWEIS eigentlich kein Problem, aber die Bilder werden beim sverweis nicht berücksichtigt.
Ich bin mir auch nicht ganz sicher ob ich das Problem per sverweis lösen kann.
Es gibt mehrere Spalten wo die Zahl 30 drin vorkommt.
diese spalten sollen in eine andere Tabelle kopiert werden (Natürlich automatisch copy-paste ist ja auch zu umständlcih, da die Tabelle sich ständig ändert.)

Das ganze sieht so aus

Tabelle 1:

Bild-Gerätebezeichnung- Geräteserie
pic1- Nokia 5700- S60
pic2- Nokia 5500- S40
pic3- Nokia 8800- S40

Jetzt brauche ich ne neue Tabelle wo nur Geräte der S40 Serie auftauchen.
Und natürlich das Bild.

Ich hab auch schon mal bei office-loesung.de nachgeguckt, aber da werde ich erstens nicht draus schlau und zweitens streiten die sich da nur anstatt das problem zu lösen.
echt kindisch sowas.
Da bin ich froh das ich hier immer kompetente Leute vortreffe.

Gruß
drhoue
Member: bastla
bastla Apr 16, 2007 at 16:00:40 (UTC)
Goto Top
Hallo drhouse!

Existiert die neue Tabelle bereits (bzw soll sie zwar diesmal neu erstellt, in Zukunft aber ergänzt werden), und falls ja, darf die ganze Zeile kopiert werden, oder müssen es jeweils die 3 Zellen sein?

Und ganz generell: Wohin in der Zieltabelle sollen die kopierten Daten / Bilder?

Am besten, Du beschreibst den gewünschten Ablauf möglichst exakt.

Grüße
bastla
Member: drhouse
drhouse Apr 17, 2007 at 06:52:04 (UTC)
Goto Top
Die Tabellen existieren schon.
Sie sollen in der Zukunft aber ergänzt werden.
Es muss die gesammte Zeile kopiert werden.
Die Daten sollen dann exakt so in der neuen Tabelle stehen, wie schon in der gesamtliste, allerdings halt nur die Zeilen wo S40 in der letzten Zeile steht.
Member: bastla
bastla Apr 17, 2007 at 12:51:57 (UTC)
Goto Top
Hallo drhouse!

Kopiere das folgende Makro in ein Modul Deiner Arbeitsmappe:
Option Explicit
Sub Kopieren()

Const Quelle As String = "Tabelle1"  
Const Ziel As String = "Tabelle2"  
Const Spalte As String = "C"  
Const Zeile As Integer = 2

Dim SpaltenNr As Integer, Vorgabe As String, Kriterium As String, i As Integer
Dim Q As Worksheet, Z As Worksheet, rNext As Integer
SpaltenNr = Worksheets(1).Cells(1, Spalte).Column
Set Q = Worksheets(Quelle)
Set Z = Worksheets(Ziel)
If ActiveSheet.Name = Quelle Then
    If ActiveCell.Column = SpaltenNr Then Vorgabe = ActiveCell.Value
Else
    Vorgabe = ""  
End If
Kriterium = InputBox("Nach welchem Begriff soll in Spalte " & Spalte & " gesucht werden?", "Kriterium", Vorgabe)  
If Kriterium <> "" Then  
    i = Zeile
    Do While Q.Cells(i, SpaltenNr).Value <> ""  
        If LCase(Q.Cells(i, SpaltenNr).Value) = LCase(Kriterium) Then
            Q.Activate
            Q.Cells(i, SpaltenNr).EntireRow.Copy
            Z.Activate
            rNext = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row + 1
            ActiveSheet.Cells(rNext, 1).Activate
            ActiveSheet.Paste
            Application.CutCopyMode = False
        End If
        i = i + 1
    Loop
End If
End Sub
Die Werte in den "Const"-Zeilen enthalten die Namen der Quell- und der Zieltabelle sowie die Spalte, in welcher das Kriterium vorkommt und die erste Zeile, in der Daten zu finden sind. Passe bitte diese Informationen an Deine Tabellen an.

Zur Verwendung: Wenn Du in der Quelltabelle den Zellcursor in eine Zelle der Kriterienspalte (im Beispiel "C") setzt, wird nach dem Start des Makros "Kopieren" der in dieser Zelle befindliche Wert als Kriterium vorgeschlagen - ansonsten musst Du selbst eingeben, welches Kennzeichen Du verwenden willst.

Beispiel: Wenn die Zelle C5 den Eintrag "S40" enthält und Du diese Zelle markierst, werden nach Bestätigung des Wertes alle Zeilen, die ebenfalls "S40" in der Spalte C enthalten, in die Zieltabelle kopiert und dort am Ende angefügt. Beim Vergleich der Zellinhalte wird nicht auf Groß-/Kleinschreibung geachtet - Du könntest also auch "s40" als Suchbegriff eingeben.

Grüße
bastla
Member: drhouse
drhouse Apr 18, 2007 at 08:29:33 (UTC)
Goto Top
Erstmal vielen Dank für die Hilfe.

Mein Quellcode sieht jetzt folgendermaßen aus:

Public Sub Series30()
Dim q As Integer
Dim i As Integer
Dim s As Object
For Each s In ThisWorkbook.Sheets
If s.Name <> "Gesamt" Then
s.Range("2:65536").Delete (xlShiftUp)
End If
Next s
For Each s In ThisWorkbook.Sheets
i = 2
q = 2
While ThisWorkbook.Sheets("Gesamt").Cells(q, 13).Value <> ""
If ThisWorkbook.Sheets("Gesamt").Cells(q, 13).Value = s.Name Then
ThisWorkbook.Sheets("Gesamt").Cells(q, 13).EntireRow.Copy
s.Paste Destination:=s.Cells(i, 1)
i = i + 1
End If
q = q + 1
Wend
Next s
End Sub

Der überprüft jetzt ob das was in spalte m steht auch als zusätzliche Tabelle existiert und kopiert dann die Daten in die ensprechende Tabelle.
Jetzt gibts da nur ein Problem.
Am Anfang steht ja das er den Inhalt der anderen Tabellen erstmal löschen soll.
Die Bilder werden jedoch nicht gelöscht.
An dem Problem muss ich noch arbeiten.
Sonst läuft der rest super.
Member: drhouse
drhouse Apr 18, 2007 at 08:44:50 (UTC)
Goto Top
Ich habe ja noch das Problem das die Bilder nicht mitgellöscht werden.

Das muss an dem Löschbefehl liegen

For Each s In ThisWorkbook.Sheets
If s.Name <> "Gesamt" Then
s.Range("2:65536").Delete (xlShiftUp)
End If
Next s

Ich frage mich ob xlShiftUp der richtige Befehl ist.
Ich will ja auch die Bilder mitgelöscht haben.
Problem ist das ich von VBA nicht wirklich Ahnung habe und mit der Hilfe von Excel auch nicht weiterkomme.

Bittte helft mir bei dem Problem weiter.
Danke im voraus
Member: bastla
bastla Apr 18, 2007 at 10:36:07 (UTC)
Goto Top
Hallo drhouse!

Wenn Du alle Bilder löschen willst, ist es einfach:
...
s.Shapes.SelectAll
Selection.Delete
...
Falls einzelne Bilder erhalten bleiben sollen, müsstest Du die "Shapes"-Auflistung mit "For Each ..." abgrasen und alle nicht benötigten Bilder (Problem: Kennst Du deren Namen oder Index?) löschen.

Grüße
bastla
Member: drhouse
drhouse Apr 18, 2007 at 12:11:32 (UTC)
Goto Top
vielen dank für die Hilfe

Mein VBA-Makro sieht jetzt wie folgt aus:

Public Sub Abgleich()
Dim q As Integer
Dim i As Integer
Dim b As Object
Dim s As Object
Dim myShape As Shape

For Each s In ThisWorkbook.Sheets
If s.Name <> "Gesamt" Then
For Each myShape In s.Shapes
myShape.Delete ' Bilder aller Tabellen die nicht Gesamt heißen löschen
Next myShape

s.Range("1:65536").Delete (xlShiftUp) ' Alle Zeilen der Tabellen die nicht Gesamt heißen löschen

End If
Next s

For Each s In ThisWorkbook.Sheets ' Der Vorgang der jetzt kommt soll in allen Tabellen durchgeführt werden

i = 2
q = 2

ThisWorkbook.Sheets("Gesamt").Cells(1, 1).EntireRow.Copy ' Die erste Zeile der Gesamttabelle soll auf
s.Paste Destination:=s.Cells(1, 1) ' alle anderen Tabellen übertragen werden

While ThisWorkbook.Sheets("Gesamt").Cells(q, 13).Value <> "" 'solange wiederholen bis ein Feld in Spalte M leer ist
If ThisWorkbook.Sheets("Gesamt").Cells(q, 13).Value = s.Name Then ' wenn in Spalte M der Text gleich dem Namen einer der Tabellen ist,
ThisWorkbook.Sheets("Gesamt").Cells(q, 13).EntireRow.Copy 'dann die gesamte Zeile
s.Paste Destination:=s.Cells(i, 1) 'dort hin kopieren
i = i + 1 'eine Zeile weiter
End If
q = q + 1
Wend
ThisWorkbook.Sheets("Gesamt").Range("A:Z").Copy ' Das Format von Spalte A bis Z in die anderen
s.Range("A:Z").PasteSpecial Paste:=xlPasteColumnWidths ' Tabellen übertragen
Next s
End Sub


Vielen Dank für eure Mithilfe