2017-06-26 2 views
0

Wie kürze ich diesen Code, um die Aufgabe zu wiederholen, aber nehmen Sie weniger Platz? Dieser Code muss für 27 weitere Benutzer ausgeführt werden. Ich weiß, ich bin ein total Noob gerade jetzt, aber dies würde meine Arbeit für mehr Leichtigkeit als eine Stunde täglich ...Verkürzen Sie VBA-Code mit Wiederholung/Schleife


Workbooks.Open ("https://blabla/Edgars/2017 Q3Q4/Edgars.xlsx") 
Workbooks("Edgars.xlsx").Activate 

Range("C24:AN27").Select 
Selection.Copy 
Workbooks("abc.xlsx").Activate 
Sheets("Edgars").Activate 
Range("C24:AN27").Select 
ActiveSheet.Paste 
Workbooks("Edgars.xlsx").Activate 
Sheets("Edgars").Activate 
Range("C33:AN36").Select 
Selection.Copy 
Workbooks("abc.xlsx").Activate 
Sheets("Edgars").Activate 
Range("C33:AN36").Select 
ActiveSheet.Paste 
Workbooks("Edgars.xlsx").Activate 
Sheets("Edgars").Activate 
Range("C42:AN45").Select 
Selection.Copy 
Workbooks("abc.xlsx").Activate 
Sheets("Edgars").Activate 
Range("C42:AN45").Select 
ActiveSheet.Paste 

Workbooks("Edgars.xlsx").Activate 
Sheets("Edgars").Select 
ActiveWindow.SelectedSheets.Delete 
Workbooks("abc.xlsx").Activate 
Sheets("Edgars").Select 
Sheets("Edgars").Copy Before:=Workbooks("Edgars.xlsx"). _ 
    Sheets(1) 
Workbooks("Edgars.xlsx").Activate 
Range("A1").Select 
ActiveWorkbook.SaveAs Filename:="https://blabla/Edgars/2017 Q3Q4/Edgars.xlsx" 
ActiveWorkbook.Close 
Workbooks("abc.xlsx").Activate 
Worksheets("TOOLS").Activate 

Application.DisplayAlerts = True 
Else 
End If 

+0

Sie sollten weitere Informationen hinzufügen, die den Zweck Ihres Codes kurz beschreiben (und/oder einige Kommentare hinzufügen). Auch ist mir nicht klar, was du mit "Shorten" meinst. Gibt es mehrere Dateien, die den Code durchlaufen müssen? Und wenn ja, gibt es eine Art Benennungsstruktur? – Noceo

+1

https://StackOverflow.com/Questions/10714251/How-to-avoid-using-select-in-excel-vba-macros –

+0

Was genau dauert Sie eine Stunde? Den Code ausführen oder die Werte innerhalb des Codes anpassen? Die Verwendung einer Schleife beliebiger Art führt höchstwahrscheinlich nicht zu nennenswerten Änderungen der Ausführungsgeschwindigkeit. –

Antwort

1

Bevor Sie beginnen Schleifen Angreifen, oder den Code zu verkürzen, können Sie wollen auf Select und Activate in VBA auffrischen. Ihr Code ist in seiner aktuellen Form schwer zu lesen oder zu verbessern, da Sie viele implizite Beziehungen verwenden.

Zum Beispiel:

Workbooks("Edgars.xlsx").Activate 
Sheets("Edgars").Activate 

Ist eigentlich:

Application.Workbooks("Edgars.xlsx").Activate 
ActiveWorkbook.Sheets("Edgars").Activate 

Und kann geändert werden:

Application.Workbooks("Edgars.xlsx").Worksheets("Edgars").Activate 

Natürlich beseitigt diese nicht das Activate Problem, und Sie‘ Es wird zweifellos ein Problem auftreten, wenn "Edgars.xlsx" keine offene Arbeitsmappe ist. Dieses Beispiel ist nicht gemeint zu lösen Ihr Problem, es ist nur Mittel, um Sie in die richtige Richtung zu zeigen.

Sobald Sie Ihren Code umgestalten, um die Verwendung von Activate, Select und die impliziten (nicht qualifizierten) Referenzen zu vermeiden, können Sie sich mit String-Variablen beginnen. So etwas ist gültiger Code:

Dim UserName as String 
UserName = "Edgars" 
Application.Workbooks(UserName & ".xlsx").Worksheets(UserName).Activate 

Dies ermöglicht Ihrem Code größere Flexibilität und bringt Sie einen Schritt näher.

Meine Empfehlung wäre hier zu starten: How to avoid using Select in Excel VBA macros. Sobald Sie diesen Beitrag gelesen haben, versuchen Sie, diese Schritte in Ihrem Code zu implementieren. Dann lies etwas mehr und versuche es noch einmal.

richtige VBA Lernen braucht ein bisschen eine einmalige Investition, aber wenn Sie lernen, wie VBA gut codieren können Sie sich viel mehr Zeit als nur eine Stunde sparen (Sie für mehr als nur ein verwenden Excel vorausgesetzt verarbeiten).

Viel Glück!

+0

Cool, das gibt mir schon etwas zum arbeiten. Nett, danke! –

+0

Vergessen Sie nicht, Ihre Frage als beantwortet zu markieren. Ich bin froh, dass ich helfen konnte :). –

Verwandte Themen