Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Werte kopieren VBA

187 views
Skip to first unread message

Peter Schuerer

unread,
Feb 20, 2014, 5:54:05 AM2/20/14
to
Hallo Zusammen,

ich muss aus Tabelle27 nur sichtbare Zellen kopieren und in Tabelle26
einfügen.
In Tabelle27 wird der Bereich B6:U25 berechnet und alle Spalten (die in
Zeile 25 NULL enthalten) per Makro ausgeblendet.
Bisher hat alles funktioniert, jetzt nicht mehr.
Der Bereich B5:U5 wird richtig kopiert und eingefügt. Nach dem Wechsel
von Tabelle26 in Tabelle27 werden noch andere Makros ausgeführt.
Nach dem kopieren von B25:U25 wird der ganze Bereich in Tabelle26 eingefügt.

Sub Stillstand_kopieren3()
'

'
ActiveSheet.Unprotect
On Error Resume Next
Range("B5:U5").Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Range("A3").Select
' ActiveSheet.Protect
[Tabelle26].Visible = xlSheetVisible
[Tabelle26].Activate
Range("E36").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=True, Transpose:=False
[Tabelle27].Select
Range("B25:U25").Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Range("A3").Select
[Tabelle26].Activate
Range("E37").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=True, Transpose:=False
Range("E36").Activate
Range("C36").Select
Range(Selection, Selection.End(xlToRight)).Select
ActiveWorkbook.Names.Add Name:="Stillgepl_RubrikJahr",
RefersTo:="=" + Selection.Address
Range("C37").Select
Range(Selection, Selection.End(xlToRight)).Select
ActiveWorkbook.Names.Add Name:="Stillgepl_WerteJahr", RefersTo:="="
+ Selection.Address
ActiveSheet.Calculate

[Tabelle26].Visible = xlSheetHidden
End Sub

Wie kann ich den Blattwechsel vermeiden?

Danke und Gruß
Peter

---
Diese E-Mail ist frei von Viren und Malware, denn der avast! Antivirus Schutz ist aktiv.
http://www.avast.com

Claus Busch

unread,
Feb 20, 2014, 6:10:01 AM2/20/14
to
Hallo Peter,

Am Thu, 20 Feb 2014 11:54:05 +0100 schrieb Peter Schuerer:

> ich muss aus Tabelle27 nur sichtbare Zellen kopieren und in Tabelle26
> einfügen.
> In Tabelle27 wird der Bereich B6:U25 berechnet und alle Spalten (die in
> Zeile 25 NULL enthalten) per Makro ausgeblendet.
> Bisher hat alles funktioniert, jetzt nicht mehr.
> Der Bereich B5:U5 wird richtig kopiert und eingefügt. Nach dem Wechsel
> von Tabelle26 in Tabelle27 werden noch andere Makros ausgeführt.
> Nach dem kopieren von B25:U25 wird der ganze Bereich in Tabelle26 eingefügt.

Select, Selection und Activate ist kein guter Programmierstil. Außerdem
flackert dann ständig der Bildschirm.
Du brauchst zum Einfügen nicht auf das Blatt gehen, wenn richtig
referenziert wird.
Probiere mal zum Kopieren:

With Sheets("Tabelle27")
.Unprotect
.Range("B5:U5").SpecialCells(xlCellTypeVisible).Copy
Sheets("Tabelle26").Range("E36").PasteSpecial _
Paste:=xlPasteValues
' ActiveSheet.Protect
.Range("B25:U25").SpecialCells(xlCellTypeVisible).Copy
Sheets("Tabelle26").Range("E37").PasteSpecial _
Paste:=xlPasteValues
End With

Wenn das Einfügen von Daten in Tabelle26 Events auslöst, kannst du das
mit
Application.EnableEvents=FALSE vor dem Code abstellen.
Musst dies aber am Ende des Codes wieder auf TRUE stellen


Mit freundlichen Grüßen
Claus
--
Win XP Prof SP3 / Vista Ultimate SP2
Office 2003 SP3 /2007 Ultimate SP3

Peter Schuerer

unread,
Feb 20, 2014, 5:42:22 PM2/20/14
to
Hallo Claus,

Am 20.02.2014 12:10, schrieb Claus Busch:

> Select, Selection und Activate ist kein guter Programmierstil.

Weiß ich, aber ich bin Autodidakt und gebe mein Bestes ;-)

> Probiere mal zum Kopieren:
>
> With Sheets("Tabelle27")
> .Unprotect
> .Range("B5:U5").SpecialCells(xlCellTypeVisible).Copy
> Sheets("Tabelle26").Range("E36").PasteSpecial _
> Paste:=xlPasteValues
> ' ActiveSheet.Protect
> .Range("B25:U25").SpecialCells(xlCellTypeVisible).Copy
> Sheets("Tabelle26").Range("E37").PasteSpecial _
> Paste:=xlPasteValues
> End With

Teste ich morgen, hoffe das es funktioniert.

> Wenn das Einfügen von Daten in Tabelle26 Events auslöst, kannst du das
> mit
> Application.EnableEvents=FALSE vor dem Code abstellen.
> Musst dies aber am Ende des Codes wieder auf TRUE stellen

Das Makro "Stillstand_kopieren3" ist ein eigenständiges Makro.
Kann ich hier bedenkenlos mit Application.EnableEvents= arbeiten oder
gibt es da vielleicht Probleme?

Sub Stillstand_kopieren3()

Application.EnableEvents=FALSE
ActiveSheet.Unprotect
' On Error Resume Next
Range("B5:U5").Select
...
...
...
Application.EnableEvents=TRUE
End Sub

Claus Busch

unread,
Feb 21, 2014, 1:48:50 AM2/21/14
to
Hallo Peter,

Am Thu, 20 Feb 2014 23:42:22 +0100 schrieb Peter Schuerer:

> Das Makro "Stillstand_kopieren3" ist ein eigenständiges Makro.
> Kann ich hier bedenkenlos mit Application.EnableEvents= arbeiten oder
> gibt es da vielleicht Probleme?

du bekommst Probleme, wenn du in einen Fehler läufst und das Makro
stoppt. Dann wird EnableEvents nicht mehr eingeschaltet. Deshalb
verpackst du das am Besten in eine Fehlerroutine.
Außerdem musst du weder für das Kopieren noch für das Erstellen der
Bereichsnamen das Blatt26 sichtbar machen.
Probiere mal:

Sub Stillstand_kopieren3()
Dim myRng As Range
Dim LCol As Long

With Application
.ScreenUpdating = False
.EnableEvents = False
End With

On Error GoTo AUS
With Sheets("Tabelle27")
.Unprotect
.Range("B5:U5").SpecialCells(xlCellTypeVisible).Copy
' .Protect
Sheets("Tabelle26").Range("E36").PasteSpecial xlPasteValues
.Range("B25:U25").SpecialCells(xlCellTypeVisible).Copy
Sheets("Tabelle26").Range("E37").PasteSpecial Paste:=xlPasteValues
End With

With Sheets("Tabelle26")
LCol = .Cells(36, 3).End(xlToRight).Column
Set myRng = .Range(.Cells(36, 3), .Cells(36, LCol))
ActiveWorkbook.Names.Add Name:="Stillgepl_RubrikJahr", _
RefersTo:=myRng

LCol = .Cells(37, 3).End(xlToRight).Column
Set myRng = .Range(.Cells(37, 3), .Cells(37, LCol))
ActiveWorkbook.Names.Add Name:="Stillgepl_WerteJahr", _
RefersTo:=myRng
.Calculate
.Visible = xlSheetVeryHidden
End With
AUS:
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub

Peter Schuerer

unread,
Feb 21, 2014, 5:39:46 PM2/21/14
to
Hallo Claus,

Am 21.02.2014 07:48, schrieb Claus Busch:

> du bekommst Probleme, wenn du in einen Fehler läufst und das Makro
> stoppt. Dann wird EnableEvents nicht mehr eingeschaltet. Deshalb
> verpackst du das am Besten in eine Fehlerroutine.
> Außerdem musst du weder für das Kopieren noch für das Erstellen der
> Bereichsnamen das Blatt26 sichtbar machen.
> Probiere mal:
>
> Sub Stillstand_kopieren3()

Ich habe Dein Makro etwas angepasst und es funktioniert (wie immer)
einwandfrei.
Das mit EnableEvents und der Fehlerroutine ist eine große Hilfe.

HR Ernst

unread,
Feb 22, 2014, 4:13:15 AM2/22/14
to
Am Fri, 21 Feb 2014 23:39:46 +0100 schrieb Peter Schuerer:

[...]
> ---
> Diese E-Mail ist frei von Viren und Malware, denn der avast! Antivirus Schutz ist aktiv.
> http://www.avast.com

Wenn du hier schreibst, ist das *keine* E-Mail. Du kannst dieses sinnfreie
Geschreibsel in Avast abstellen.

--
Gruß

H.-R. Ernst
0 new messages