Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1848to1852
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Shape löschen und einfügen

VBA Shape löschen und einfügen
13.10.2021 11:18:01
Vogl
Hallo
Ich habe eine Datei, wo ich auf einem Tabellenblatt 2 Links habe Link1 und Link2.
Diese sollen durch das auswählen eines anderen KFZ gelöscht werden, und dann von dem Tabellenblatt des KFZ wieder eingefügt werden.
Wenn ich die Shapes lösche und wieder einfüge ist kein Shape mehr da, wenn dích dies rauskommentiere funktioniert es en paar mal, aber dann habe ich mehrere Shapes da. Die shapes sollen mit Links zu Berichten bzw Fotos verlinkt werden, und sollten daher vom richtigen KFZ sein.

Private Sub OKButton_Click()
'altes Löschen
Dim KFZohne As Variant
KFZohne = Cells(5, 4).Value
If KFZohne = "" Then
ActiveSheet.Shapes("Muster").Visible = True
Else
Sheets("Abfrage").Select
ActiveSheet.Shapes.Range(Array(KFZohne)).Select
Selection.Delete
Sheets("Abfrage").Select
ActiveSheet.Cells(5, 2).Select
Selection.ClearContents
ActiveSheet.Shapes("Muster").Visible = False
End If
'** Neues benanntes Tabellenblatt einfügen
'** einfügen als letztes Blatt
'** Dimensionierung der Variablen
Dim blatt As Object
Dim BlattName As String
Dim bolFlg As Boolean
'** Blattname festlegen
BlattName = ListFahrzeuge
'** Prüfen, ob das Blatt, welches eingefügt werden soll bereits vorhanden ist
'** Nur einfügen, wenn Blatt noch nicht vorhanden ist
For Each blatt In Sheets
If blatt.Name = BlattName Then bolFlg = True
Next blatt
'** Blatt nur einfügen, wenn noch nicht vorhanden
If bolFlg = False Then
With ThisWorkbook
Worksheets("Muster").Copy After:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = ListFahrzeuge
Range("L17").Value = ListFahrzeuge
Sheets(BlattName).Select
End With
Else
Sheets("Abfrage").Select
ActiveSheet.Range("B5").Select
Range("B5").Value = BlattName
Dim KFZohne2 As Variant
Dim KFZ As Variant
KFZohne2 = Cells(5, 4).Value
KFZ = Cells(5, 2).Value
Sheets("Abfrage").Select
ActiveSheet.Shapes("Muster").Visible = False
Sheets(BlattName).Select
ActiveSheet.Shapes.Range(Array(KFZohne2)).Select
Selection.Copy
Sheets("Abfrage").Select
ActiveSheet.Range("K11").Select
ActiveSheet.Paste
Sheets(KFZ).Select
ActiveSheet.Range("M26:M32").Select
Selection.Copy
Sheets("Abfrage").Select
ActiveSheet.Range("N28:N34").Select
ActiveSheet.Paste
'    Sheets("Abfrage").Select
'    ActiveSheet.Shapes.Range("Link1").Select
'    Selection.Cut
Sheets(KFZ).Select
ActiveSheet.Shapes("Link1").Copy
Sheets("Abfrage").Select
ActiveSheet.Range("O28").Select
ActiveSheet.Paste
'    Sheets("Abfrage").Select
'    ActiveSheet.Shapes.Range("Link2").Select
'    Selection.Cut
Sheets(KFZ).Select
ActiveSheet.Shapes("Link2").Copy
Sheets("Abfrage").Select
ActiveSheet.Range("R24").Select
ActiveSheet.Paste
End If
UFEingabe.Hide
Unload UFEingabe
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Shape löschen und einfügen
13.10.2021 16:37:27
Yal
Hallo Christian,
Du muss die nächste Stufe erreichen: es gibt bestimmte Vokabular, die den Rekorder verwendet, die man abkurzen kann:
... .Select und dann Selection. ...
Sheets(x).Activate und dann Activesheet. ...
Bestimmte Aktionen lassen sich am besten auslagern:
_ Ob ein Blatt existiert, in eine Function, die True/False zurückgibt
_ Ein Blatt herstellen, in eine Function, die eine Verlinkung (Set ...) auf diesen Blatt zurückgibt.
(Mit deutschen Funktionsnamen für die Lesbarkeit und die Zuordnung: was ist VBA-Nativ, was ist mein Code)
Ein "With" ist eine Abkurzung: alles was mit einem Punkt anfängt, bezieht sich auf dem With.
Lesbarkeit, die zweite: achte auf das Einrücken. Es hilft sehr, viele Fehler zu vermeiden.
Folgendes ist nocht nicht die Lösung deiner Frage, aber ein fortgeschrittene Version deines Coding. Vielleicht kannst daran leichter das Problem finden.
z.B. warum im zweiten If, wenn nicht existent, ein Blatt hergestellt wird (und nur das) und wenn existent, etwas reinkopiert.
Ist es nicht das Ziel, etwas reinzukopieren, dafür aber eine Voraussetzung, dass das Blatt existiert, also diese zu herstellen, falls noch nicht vorhanden?

Private Sub OKButton_Click()
Dim KFZohne As Variant
Dim WS_KFZ As Worksheet
Dim WS As Worksheet
'altes Löschen
With ActiveSheet
If .Cells(5, 4).Value = "" Then
.Shapes("Muster").Visible = True
Else
.Shapes("Muster").Visible = False
Worksheets("Abfrage").Shapes.Range(.Cells(5, 4).Value).Delete
Worksheets("Abfrage").Cells(5, 2).ClearContents
End If
End With
'** Blatt nur einfügen, wenn noch nicht vorhanden
If Blatt_existiert(ListFahrzeuge) = False Then
Set WS = Blatt_herstellen(ListFahrzeuge)
WS.Range("L17").Value = ListFahrzeuge
Else
With Worksheets("Abfrage")
.Shapes("Muster").Visible = False
.Range("B5").Value = ListFahrzeuge
KFZohne = .Cells(5, 4).Value
Set WS_KFZ = .Worksheets(Cells(5, 2).Value)
Sheets(Blattname).Shapes.Range(Array(KFZohne)).Copy .Range("K11")
WS_KFZ.Range("M26:M32").Copy .Range("N28:N34")
WS_KFZ.Shapes("Link1").Copy .Range("O28")
WS_KFZ.Shapes("Link2").Copy .Range("R24")
End If
Unload UFEingabe
End Sub
Function Blatt_herstellen(Blattname As String) As Worksheet
Dim WS As Worksheet
On Error Resume Next
'ThisWorkbook ist immer "default" und muss nicht spezifiziert werden
Set WS = Worksheets(Blattname)
If WS Is Nothing Then
Worksheets("Muster").Copy After:=Worksheets(Worksheets.Count)
Set WS = Worksheets(Worksheets.Count)
WS.Name = Blattname
End
Set Blatt_HerstellenOderAuswählen = Worksheets(Blattname)
End Function
Function Blatt_existiert(Blattname As String) As Boolean
Dim WS As Worksheet
On Error Resume Next
Set WS = Worksheets(Blattname)
Blatt_existiert = Not (WS Is Nothing)
End Function
(Ich könnte den Code natürlich nicht testen.)
VG
Yal
Anzeige
AW: VBA Shape löschen und einfügen
14.10.2021 06:55:26
Christian
Danke für die schnelle Antwort.
der Code sieht auf jeden Fall schöner und einfacher aus, weist aber leider einen Fehler auf.
"Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft."
kann die Datei leider nicht hochlade, da sie 380kb hat, und damit zu groß ist.
AW: VBA Shape löschen und einfügen
14.10.2021 16:59:15
Piet
Hallo
versuch bitte mal die Datei abzuspecken. Man kann den benutzten UsedRange verkleinern.
In allen Tabellen alle leeren Zeilen bis ganz unten auswählen und mit Menü "Zeile löschen" nach oben verschieben weglöschen.
Als Beispiel reichen uns im Regalfall 10-20 befüllte Zeilen um den Tabellenaufbau zu erkennen.
mfg Piet
Anzeige
AW: VBA Shape löschen und einfügen
15.10.2021 06:14:50
Christian
Guten morgen
habe bereits alles abgespeckt, nur die Zeilen und Spalten die gebraucht werden , die anderen gelöscht.
Auch alle Blätter die angelegt wurden gelöscht, dass nur die Startseite, Daten und das Muster da ist.
trotzdem komme ich nicht unter die 350kb
notfalls als ZIP (owT)
15.10.2021 10:17:57
Pierre
AW: VBA Shape löschen und einfügen
18.10.2021 14:04:54
Christian
Hallo
Ich schaffe es leider weder am Mac noch unter Windows die Datei unter die 300kb zu bekommen.
Die If abfrage ob ein Blatt existiert ist deshalb da, weil ich ein Fahrzeugverzeichnis machen möchte, wo ich wenn das Auto bereits angelegt ist, das Shape wo die Schäden skizziert sind, als auch die Shapes Link1 und Link2, wo ich dann auf den Ordner mit Fotos bzw. den für TÜV verlinken möchte. Dies soll dann in meinem Hauptblatt angezeigt werden.
Wenn das Blatt noch nicht existiert, soll er mir anhand vom Musterblatt ein neues Blatt mit dem Kennzeichen erstellen, wo ich dann die Schäden eintragen und Skizziere, die Bilder und PDF verlinken und das Shape mit dem skizzierten gruppieren und umbenennen ( nur die Nummern vom KFZ ) so dass dies dann alles beim nächsten mal auf dem Hauptblatt angezeigt wird.
Schön wäre noch, wenn ich die aufgelisteten Schäden und Unfälle als eine Art Historie anlegen könnte, die dann mit den dazugehörigen Fotos verlinkt werden kann, und diese dann auch per VBA ( per Sverweis geht der Hyperlink nicht ) kopiert wird.
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige