Microsoft Excel

Herbers Excel/VBA-Archiv

Kopiervorlage per Makro einfügen

Betrifft: Kopiervorlage per Makro einfügen von: Marco
Geschrieben am: 19.08.2008 10:35:50

Hallo Forum,

ich habe ein kleines Problem und brauche Eure Hilfe!

Es geht um eine Tabelle, wo Veranstaltungen zeitcronologisch erfasst werden. Jeder neu hinzukommende Veranstaltung bekommt 2 Spalten zur Verfügung, welche hinsichtlich Formeln, Formatierungen usw. aus einer Kopiervorlage an die entsprechende Stelle eingefügt wird. In der Kopiervorlage sind viele geschützte Zellen (mit Formeln).

Zusätzlich ist festzuhalten, dass die Tabelle einen aktiven Blattschutz hat (aber alles erlaubt, was möglich ist) und freigegeben ist.

Nun bräuchte ich ein Makro, welches per Tastenkombination (z.B. Strg. Alt Z damit es nicht aus ersehen passiert) ausgeführt wird und folgendermaßen vorgeht:

1. Der Blattschutz müsste aufgehoben werden (ohne Passwort)
Hier habe ich den Befehl ActiveSheet.Protect UserInterfaceOnly:=True gefunden. Wenn vorher der "freigegebene Modus" ausgestellt werden muss (um den Blattschutz zu deaktivieren), machen wir dies vorher manuell. Vielleicht kann man ja eine Meldung ausgeben: "Bitte Freigabemodus ausschalten".

2. Im Bereich C1:D150 bzw. Spalte C und D ist die Kopiervorlage.

3. Diese sollte in den beiden rechten Spalten, neben der aktuellen Zelle (die Stelle wo das Makro per Tastenkombination gestartet wird) eingefügt werden. D.h., wenn ich z.B. in der Zelle K5 bin (oder K1 ... K120) und das Makro ausführe, fügt er zwei leere Spalten rechts ein (L und M) und kopiert die Kopiervorlage C1:D150 in den Bereich L1:M150. Es darf natürlich nichts überschrieben werden :-)

4. Der Blattschutz wird wieder aktiviert.

5. Die Arbeitsmappe wird wieder freigegeben. Kann auch wieder manuell passieren.

Würde mich sehr freuen, wenn mir jemand helfen könnte!

Danke!

Viele Grüße Marco

  

Betrifft: AW: Kopiervorlage per Makro einfügen von: Tino
Geschrieben am: 19.08.2008 12:13:54

Hallo,
hier mal ein Beispiel zum testen.

Sub Test()
 Dim lngCol As Long
 Dim NeuZelle As Range
 Dim Vorlage As Range
'Schutz aufheben
ActiveSheet.Unprotect "tino"
'Vorlage
 Set Vorlage = Range("C:D")
 'Spalte der aktiven Zelle
 lngCol = Selection.Column
 'Bereich für Neue Spalten
 Set NeuZelle = Columns(Range(Columns(lngCol).Address, Columns(lngCol + 1).Address).Address)
 'Neue Spalten einfügen
 NeuZelle.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
 'Vorlage in neuen Berich kopieren
  Vorlage.Copy Cells(1, ActiveCell.Column)
  'Schutz wieder setzen
ActiveSheet.Protect "tino"
End Sub



Die Tastenkombination, kannst du unter Extras- Makros- Makros… - Optionen festlegen.

Gruß Tino

www.VBA-Excel.de




  

Betrifft: AW: Kopiervorlage per Makro einfügen von: Marco
Geschrieben am: 19.08.2008 14:25:59

Hallo Tino,
vielen Dank für das Beispiel. Ich habe es zuerste in einer leeren Tabelle getestet und es hat wunderbar funktioniert. In der richtigen Umgebung passiert aber folgendes:

Es wird vor der jeweiligen aktiven Zelle zwei Spalten eingefügt und diese werden ausgeblendet.

Kann es sein, dass dies an der Kopiervorlage liegt?

Hier liegen zum einen sehr viele bedingte Formatierungen, Gültigkeiten und unterschiedlichste Formatierungen vor. Außerdem wurde "Über Auswahl zentrieren" benutzt, um bestimmte Zellen, als "verbundene Zellen" aussehen zu lassen.

Hast Du vielleicht noch eine Idee?

Vielen Dank!


  

Betrifft: AW: Kopiervorlage per Makro einfügen von: Tino
Geschrieben am: 19.08.2008 14:34:35

Hallo,
ohne Beispiel kann ich da nicht viel machen.

Du könntest höchstens dies mal Testen, aber ich weis nicht wie die Verbundenen Zellen darauf reagieren.

Sub Test()
 Dim lngCol As Long
 Dim NeuZelle As Range
 Dim Vorlage As Range
'Schutz aufheben
ActiveSheet.Unprotect "tino"
'Vorlage
 Set Vorlage = Range("C:D")
 'Spalte der aktiven Zelle
 lngCol = Selection.Column
 'Bereich für Neue Spalten
 Set NeuZelle = Columns(Range(Columns(lngCol).Address, Columns(lngCol + 1).Address).Address)
 'Neue Spalten einfügen
 NeuZelle.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
 'Vorlage in neuen Berich kopieren
  Vorlage.Copy Cells(1, ActiveCell.Column).PasteSpecial(xlPasteValues)
  'Schutz wieder setzen
ActiveSheet.Protect "tino"
End Sub



Gruß Tino


  

Betrifft: AW: Kopiervorlage per Makro einfügen von: Marco
Geschrieben am: 19.08.2008 15:06:16

Hallo Tino,

das kann ich verstehen.

Ich habe das Problem schon gefunden. Es war die der Bereich. Habe jetzt auf C1:D120 gesetzt und es funktioniert. Lustigerweise fügt er aber die Spalten vor der aktiven Zelle ein. Ist aber nicht weiter schlimm; Falls Du weißt warum, kannst Du es mir aber verraten!

Auf jeden Fall vielen Dank für Deine Hilfe!!!

Gruß Marco


  

Betrifft: AW: Kopiervorlage per Makro einfügen von: Tino
Geschrieben am: 19.08.2008 15:29:15

Hallo,
so könnte es gehen.


Set NeuZelle = _
Columns(Range(Columns(lngCol).Offset(0, 2).Address, Columns(lngCol + 1).Offset(0, 2).Address).Address)



und

Vorlage.Copy Cells(1, ActiveCell.Offset(0, 2).Column).PasteSpecial(xlPasteValues)



Gruß Tino


  

Betrifft: AW: Kopiervorlage per Makro einfügen von: Rudi Maintaire
Geschrieben am: 19.08.2008 15:34:06

Hallo,
aus der Fragestellung:

hinsichtlich Formeln, Formatierungen usw. aus einer Kopiervorlage 


das klappt aber nicht mit

.PasteSpecial(xlPasteValues)



Gruß
Rudi


  

Betrifft: AW: Kopiervorlage per Makro einfügen von: Tino
Geschrieben am: 19.08.2008 15:43:36

Hallo,
ja genau dann wäre die Vorlage nutzlos.

Deine Lösung ist ja super einfach, daran habe ich nicht gedacht.
Ich glaube ich denke zu viel um die Ecke. ;-)


Gruß Tino


  

Betrifft: AW: Kopiervorlage per Makro einfügen von: Rudi Maintaire
Geschrieben am: 19.08.2008 16:04:32

Hallo,

ist ja super einfach


das ist die Kunst. ;-)

Gruß
Rudi


  

Betrifft: AW: Kopiervorlage per Makro einfügen von: Tino
Geschrieben am: 19.08.2008 17:00:19

Hallo,
es ist aber auch eine Kunst den langen weg nach Rom
zu finden. ;-)

Gruß Tino


  

Betrifft: AW: Kopiervorlage per Makro einfügen von: Rudi Maintaire
Geschrieben am: 19.08.2008 15:30:12

Hallo,

Lustigerweise fügt er aber die Spalten vor der aktiven Zelle ein


Das ist doch auch so, wenn du es von Hand machst.

Sub tt()
  ActiveSheet.Unprotect
  ActiveCell.Offset(0, 1).Resize(, 2).EntireColumn.Insert
  Range("C1:D500").Copy Cells(1, ActiveCell.Column + 1)
  ActiveSheet.Protect
End Sub


Gruß
Rudi


  

Betrifft: AW: Kopiervorlage per Makro einfügen von: Marco
Geschrieben am: 19.08.2008 15:39:45

Danke für den Hinweis Rudi.

Musste gerade lachen. Klar fügt er es davor ein! Aber ist kein Problem für meien Fall. Das Problem ist für mich gelöst. Vielen Dank an Euch!

Viele Grüße

Marco