[Excel] Application
#1
Application.ScreenUpdating = False
Application.ScreenUpdating = True


Die Bildschirmaktualisierung wird ab- und wieder eingeschaltet. Das verhindert einen flackernden Bildschirm und beschleunigt damit unseren VBA Code.


Beispielcode:
Code:
'2 Tabellenblätter müssen existieren

Sub Bildschirmaktualisierung()
Dim i As Long
Dim j As Long
MsgBox "Bitte beobachten Sie das Tabellenblatt!"
For i = 1 To 2
    If i = 2 Then
        Application.ScreenUpdating = False
        MsgBox "Haben Sie das gesehen? Wir starten ohne Bildschirmaktualisierung."
    End If
        For j = 1 To 100
           Worksheets(1).Activate
           Worksheets(2).Activate
        Next
Next
MsgBox "Der zweite Durchlauf wurde beendet!"
Application.ScreenUpdating = True
End Sub



Application.Calculation = xlCalculationManual

Automatische Berechnungen werden in Excel, beim Start, abgeschaltet. Soll also etwas berechnet werden, so muss das manuell geschehen. Dies geschieht mit der Taste F9.


Beispielcode in "Diese Arbeitsmappe":
Code:
Private Sub Workbook_Open()
Application.Calculation = xlCalculationManual
End Sub


Application.Calculation = xlCalculationAutomatic

Schliessen wir Excel, so schalten wir die automatischen Berechnungen wieder ein.


Beispielcode in "Diese Arbeitsmappe:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Calculation = xlCalculationAutomatic
End Sub


Application.CalculateBeforeSave = True

Wir wollen dass vor dem Speichern unserer Excel Datei noch berechnet wird .


Beispielcode in "Diese Arbeitsmappe:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.CalculateBeforeSave = True
End Sub



Application.DisplayAlerts = False

Bestimmte Meldungen, von Excel, werden unterdrückt. Würde man zum Beispiel eine Datei unter einem Namen abspeichern, welcher schon einmal existiert, so sagt uns das Excel sofort an. Es gibt aber Situationen wo das nicht gewünscht ist.


Beispielcode:
Code:
Sub Warnungen_abschalten()
Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:="Test.xls"
End Sub



Application.Quit

Excel wird ohne Nachfrage- ohne speichern beendet


Beispielcode:
Code:
Sub excel_ohne_nachfrage_schliessen()
Application.DisplayAlerts = False
Application.Quit
End Sub


Es werden erst alle Excel Tabellen gespeichert - danach werden alle Arbeitsmappen (Excel allgemein) geschlossen.


Beispielcode:
Code:
Sub excel_ohne_nachfrage_schliessen2()
Dim wbk As Workbook
For Each wbk In Application.Workbooks
    wbk.Save
Next
Application.Quit
End Sub



Application.Run

Mit diesem Befehl kann man ein Makro, welches sich in einem anderen Workbook, einer anderen Excel Datei, befindet, starten.


Beispielcode:
Code:
Sub Makro_starten()
Application.Run "Test.xls!Macro1"
End Sub



Application.Inputbox

Es handelt sich hierbei um eine Erweiterung der uns bekannten Inputbox. Man kann der Inputbox verschiedene Rückgabeparameter zuordnen:


Code:
Rückgabeparameter einer Inputbox:

-   0 = Eingabe ist eine Formel
-   1 = Eingabe ist eine Zahl
-   2 = Eingabe ist Text (Zeichenfolge)
-   3 = Eingabe ist Text und Zahl
-   4 = Eingabe ist ein logischer Wert (True oder False)
-   8 = Eingabe ist ein Zellbezug, z.B. ein Range-Objekt
- 16 = Eingabe ergibt einen Fehlerwert, z.B. ‚#N/A
- 64 = Eingabe ist eine Wertematrix

Beispielcode:
Code:
Sub Bereich_Markieren_und_loeschen()
Dim rngbereich As Range
Set rngbereich = Application.InputBox("Bitte markieren Sie den Bereich der gelöscht werden soll", "Löschen", Type:=8)
    rngbereich.ClearContents
End Sub



Application.CutCopyMode = False

Weder Cut noch Copy sind im Ausschneide- oder im Kopiermodus.
Die Folge dieser Anweisung ist die Leerung der Zwischenablage und die Aufhebung des blinkenden Rahmens, den man durch Range.Copy, oder Cut, erzeugt hat.

Application.CutCopyMode = xlCopy

Ist CutCopy im Kopiermodus?

Application.CutCopyMode = xlCut

Ist CutCopy im Ausschneidemodus?


Beispielmakro hinter einem Tabellenblatt:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngBereich As Range
Set rngBereich = Range("A1:E5")
Set rngBereich = Intersect(Target, Range("A1:E5"))
If Not rngBereich Is Nothing Then
    If Application.CutCopyMode = xlCopy Or Application.CutCopyMode = xlCut Then
        Application.CutCopyMode = False
        MsgBox "Kopieren und Ausschneiden verboten"
    End If
End If
End Sub



Application.EnableEvents = False

Ein Workbook_Change-Ereignis wird nur einmal ausgeführt.



Application.Goto

Application.Goto ist im weitesten Sinne eine Art von Select. Wir können mit diesem Befehl eine Zelle, oder einen Bereich selektieren.


Mit
Code:
Application.Goto Cells(70, 1)

machen wir einen Sprung zu dieser Zelle, welche auch in einem anderen Tabellenblatt liegen könnte. Nutzen wir zusätzlich den Anhang ", scroll:=True", also:


Code:
Application.Goto Cells(70, 1), scroll:=True

wird die Zelle 70,1 auf unserem Bildschirm direkt in die linke obere Ecke gesetzt.

Einen Bereich würden wir so ansprechen:

Code:
Application.Goto Reference:=Worksheets("Tabelle1").Range("$L$72:$O$76")



Application.WorksheetFunction

Hiermit können wir Arbeitsblattfunktionen (Summe, Min, Max, etc) in einen VBA Code einbauen.


Beispielcode:
Code:
Sub rechnen()
Range("B1") = Application.WorksheetFunction.Sum(Range("A1:A100"))
End Sub

Wissen ist Macht - es ist aber nicht schlimm nicht alles zu wissen.
Man muss nicht alles wissen - man muss nur wissen wo es steht, oder wo man Hilfe bekommt.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste