Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1336to1340
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

Geht das nicht auch kürzer / einfacher?

Geht das nicht auch kürzer / einfacher?
30.10.2013 17:38:55
Thorsten_Z
Moin liebes Forum,
Ich sichere mit folgendem Code Daten von einer Exceldatei in eine andere (Bunker.xlsx).
Mich nervt das ständige Activate. Da ist immer "Disco" auf dem Bildschirm... :-)
und ich schätze so wie der Code im Moment ist, ist es auch nicht die schnellste Variante, oder?
Geht das auch anders? und wenn ja wie?
Mit Application.screenupdating = False geht es jedenfalls nicht
Sub sichern()
Range("AH6:AI44").Copy
Windows("Bunker.xlsx").Activate
Range("A" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWindow.Visible = False
i = i + 39
... noch viel mehr code
End Sub

vielen Dank für eure Tipps
Besten Gruß
Thorsten

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Geht das nicht auch kürzer / einfacher?
30.10.2013 18:52:51
Thorsten_Z
Hallo Daniel,
danke für den Link. Das wusste ich auch schon. Es ist ja nicht so, dass ich es nicht mit
Workbooks("Bunker.xlsx").Range("A" & i) = ActiveWorkbook.Range("P6:Q44")
probiert hätte.
Aber da gibt er mir eine Fehlermeldung. Theoretisch bin ich damit doch auf dem richtigen Weg, oder?
Wo hapert es bei dieser Codezeile?
Gruß
Thorsten

Sheet nach ActiveWorkbook?... owT
30.10.2013 18:55:09
robert

sheet ist am Anfang vom Code schon gewählt... owT
30.10.2013 19:04:00
Thorsten_Z

Anzeige
hier mal der Anfang...
30.10.2013 19:05:38
Thorsten_Z

Sub Sichern()
Dim scsvPath As String
Dim zusatz As String
Dim Pfad As String
Dim zZeile As Long
Dim dname As String
Dim ganz As String
Dim i As Long
i = 1
Sheets("Jan").Select
scsvPath = ActiveWorkbook.Path & Application.PathSeparator
zusatz = "Sicherungen\"
dname = "Bunker.xlsx"
Pfad = scsvPath & zusatz
ganz = scsvPath & zusatz & dname
If Dir(Pfad) = "" Then
MsgBox "Ordner ''Sicherungen'' nicht vorhanden!"
Exit Sub
End If
'On Error GoTo Errorhandler
Workbooks.Open Filename:=ganz
ActiveWindow.Visible = False
Application.ScreenUpdating = True
'Range("P6:Q44").Copy
Workbooks("Bunker.xlsx").Range("A" & i) = ActiveWorkbook.Range("P6:Q44") 'Mein Versuch
i = i + 39
Range("AH6:AI44").Copy
Windows("Bunker.xlsx").Activate
Range("A" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWindow.Visible = False
i = i + 39
End Sub

Anzeige
ein Beispielcode......... so geht es.....
30.10.2013 19:07:52
robert

Sub tt()
Workbooks("Mappe2.xlsx").Sheets(1).Range("A5") = ActiveWorkbook.Sheets(1).Range("A1")
End Sub
Gruß
robert

AW: Geht das nicht auch kürzer / einfacher?
30.10.2013 19:09:14
Daniel
Hi
wennd du die Sheetangabe weglässt, dann setzt Excel automatsich das aktive Sheet ein.
Das aktive Sheet liegt aber immer auf dem aktiven Workbook, deswegen darf man dann das Workbook nicht vorgeben.
die Referenzierungshierachie Workbooks().Sheets().Range() musst du einhalten.
Du kannst zwar was weglassen, dann aber immer nur vollständig von links und nicht mittendrin.
Gruß Daniel

Anzeige
WorkBook.Range
30.10.2013 19:32:57
Uduuh
Hallo,
ein Workbook hat keine Range-Eigenschaft.
Nach dem Motto sollte es funktionieren:
Sub Sichern()
Dim scsvPath As String
Dim zusatz As String
Dim Pfad As String
Dim zZeile As Long
Dim dname As String
Dim ganz As String
Dim i As Long
Dim wksAkt As Worksheet, wksBunker As Worksheet
i = 1
Sheets("Jan").Select
scsvPath = ActiveWorkbook.Path & Application.PathSeparator
zusatz = "Sicherungen\"
dname = "Bunker.xlsx"
Pfad = scsvPath & zusatz
ganz = scsvPath & zusatz & dname
If Dir(Pfad) = "" Then
MsgBox "Ordner ''Sicherungen'' nicht vorhanden!"
Exit Sub
End If
Application.ScreenUpdating = False
Set wksAkt = ActiveSheet
'On Error GoTo Errorhandler
Workbooks.Open Filename:=ganz
Set wksBunker = ActiveSheet
wksAkt.Range("P6:Q44").Copy
wksBunker.Range("A" & i).PasteSpecial xlPasteValues
i = i + 39
wksAkt.Range("AH6:AI44").Copy
wksBunker.Range("A" & i).PasteSpecial xlPasteValues
i = i + 39
End Sub
Gruß aus’m Pott
Udo

Anzeige
AW: WorkBook.Range
30.10.2013 19:48:00
Thorsten_Z
Hallo zusammen,
@Daniel: Danke für den Theorieteil! Bei sowas merke ich immer, wie wenig ich über VBA weiß.
@Robert: Danke für den Code. Nachdem ich .value ergänzt hatte ging es. Ich kann dann aber nicht mehr mit der Variabel "i" arbeiten! oder doch?
Der Code von dir, Udo, kommt mir am nächsten! Da brauche ich am wenigsten in meinem Code umändern! Danke dir.
Und sowieso danke an Alle!
Schönen Abend noch
Gruß
Thorsten

ApplicationScreenUpdating = False
30.10.2013 21:46:41
Yal
Hallo Thorsten,
das Code selbst sieht nicht mal so schlecht aus. Wenn aber der Stroboscope dich stört, versucht mit
Application.ScreenUpdating = False
...Code
Application.ScreenUpdating = True
Stelle aber sicher, dass trotz Code-Abbruch der ScreenUpdating wieder aktiviert wird. Sonst muss Du die
Application.ScreenUpdating = True
im Direktfenster ausführen.
Viel Erfolg
Yal

Anzeige
AW: ApplicationScreenUpdating = False
30.10.2013 22:07:50
Daniel
Hi
nö, Screenupdating schaltet sich in der Regel von alleine wieder an.
hab noch nie was gegenteiliges erlebt.
die Einstellungen, die nach Codeende erhalten bleiben, wären:
- Application.Calculation
- Application.EnableEvents
aber auch hier sollte man gut überlegen, ob man dafür eine Fehlerroutine einbaut oder nicht.
solange sich die Code noch in der Test- und Entwicklungsphase befindet, sorgt so eine Fehlerbehandlungsroutine nur dafür, das wichtige Informationen, die zur schnellen Fehlerbehebung erforderlich sind, verloren gehen.
Gruß Daniel

http://vbanet.blogspot.co.at/ sagt das....
31.10.2013 16:22:38
robert
On Error GoTo Fin
' Die Excelapplikation wird ruhig gestellt - UNBEDINGT wieder einschalten
With Application
.ScreenUpdating = False
blnUpdate = .AskToUpdateLinks
.AskToUpdateLinks = False
.EnableEvents = False
lngCalc = .Calculation
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With

Anzeige
das sagt zunächst noch gar nichts darüber aus..
01.11.2013 11:43:13
Daniel
ob sie das ScreenUpdating hinter wieder einschalten oder nicht.
Gruß Danuiel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige