The skriptspråk för Microsoft Excel , Visual Basic , kan du utöka Excel redan riklig uppsättning verktyg . Däremot kan kodning direkt i Visual Basic bli svårt eftersom vissa funktioner (som sortering ) kräver att man sätter flera parametrar i en exakt fashion.You kan undvika hand-kodning helt genom att låta den makro-inspelaren skriva koden för dig , men det fungerar inte alltid net det resultat du söker. Lösningen är att kombinera det bästa av två världar : Använd makron för att göra bulk kodning och en liten bit av manuell kodning för att avsluta jobbet . Sortera ett litet bord
Använd Visual Basic för att sortera ett litet bord . Börja med att skriva följande tabell i celler G8 till H11 i blad 1 :
kundnamn , konto balanceZephyr Wind Machines , 5Arondale Skrivbord , - 10Bubble Gumballs , 30
När du matat in data väljer det och börja spela in makrot ( Utvecklare > Spela in makro ) . Namnge macro MySort . Sortera ( Data > Sortera A till Ö ) valda data på den första kolumnen , och sluta spela in makrot .
Replay Macro
försöka använda makrot att tillgripa ett annat område : kopiera och klistra kunden tabellen till ett annat område i kalkylbladet och markera det nya området . Spela makrot ( Utvecklare > Makron > MySort ) , och märker effekt : de uppgifter som inte sorteras . Leta efter problem i Visual Basic -kod som skapas av din makroinspelning . Börja med att navigera till koden : . Tryck på Alt -F8 , välja din MySort makro , och klicka på knappen Redigera
Inuti MySort funktionen , märker detta uttalande :
ActiveWorkbook.Worksheets ( " Blad1 " . ) Sort.SortFields.Add Key : = Range ( " G8 " ) ...
Och ett uttalande några rader efter det : .
SetRange Range ( " C9 : D12 " ) katalog
Båda dessa påståenden är källan till problemet , de är anledningarna MySort underlåter att sortera det markerade området : Visual Basic makro-inspelaren hårdkodad dataområdet ( " C9 : D12 " och " G8 " ) för att sortera . Din uppgift är att ersätta de hårdkodade intervallen att göra makrot sortera den aktuella markeringen
Använd markeringsverktyget Property
Specifikt parametern Key : . = Range ( " G8 " ) berättar Excel för att sortera kunden tabellen baseras på " kunden " kolumnen , som börjar vid cell G8 . För att ersätta den ursprungliga " kunden " kolumnen med ena inuti den markerade texten , se till Val egendom Application objektet . Den här egenskapen hänvisar till utbudet av markerade celler . Ersätt tangent : = Range ( " G8 " ) med detta : Key : = k . Du kommer att definiera k i ett ögonblick
nästa hårdkodade intervall för att ersätta förekommer några uttalanden ner : . . SetRange Range ( " G8 : H11 " ) . Metoden . SetRange indikerar att Excel komplett sortiment du vill sortera . Byt SetRange Range ( " G8 : H11 " ) . Detta : . " . SetRange r"
r variabel , som k ( EY ) variabel som du just skrev , kommer från Val fastigheten . Gå till början av makrodefinition och ange dessa rader :
Dim r , k Som Range
Set r = Application.SelectionSet k = r.Columns ( 1 ) katalog
första Set uppdraget definierar olika celler som behövs för SetRange metoden - . hela markeringen . Den andra uppgiften anger intervallet behövs för slags nyckel till den första kolumnen i markeringen . Du kan sortera på andra kolumnen genom att ändra " 1 " till "2 . "
Testa Korrigerad Makro
koden korrigeringen är klar . Testa det genom att återgå till kalkylbladet , markera kunden tabellen - var du placerat den på bladet - och kör MySort . Kopiera denna tabell till en ny uppsättning celler , markerar du cellerna , och köra MySort på dem igen . Lägg märke sorteringen fungerar nu korrekt .