Microsoft Excels skriptspråk , Visual Basic for Applications , har många verktyg för att utvidga Excels standard kapacitet . Ett sådant verktyg är möjligheten att lägga till kontroller ( t.ex. kryssrutor och knappar ) direkt på kalkylblad . Använda Visual Basic kontroller och dess förmåga att utnyttja Excels kärnfunktioner gör för en effektiv handledning i att öka Excel via Visual Basic for Applications . Projekt : Använd Visual Basic för att beräkna delsummor
genomföra ett projekt av datorer delsummor för kolumner i ett kalkylblad tabellen . Börja med att öppna Excel och skapa en tabell någonstans i kalkylbladet . Tabellen ser initialt ut som tabellen i Bild 1 .
Markera tabellen , inklusive kolumnrubriker och skapa namnet " myTab " för denna tabell . Skapa namnet genom att skriva in det i Excel namn Box , som är mot det övre vänstra hörnet av Excel arbetsytan .
Lägg Visual Basic Controls
Lägg boxarna till bordet , med varje kryssruta sitter ovanför en tabell kolumn . Du kan hitta kryssrutorna enligt Utvecklare > Infoga > Form Controls . Lägg också till två knappar i kalkylbladet . Dra och släpp dem från samma område som kryssrutor till vänster och höger om myTab tabellen . Högerklicka på vänster knapp och ändra sin text att läsa "Gör delsummor . " Ändra texten på den högra knappen " Ta bort delsummor . "
Placera knappar och kryssrutor så tabellen ser ut i tabellen i bild 2 .
Skriv koden
nu när du har utformat bordet och reglagen , kommer du skriva kod som gör delsummorna på bordet . Ange Visual Basic IDE ( integrerad utvecklingsmiljö ) och lägg till en modul . Klicka på Infoga > Modul . I koden fönstret för den nya modulen , anger denna programkod :
Option Explicit
Public Sub doSubtotal ( ) katalog
Dim s Som StringDim r Som RangeDim c Som ObjectDim AR ( ) Som IntegerDim Ifield Som IntegerDim varItemsDim nChkd As Integer
ReDim AR ( 0 till 0 ) katalog
"ta bort tidigare subtotalsRemoveSubtotals
'Skapa rad fält index (från 1 ) till delsumma
Ifield = 1nChkd = 0
" Loop through kryssrutor . Om man är markerad , lägga sitt område att arrayFor Varje hp I ActiveSheet.CheckBoxes
p Om ( c.Value = 1 ) ThennChkd = nChkd + 1 ' lägga det här fältet till array
AR ( UBound ( ar ) ) = iFieldReDim Preserve AR ( 0 till UBound ( ar ) + 1 ) ' lägg element för nästa markerade fält
End If
Ifield = Ifield + 1
Nästa
Om ( nChkd = 0 ) ThenMsgBox ( " kontrollera minst en ruta . " ) Exit SubEnd Om
ReDim Preserve AR ( 0 Till UBound ( AR ) - 1 ) "ta bort tomma senaste elementvarItems = AR
" Do faktiska delsumma . Först , hitta utbudet att göra delsumma på
Set r = Application.Names ( " myTab " ) RefersToRange ' hämta det namngivna området till delsumma
r.Subtotal GroupBy : . = 1 , Funktion : = xlSum , TotalList : = varItems , SummaryBelowData : = xlSummaryBelow
End sub
Public sub RemoveSubtotals ( ) katalog
" Kontrollera innan delsumma , med lagring tillhandahålls av kommentaren fältet i namnrymden för myTab ( se formler > Namn manager ) " Vi lagrar tabellens ursprungliga , första kolumnen . Om nuvarande tabellens startkolumn skiljer , måste vi återställa tabellen till ursprunglig plats .
Dim r Som RangeDim s Som StringDim nOrigCol As Integer
Set r = Application.Names ( " myTab " ) . RefersToRanges = Application.Names ( " myTab " ) . Kommentera
" Ingen kommentar betyder ingen tidigare körning , så ingen borttagning av tidigare delsumma , eller anpassning av original spänner , behövs .
" Men , spara tabellens startkolumn för nästa samtal till detta function.If ( s = " " ) ThenApplication.Names ( " myTab " ) Kommentar = r.ColumnExit SubEnd Om
Application.Range ( . " a1 : xfd65536 . " ) RemoveSubtotal
' Justera intervall : ta bort en kolumn om man var addednOrigCol = CInt (s ) Om ( nOrigCol < r.Column ) Thenr.Previous.EntireColumn.Delete
End If
End Sub
Kör programmet
Return
till Excel-kalkylbladet som har myTab tabellen . Tilldela knapparna till makron du just skrev . Högerklicka på " Do Delresultat " -knappen och välj " Koppla makro . " I dialogrutan som visas väljer du " doSubtotal " -funktion , som är en del av den kod du just skrev . Stäng dialogrutan genom att klicka på " OK ", och tilldela den andra makro -funktionen du skrev , RemoveSubtotals , den andra knappen .
Kör ditt program genom att kontrollera vilken kombination av kryssrutor och klicka på gör delsummor knappen . Rensa delsummor genom att trycka på någon annan knapp .