De scripttaal voor Microsoft Excel , Visual Basic , kunt u Excel reeds ruime set van tools uit te breiden . Echter , codering rechtstreeks in Visual Basic moeilijk kan zijn omdat sommige functies ( zoals het sorteren ) vereisen het instellen van diverse parameters in een exacte fashion.You kan voorkomen hand-codering helemaal door te laten de macro -recorder schrijft de code voor u , maar dit betekent niet altijd netto het resultaat dat u zoekt . De oplossing is om het beste van beide werelden te combineren : gebruik macro's om de bulk- codering en een beetje van de hand coderen om de klus af te doen. Sorteren op een kleine tafel Gebruik Visual Basic om een kleine tabel te sorteren . Begin met het invoeren van de volgende tabel in de cellen G8 tot H11 in Blad 1 : Customer naam , rekening balanceZephyr Windmachines , 5Arondale Bureaus, - 10Bubble Gumballs , 30 Na het invoeren van de gegevens , selecteert u het en beginnen met het opnemen van de macro (ontwikkelaar > macro opnemen ) . Noem de macro MySort . Sort ( Gegevens > Sorteren van A tot Z ) de geselecteerde gegevens op de eerste kolom , en stop het opnemen van de macro . Replay de Macro Probeer de macro hun toevlucht een ander bereik : kopieer en plak de klant tafel naar een ander gebied van het werkblad en selecteer het nieuwe gamma . Replay de macro (ontwikkelaar > Macro's > MySort ) , en merk het effect : de gegevens zijn niet gesorteerd . Kijk voor het probleem in de Visual Basic -code die door de macro -opname. Beginnen door te navigeren naar de code : . Druk op Alt - F8 , selecteer uw MySort macro en klik op de knop Bewerken Binnen de MySort functie , merkt deze verklaring : ActiveWorkbook.Worksheets ( " Sheet1 " . ) Sort.SortFields.Add Key : = Range ( " G8 " ) ... En een verklaring van een paar regels na : . SetRange Range ( " C9 : D12 " ) op Beide verklaringen zijn de bron van het probleem , ze zijn de redenen waarom MySort niet in slaagt om het geselecteerde bereik te sorteren : de Visual Basic- macro -recorder hard-coded de data range ( " C9 : D12 " en " G8 " ) te sorteren . Jouw taak is om de hardcoded reeksen vervangen om de macro sorteren de huidige selectie te maken Gebruik de Keuze vakantiehuis Specifiek , de parameter Key : . = Range ( " G8 " ) vertelt Excel aan de klant tabel op basis van de " klant " kolom , die begint bij cel G8 sorteren. Om die oorspronkelijke kolom " klant " te vervangen door de een binnen de geselecteerde tekst , kijk naar de eigenschap Selectie van het object Application . Deze eigenschap verwijst naar de reeks van geselecteerde cellen . Vervang Key : = Range ( " G8 " ) met dit : Key : = k . Je zult k definiëren in een ogenblik De volgende hardcoded range aan vervanging optreedt een paar uitspraken neer : . . SetRange Range ( " G8 : H11 " ) . De methode . SetRange geeft aan in Excel het volledige bereik dat u wilt sorteren . Vervang SetRange Range ( " G8 : H11 " ) . Met deze : . " . SetRange r" De r variabele , zoals de k variabele ( ey ) die u zojuist hebt getypt , zal komen uit het pand Selection . Ga naar het begin van de macro- definitie en voer deze lijnen : Dim r , k als Range Set r = Application.SelectionSet k = r.Columns ( 1 ) op de eerste set opdracht definieert het bereik van cellen die nodig zijn voor de SetRange methode - . de gehele selectie . De tweede opdracht stelt het bereik nodig is voor de soort om de eerste kolom in de selectie . U kunt sorteren op de tweede kolom door het veranderen van de " 1 " naar een " 2 . " Test de Macro Gecorrigeerd De code correctie is voltooid . Test het door terug te keren naar het werkblad , de keuze van de klant tafel - waar u het op de plaat geplaatst - en actief MySort . Kopiëren die tafel om een nieuwe reeks van cellen , selecteert u de cellen , en draaien MySort weer op hen . Let op de soort werkt nu correct .
|