Microsoft Excels scriptsprog , Visual Basic for Applications , har mange værktøjer til at udvide Excels standard kapaciteter. Et sådant værktøj er evnen til at føje kontrolelementer (såsom afkrydsningsfelter og knapper ) direkte på regneark. Ved hjælp af Visual Basic kontroller og dens evne til at udnytte Excels kernefunktioner gør for en effektiv tutorial i at styrke Excel via Visual Basic for Applications. Projekt : Brug Visual Basic til Compute subtotaler
Foretage et projekt af computing subtotaler for de kolonner i et regneark tabel. Begynd med at åbne Excel og oprette en tabel overalt i regnearket. Tabellen oprindeligt ligner tabellen i Illustration 1 .
Vælg tabellen , herunder kolonneoverskrifterne , og skabe navnet " myTab " for denne tabel. Opret navn ved at indtaste den i Excel navn Box, som er mod det øverste venstre hjørne af Excel arbejdsområdet.
Tilføj Visual Basic Controls
Tilføj afkrydsningsfelter til bordet , hvor hver afkrydsningsfeltet sidder over et bord kolonne. Du kan finde afkrydsningsfelterne under Developer > Indsæt > Formular Controls. Også tilføje to knapper til regnearket . Træk og slip dem fra samme område som afkrydsningsfelterne til venstre og højre for myTab bordet. Højreklik på den venstre knap og ændre sin tekst til at læse "Gør Subtotaler . " Ændre teksten i højre knap for at "Fjern Subtotaler . "
Position knapper og afkrydsningsfelter , så dit bord ligner tabellen i Figur 2 .
Skriv koden
nu hvor du har designet bordet og dens kontrolelementer , du vil skrive koden , der gør subtotalerne på bordet. Indtast Visual Basic IDE ( integreret udviklingsmiljø ), og tilføjer et modul . Klik på Indsæt > Modul . I kodevinduet af det nye modul , indtaste denne program kode : Hej
Option Explicit
Public Sub doSubtotal ()
Dim s Som StringDim r Som RangeDim C som ObjectDim ar () Som IntegerDim Ifield Som IntegerDim varItemsDim nChkd As Integer
ReDim ar ( 0 Til 0)
'Fjern tidligere subtotalsRemoveSubtotals
' Opret den vifte af felter indeks (startende fra 1 ) til subtotal
Ifield = 1nChkd = 0
' Loop igennem afkrydsningsfelter . Hvis man er markeret , skal du tilføje sit felt til arrayFor Hver ci ActiveSheet.CheckBoxes
p Hvis ( c.Value = 1) ThennChkd = nChkd + 1 ' føje dette felt til matrix
ar ( UBound ( ar) ) = iFieldReDim Preserve ar ( 0 Til UBound ( ar) + 1) "tilføje element for næste markerede felt
End If
Ifield = Ifield + 1
Næste
Hvis ( nChkd = 0) ThenMsgBox ( "Please tjek mindst en kasse ". ) Afslut SubEnd Hvis
ReDim Preserve ar ( 0 Til UBound ( ar) - 1) 'Fjern tom sidste elementvarItems = ar
' Do faktiske subtotal . Først skal du finde området til at gøre subtotal
Set r = Application.Names ( " myTab " ) RefersToRange ' hente det navngivne område til subtotal
r.Subtotal GroupBy : . = 1, Function : = xlSum , TotalList : = varItems , SummaryBelowData : = xlSummaryBelow
End sub
Public sub RemoveSubtotals ()
' Check for tidligere subtotal , ved hjælp af storage leveres af kommentaren felt i Namespace for myTab (se formler > Name manager) ' Vi gemmer tabellens originale , første kolonne. Hvis den aktuelle tabels start kolonne adskiller , har vi at genskabe tabellen til den oprindelige placering.
Dim r Da RangeDim s Som StringDim nOrigCol As Integer
Set r = Application.Names ( " myTab "). RefersToRanges = Application.Names ( " myTab "). kommentar
' ingen kommentarer betyder ingen forudgående løb , så ingen fjernelse af tidligere subtotal , eller justering af den oprindelige interval, der er behov for .
"Men , skal du gemme tabellens start kolonnen for næste opkald til denne funktion.Hvis ( s = "" ) ThenApplication.Names ( " myTab " ) Kommentar = r.ColumnExit SubEnd Hvis
Application.Range ( ". a1 : xfd65536 "). RemoveSubtotal
' Juster rækkevidde: fjerne en kolonne, hvis en var addednOrigCol = Cint (r) Hvis ( nOrigCol < r.Column ) Thenr.Previous.EntireColumn.Delete
End If
End Sub
Kør programmet
Retur til Excel-regneark , der har den myTab bordet. Tildel knapperne til makroer, du lige skrev . Højreklik på "Gør Subtotaler " knappen og vælg " Tildel makro. " I den dialogboks , der vises , skal du vælge " doSubtotal "-funktionen , som er en del af den kode, du lige har skrevet . Luk dialogboksen ved at klikke "OK", og tildele den anden makro funktion, du skrev , RemoveSubtotals , den anden knap.
Kør dit program ved at kontrollere enhver kombination af afkrydsningsfelterne og klikke på gør subtotaler knappen. Ryd subtotalerne ved at trykke på den anden knap .