The skriptspråk for Microsoft Excel , Visual Basic, kan du utvide Excel allerede rikelig utvalg av verktøy. Imidlertid kan koding direkte i Visual Basic være vanskelig fordi noen funksjoner (som sortering) krever å sette flere parametre i en eksakt fashion.You kan unngå hånd-koding helt ved å la makro opptaker skrive koden for deg, men dette betyr ikke alltid netto resultatet du søker. Løsningen er å kombinere det beste fra begge verdener : Bruk makroer for å gjøre mesteparten koding og litt av hånden koding for å fullføre jobben . Sortere en liten tabell
Bruk Visual Basic til å sortere et lite bord . Begynn med å skrive inn følgende tabellen i cellene G8 til H11 i Ark 1 : en
Customer navn , konto balanceZephyr Vind Machines , 5Arondale Pulter , - 10Bubble Gumballs , 30
Etter inntasting av data , velger du den og starte opptak av makro ( Developer > Registrer makro ) . Navn til makroen MySort . Sorter ( data> Sorter A til Z) de valgte data på den første kolonnen , og stopper registreringen av makroen .
Replay Macro
prøve å bruke makro til å ty et annet utvalg : kopiere og lime kunden tabellen til et annet område av regnearket , og velg den nye serien . Replay makroen ( Developer > Makroer > MySort ) , og merke effekten : dataene ble ikke sortert. Se etter problemet i Visual Basic-kode er opprettet av makro opptak. Begynn ved å navigere til koden : . Trykk Alt- F8 , velg MySort makro, og klikk på Rediger-knappen
Inne i MySort funksjonen , merker denne uttalelsen:
ActiveWorkbook.Worksheets ( " Ark1 ». ) Sort.SortFields.Add Key : = Range (" G8 ") ...
Og en uttalelse noen linjer etter det : .
SetRange Range (" C9 : D12 " )
Begge disse påstandene er kilden til problemet , de er grunnene til at MySort ikke klarer å sortere det valgte området : Visual Basic makro opptaker hardkodet dataområdet ( " C9 : D12 ", og " G8 " ) for å sortere . Din oppgave er å erstatte hardkodet områder for å gjøre makroen sortere gjeldende valg
Bruk Selection Eiendom
Spesielt parameteren Key : . = Range ( " G8 " ) forteller Excel til å sortere kunden tabell basert på "kunden "-kolonnen , som starter på celle G8 . Å erstatte den opprinnelige " kunde "-kolonnen med den inne den valgte teksten , se til Selection eiendom Application objektet . Denne egenskapen refererer til området av cellene som er valgt . Bytt Key : = Range (" G8 ") med dette : Key : = k . Du vil definere k et øyeblikk
neste hardkodet utvalg å erstatte oppstår noen uttalelser ned : . . SetRange Range (" G8 : H11 ") . Metoden . SetRange indikerer til Excel hele serien du vil sortere. Bytt SetRange Range (" G8 : H11 ") . Med dette: . ». SetRange r"
r variabel , som k ( ey ) variabel du nettopp skrev , vil komme fra Selection eiendommen . Gå til starten av makroen definisjon og inn disse linjene :
Dim r , k As Range
Set r = Application.SelectionSet k = r.Columns ( 1 )
< p > den første Sett oppdraget definerer omfanget av celler som trengs for SetRange metode - . hele utvalget . Den andre oppgave angir intervallet som er nødvendig for den slags nøkkel til den første kolonnen i valget . Du kan sortere på den andre kolonnen ved å endre " 1 " til en " 2".
Test Korrigert Makro
Koden korreksjon er fullført. Test det ved å returnere til regnearket, velger kunden tabellen - uansett hvor du plasserte den på arket - og kjører MySort . Kopier denne tabellen til et nytt sett av celler , velger du cellene og kjøre MySort på dem igjen . Legg merke til den slags fungerer nå riktig .