Microsoft Excel Skriptsprache Visual Basic für Applikationen , hat viele Werkzeuge für die Erweiterung von Excel standardmäßig Fähigkeiten. Ein solches Tool ist die Möglichkeit, Steuerelemente (z. B. Kontrollkästchen und Schaltflächen ) direkt auf Tabellen hinzufügen. Mit Visual Basic- Steuerelemente und ihre Fähigkeit, sich in Excel die Kernfunktionen tippen macht für eine effektive Verbesserung Tutorial in Excel über Visual Basic für Applikationen. Projekt: Verwenden von Visual Basic zu Teilergebnisse
Berechnen Durchführung einer Projekt -Computing Teilergebnisse für die Spalten in einem Arbeitsblatt Tisch. Beginnen Sie mit dem Öffnen von Excel und Erstellen einer Tabelle irgendwo im Arbeitsblatt. Die Tabelle zunächst aussieht wie der Tabelle in Abbildung 1 .
Wählen Sie die Tabelle , einschließlich der Spaltenüberschriften , und erstellen Sie den Namen " myTab " für diese Tabelle . Erstellen Sie den Namen , indem Sie es in Excel Name des Box , die in Richtung der oberen linken Ecke des Excel Arbeitsbereich ist .
In Visual Basic -Steuerelemente
hinzufügen Checkboxen auf den Tisch , mit jedem Kästchen sitzt oberhalb einer Spalte der Tabelle . Sie können die Kontrollkästchen unter Entwicklers> Einfügen> Formular-Steuerelemente zu finden. Auch fügen Sie zwei Schaltflächen zu dem Arbeitsblatt . Drag-and- Drop aus der gleichen Gegend wie die Checkboxen , links und rechts von der myTab Tisch. Rechter Mausklick auf die linke Taste und ändern Sie den Text zu lesen " Do Teilergebnisse . " Ändern Sie den Text der rechten Maustaste auf " Entfernen Zwischensummen . "
Position der Buttons und Checkboxen so Ihren Tisch sieht aus wie die Tabelle in Abbildung 2 .
Schreiben des Codes
Jetzt haben Sie die Tabelle und ihre Kontrollen so konzipiert , schreiben Sie den Code, der die Teilergebnisse auf dem Tisch hat . Geben Sie die Visual Basic -IDE ( Integrated Development Environment) und fügen Sie ein Modul . Klicken Sie auf Einfügen > Modul . Im Code-Fenster des neuen Moduls , geben Sie diesen Programmcode:
Option Explicit Public Sub
doSubtotal ()
Dim s As StringDim r Wie RangeDim c Wie ObjectDim ar () As IntegerDim IField Wie IntegerDim varItemsDim As Integer
ReDim ar (0 To 0)
nChkd 'entfernen vor subtotalsRemoveSubtotals
' das Array von Feldern Indizes ( ab 1) ein Teilergebnis
IField = 1nChkd = 0
'Schleife durch Checkboxen . Wenn man überprüft , fügen ihrem Gebiet zu jedem c In ActiveSheet.CheckBoxes
arrayFor If ( c.Value = 1) = ThennChkd nChkd + 1 ' hinzufügen, um dieses Feld zu Feld
ar ( UBound (ar) ) = iFieldReDim Preserve ar (0 To UBound (ar) + 1 ) 'add -Element für das nächste ausgewählte Feld
End If
IField = IField + 1
Weiter
( nChkd = 0) ThenMsgBox ( " Bitte wählen Sie mindestens ein Feld . " ) Ausfahrt SubEnd Wenn
ReDim Preserve ar (0 To UBound (ar) - 1) 'entfernen leer letzten elementvarItems = ar
'Do tatsächlichen Wert . Suchen Sie zunächst die Reihe zu tun
Set r = Application.Names ( " myTab " ) Zwischensumme RefersToRange ' abzurufen den benannten Bereich zu Zwischensumme
r.Subtotal GroupBy : . = 1, Funktion : = xlSum , TotalList : = varItems , SummaryBelowData : = xlSummaryBelow
End Sub Public Sub
RemoveSubtotals ()
' zur vorherigen Wert prüfen , mit Lagerung durch den Kommentar versehen Feld in der Namespace für myTab (siehe Formeln > Name Manager ) " Wir speichern die Tabelle ursprünglichen , ersten Spalte . Wenn die aktuelle Tabelle ab Spalte unterscheidet , müssen wir zu Tisch ursprünglichen Speicherort wiederherstellen .
Dim r Wie RangeDim s Wie StringDim nOrigCol As Integer
Set r = Application.Names ( " myTab " ) . RefersToRanges = Application.Names ( " myTab " ) . Anmerkung
' Kein Kommentar bedeutet keine vorherigen Durchlauf , also keine Entfernung vor Zwischensumme oder Anpassung der ursprünglichen Bereich , erforderlich ist.
"Aber , speichern Sie die Tabelle ab Spalte für nächsten Aufruf dieser function.If (s = "") ThenApplication.Names ( " myTab " ) Comment = r.ColumnExit SubEnd Wenn
Application.Range ( . "a1 : xfd65536 "). RemoveSubtotal
' anpassen Bereich : eine Spalte zu entfernen , wenn man war addednOrigCol = CInt ( s ) If ( nOrigCol < r.Column ) Thenr.Previous.EntireColumn.Delete
End If
End Sub
Führen Sie das Programm
Zurück zur Excel Arbeitsblatt, das die myTab Tabelle hat . Ordnen Sie die Tasten, um die Makros Sie gerade schrieb . Rechtsklick auf das "Do Teilergebnisse "-Taste und wählen Sie " Makro zuweisen. " In dem Dialogfeld, das angezeigt wird, wählen Sie die " doSubtotal " -Funktion, die Teil der Code, den Sie gerade geschrieben ist . Schließen Sie den Dialog mit "OK ", und weisen Sie den anderen Makrofunktion Sie schrieb , RemoveSubtotals , auf die andere Taste.
Führen Sie das Programm , indem Sie mit einer Kombination der Checkboxen und auf die Schaltfläche Teilergebnisse tun . Deaktivieren Sie die Teilergebnisse durch Drücken der anderen Taste.