Code läuft nicht als Add-In, nur in VBA-Editor

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Code läuft nicht als Add-In, nur in VBA-Editor
von: Hans-Werner
Geschrieben am: 23.05.2015 15:52:15

Liebe VBA-Gemeinde,
habe wieder mal ein VBA-Problem mit Programm-Code, der im VBA-Editor einwandfrei läuft, aber nicht ganz so, wenn Code als Add-In oder Makro aufgerufen wird:
In meiner Excel-Tabelle sollen aus dem Inhalt der Spalten 1-20 (variabel, auch 1-15) über Auswertung diverser Zwischenspalten (z.B. Spalten 15-35) in den letzten nicht belegten Spalten als Shape-Objekte Linien erzeugt werden mit dem Befehl:
Set shpShape = myDoc.Shapes.AddLine _
(Cells(azeile, aspalte).Left, _
Cells(azeile,aspalte).Top, _
Cells(azeile+deltaz,aspalte+deltasp).Left, _
Cells(azeile+deltaz,aspalte+deltasp).Top)
Die Erzeugung dieser Shapes (einige hundert, da über 120 Zeilen mit je einem Shape und das in 3 Spalten) und Textfelder (ebenfalls fast 100) funktioniert bestens.
Wenn aber die Hilfsspalten (Zwischenspalten 15-35 o.ä.) gelöscht werden sollen, dann funktioniert das Löschen nur über den Programmaufruf im VBA-Editor einwandfrei. Wird aber der Code über ein AddIn oder Schaltfläche für das Makro aufgerufen, dann bleiben die Shapes an der alten Position und werden nicht nach vorne verschoben.
Der Löschbefehl für die Zwischenspalten lautet:
Range(Columns(lspalte - 1 - Range("D1").Value), Columns(rspalte_z + 1)).Delete
Die Spaltenbereiche müssen so berechnet werden.
Wie kann ich es erreichen, dass durch diesen Löschbefehl die hunderten von Shapes und Textfelder mit ihren Spaltenbreiten und anderen Formatierungen nach vorne verschoben werden, wenn das Makro oder Add-In aufgerufen wird?
Evtl. eine Excel-Pause zur Berechnung der neuen Positionen einbauen? - Wie?
P.S.: Jedes Shape/Textfeld hat als Eigenschaft "Von Zellposition und -größe abhängig".
Schon mal jetzt vielen Dank für Eure Hilfe.
Gruß
HaWe

Bild

Betrifft: AW: Code läuft nicht als Add-In, nur in VBA-Editor
von: mumpel
Geschrieben am: 23.05.2015 16:57:50
Hallo!
Du musst sauber auf die aktive Arbeitsmappe referenzieren. Das tust Du in Deinem Code aber nicht.
Gruß, René

Bild

Betrifft: AW: Code läuft nicht als Add-In, nur in VBA-Editor
von: Hans-Werner
Geschrieben am: 23.05.2015 20:52:03
Hallo René,
an welcher Stelle auf aktive Mappe referenzieren? Die Spalten werden richtig gelöscht, nur die Shapes "wandern" nicht nach vorne. Was muss dann wo refenrenziert werden?
Das gesamte Makro läuft in der aktuellen Mappe ab.
Gruß
Hawe

Bild

Betrifft: AW: Code läuft nicht als Add-In, nur in VBA-Editor
von: Hans-Werner
Geschrieben am: 23.05.2015 22:31:31
Hallo,
vieleicht eine klarere und kürzere Frageform:
In Spalten 41-45 (Spaltenbreite = 1) befinden sich Shapes (Linien) von Zeile 3 (!!) bis Zeile 137 (o.ä.). Wenn Spalten 11 bis 40 gelöscht werden, sollen Shapes nicht mehr in Spalte 41-45 stehen, sondern in Spalte 11-15 mit Spaltenbreite 1 !!! inkl. der Überschriften in Zeilen 1 bis 2.
Das geht auch so, wenn man den Programmcode im VBA-Editor ausführt, aber nicht, wenn Code über Makro ausgeführt wird. Dann bleiben nämlich die Shapes in Spalten 41 bis 45, die Überschriften (Zellen 1,41 bis 2,45) werden vorgezogen auf Spalte 11 bis 15 und die Shapes liegen jetzt in Spalten 41 bis 45 mit Standardspaltenbreite. Und nun??
Gruß
HaWe

Bild

Betrifft: AW: Code läuft nicht als Add-In, nur in VBA-Editor
von: Nepumuk
Geschrieben am: 24.05.2015 09:23:21
Hallo,
wie startest du die Löschroutine, per CommandButton in der Tabelle?
Gruß
Nepumuk

Bild

Betrifft: AW: Code läuft nicht als Add-In, nur in VBA-Editor
von: Hans-Werner
Geschrieben am: 24.05.2015 11:28:37
Hallo Nepumuk,
das Löschen steht in der Gesamt-Sub

Sub A_Start()
Set rng = ActiveSheet.Range("A1").Find("PVI_ABUCH")
....
Call ....
....
'Zusatzspalten löschen:
   Range(Columns(lspalte - 1 - Range("D1").Value), Columns(rspalte_z + 1)).Delete
'Erste Zeile löschen
Rows("1").Delete Shift:=xlUp
Set rng = Nothing
Application.ScreenUpdating = True
End Sub
... in Zeile 271 (von 280 Zeilen Programm-Code), gefolgt von Löschbefehl für erste Zeile.
Die

Sub A_Start wird einmal aus dem VBA-Editor aufgerufen (sie enthält viele Call-Aufrufe),
wo alles funktioniert und ein anderes Mal aus einem AddIn bzw. über eine Makro-Schaltfläche in  _
der Schnellstartleiste von Excel. Diese Aufrufe scheitern mit dem "Verschieben" der Shapes.
Danke für weitere Ideen und Hilfe.
Gruß
Hans-Werner

 Bild

Beiträge aus den Excel-Beispielen zum Thema "PDF in Excel einfügen"