2.1k Aufrufe
Gefragt in Tabellenkalkulation von korfuweb Mitglied (949 Punkte)
Hallo Supprotgemeinde,

hab mal wieder so ein Problemchen.

folgender IST-Zustand

habe eine Tabelle in Excel, nun möchte ich eben per Makro an der aktiven Position eine "Zeile" kopieren und ebenfalls gleich einfügen.
Das sollte ja problemlos machbar sein. Allerdings hat die Sache einen kleinen Hacken.

Das Arbeitsblatt ist mit folgendem Makro versehen:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B3000")) Is Nothing Then Call CopyPA
End Sub

was ja heisst wird die Zelle "aktiv" führt er automatisch das Makro "COPYPA" aus.

Und da liegt das Problem, Versuche ich die Zeile zu makieren, wird ja immer sofort das genannte Makro ausgeführt und somit is Nix mit kopieren.
Vieleicht kennt ja jemand ne Lösung wie man das kurzfristik deaktivieren bzw. aktivieren kann.

Gruß Volker

7 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Volker,

Select braucht man in VBA zu 99,9% nicht. mache das kopieren und einfügen per VBA.

Gruß Hajo
0 Punkte
Beantwortet von korfuweb Mitglied (949 Punkte)
Halo Hajo,

wollte ich ja und zwar wie folgt :
Sub XZKOPIE()
i = ActiveCell.Row
Rows(i + 1 & ":" & i + 1).Select
Selection.Insert Shift:=xlDown
Rows(i & ":" & i).Select
Selection.Copy
Range("A" & i + 1).Select
ActiveSheet.Paste
End Sub

Aber da habe ich ja eben auch das Problem mit dem "automatisch" ausgeführtem Makro.

Gruß
Volker
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Volker,

Option Explicit

Sub XZKOPIE()
i = ActiveCell.Row
Rows(i + 1 & ":" & i + 1).Insert Shift:=xlDown
Rows(i & ":" & i).Copy Range("A" & i + 1)
End Sub

Gruß Hajo
0 Punkte
Beantwortet von korfuweb Mitglied (949 Punkte)
Klasse !

Funktioniert soweit, er führt zwar das "automakro" immer noch aus aber jetzt zumindest nachdem er die Zeile eingefügt hat. dait kann ich ja im Moment noch leben.

Nur noch eine kurze Frage, kann ich dem "Kopier" makro irgendwie sagen, das er immer die Zeile 1999 an die aktuelle Stelle einfügen soll?
(Somit krieg ich dann immer ne schöne Leerzeile incl. den enthaltenen Formeln!

Gruß
Volker
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

vielleicht hilfreich

grus nighty

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Selection.Count < 2 Then
If Not Intersect(Target, Range("B1:B3000")) Is Nothing Then Call CopyPA
End If
Application.EnableEvents = True
End Sub
0 Punkte
Beantwortet von korfuweb Mitglied (949 Punkte)
@ nighty

Danke für Deine Antwort

könntest du mir deinen Code mal bischen erläutern !
Will das ja schließlich lernen und mich würde da schon interessieren was der Code genau macht.
Gruß
Volker
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi volker ^^

bin aber nicht so gut im beschreiben :-))

gruss nighty

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'1) schaltet ein ereignis ab,um einen erneuten auftuf innerhalb des ereignisses zu umterbinden
Application.EnableEvents = False
'2)sollte ein bereich kopiert und eingefuegt werden,wird das ereignis ausgeloest,hier bewirkt die abfrage das dein code nur bei einer einzelnen zelle (wechsel des inhaltes) ausgefuehrt wird,daher <2 waere eine einzelne zelle
If Selection.Count < 2 Then
If Not Intersect(Target, Range("B1:B3000")) Is Nothing Then Call CopyPA
End If
'1) schaltet ein ereignis wieder an
Application.EnableEvents = True
End Sub
...