Microsoft Excel skriptspråk , Visual Basic for Applications , har mange verktøy for å utvide Excel standardinnstillinger evner. Et slikt verktøy er muligheten til å legge kontroller ( eksempel markeringsfelt og knapper ) direkte på regneark . Ved hjelp av Visual Basic kontroller og dens evne til å tappe inn i Excel kjernefunksjoner gjør for en effektiv veiledning i å forbedre Excel gjennom Visual Basic for Applications. Prosjekt: Bruk Visual Basic til Compute Subtotals
gjennomføre et prosjekt av databehandling delsummer for kolonnene i et regneark tabellen . Begynn med å åpne Excel og lage en tabell hvor som helst i regnearket. Tabellen ser i utgangspunktet ut som tabellen i Figur 1 .
Merk tabellen , inkludert kolonneoverskrifter, og skape navnet " myTab " for denne tabellen . Lag navnet ved å skrive det i Excel navn Box , som er mot øvre venstre hjørne av Excel arbeidsområdet .
Legg Visual Basic Controls
Legg boksene til bordet , med hver boksen sittende over en kolonne i tabellen . Du kan finne boksene henhold Developer > Sett inn > Form Controls. Også legge til to knapper i regnearket . Dra og slipp dem fra samme område som de boksene , til venstre og høyre for myTab tabellen . Høyreklikk på venstre knapp og endre teksten for å lese "Gjør Subtotals . " Endre teksten i den høyre knappen "Fjern Subtotals . "
Plasser og avmerkingsbokser slik tabellen ser ut tabellen i Figur 2 .
Skriv koden
nå som du har designet bordet og kontrollene , vil du skrive koden som gjør delsummer på bordet . Oppgi Visual Basic IDE (integrert utviklingsmiljø ) og legge til en modul . Klikk Sett inn> Module . I koden vinduet i den nye modulen , skriv dette programmet koden : en
Option Explicit
Public Sub doSubtotal ( )
Dim s As StringDim r Som RangeDim c Som ObjectDim ar ( ) Som IntegerDim Ifield Som IntegerDim varItemsDim nChkd As Integer
ReDim ar ( 0 til 0 )
for fjerning av tidligere subtotalsRemoveSubtotals
' skape rekke felt indekser (starter fra 1 ) til delsum
Ifield = 1nChkd = 0
' Loop gjennom boksene . Hvis man er sjekket , legge sitt felt å arrayFor Hver c I ActiveSheet.CheckBoxes
p Hvis ( c.Value = 1 ) ThennChkd = nChkd + en ' legge dette feltet for å rekke
ar ( UBound ( ar ) ) = iFieldReDim Preserve ar ( 0 For å UBound ( ar ) + 1 ) ' legge element for neste valgte feltet
End If
Ifield = IFIELD + 1
Neste
p Hvis ( nChkd = 0 ) ThenMsgBox ( " Vennligst sjekk minst én boks . ") Exit SubEnd Hvis
ReDim Preserve ar ( 0 For å UBound ( ar ) - 1 ) ' Fjern tom siste elementvarItems = ar
' Do faktiske delsum . Først må du finne området å gjøre delsum på
Set r = Application.Names ( " myTab ") RefersToRange ' hente navngitte området til delsum
r.Subtotal GroupBy : . = 1 , funksjon : = xlSum , TotalList : = varItems , SummaryBelowData : = xlSummaryBelow
End Sub
Public Sub RemoveSubtotals ()
'Se etter foregående delvis , ved hjelp av lagring gitt av kommentaren feltet i Navnerom for myTab ( se formler > Navn sjef) Vi lagrer tabellen opprinnelige , første kolonnen . Hvis dagens tabellens starter kolonne forskjellig , vi må gjenopprette tabellen til opprinnelig plassering .
Dim r Som RangeDim s Som StringDim nOrigCol As Integer
Set r = Application.Names ( " myTab ") . RefersToRanges = Application.Names ( " myTab ") . kommentar
'No comment betyr ingen tidligere løp, så ingen fjerning av foregående delvis , eller justering av opprinnelige serien , er nødvendig.
' Men , spare tabellens starter kolonnen for neste anrop til dette funksjon.Hvis ( s = "") ThenApplication.Names ( " myTab ") Comment = r.ColumnExit SubEnd Hvis
Application.Range ( . " a1 : xfd65536 . ") RemoveSubtotal
' Juster område: fjerne en kolonne hvis en var addednOrigCol = Cint ( s ) Hvis ( nOrigCol < r.Column ) Thenr.Previous.EntireColumn.Delete
End If
End Sub
Kjør Program
Tilbake til Excel-regnearket som har myTab tabellen . Tilordne knapper til makroer du nettopp skrev. Høyreklikk på " Do Subtotals "-knappen og velg " Tilordne makro . " I dialogboksen som vises, velger du " doSubtotal "-funksjonen , som er en del av den koden du nettopp skrev . Lukk dialogboksen ved å klikke " OK ", og tildele den andre makro funksjonen du skrev , RemoveSubtotals , til den andre knappen .
Kjør programmet ved å sjekke hvilken som helst kombinasjon av de boksene og klikke på do delsummer knappen . Fjerne delsummer ved å trykke den andre knappen .