Het gebruik van VBA om Excel te programmeren is niet zo populair als het ooit was. Er zijn echter nog steeds veel programmeurs die er de voorkeur aan geven bij het werken met Excel. Als u een van die mensen bent, is dit artikel iets voor u.
Een rij kopiëren in Excel VBA is iets waar Excel VBA echt handig voor is. U wilt bijvoorbeeld dat één bestand van al uw bonnen met datum, account, categorie, provider, product / service en kosten één regel tegelijk wordt ingevoerd, zoals ze zich voordoen - een geval van evoluerende boekhouding in plaats van statische boekhouding. Om dit te doen, moet u een rij van het ene werkblad naar het andere kunnen kopiëren.
Een voorbeeld van een Excel VBA-programma dat een rij van het ene werkblad naar het andere kopieert - voor de eenvoud slechts drie kolommen - bevat:
Als u een gebeurtenis wilt activeren die de rij kopieert, gaat u met het standaardbesturingselement knopknop. Klik in Excel op Invoegen op het tabblad Ontwikkelaars. Selecteer vervolgens het knopbesturingselement en teken de knop waar u het wilt. Excel geeft automatisch een dialoogvenster weer om u een kans te geven om een macro te selecteren die wordt geactiveerd door de klikgebeurtenis van de knop of om een nieuwe te maken.
Er zijn verschillende manieren om de laatste rij in het doelwerkblad te vinden, zodat het programma een rij onderaan kan kopiëren. In dit voorbeeld wordt ervoor gekozen het nummer van de laatste rij in het werkblad te behouden. Om het nummer van de laatste rij te behouden, moet u dat nummer ergens opslaan. Dit kan een probleem zijn omdat de gebruiker het nummer kan wijzigen of verwijderen. Om dit te omzeilen, plaatst u het in de cel direct onder de formulierknop. Op die manier is het niet toegankelijk voor de gebruiker. (Het eenvoudigste is om een waarde in de cel in te voeren en de knop eroverheen te bewegen.)
Sub Add_The_Line () Dim currentRow As Integer Sheets ("Sheet1"). Selecteer currentRow = Range ("C2"). Waarde Rijen (7). Selecteer Selection.Copy Sheets ("Sheet2"). Selecteer Rows (currentRow) .Selecteer ActiveSheet Plakken Dim deDatum als datum theDate = Now () Cellen (currentRow, 4) .Value = CStr (theDate) Cells (currentRow + 1, 3) .Activeer Dim rTotalCell als bereik ingesteld rTotalCell = _ Sheets ("Sheet2"). Cellen (Rows.Count, "C"). End (xlUp) .Offset (1, 0) rTotalCell = WorksheetFunction.Sum _ (Range ("C7", rTotalCell.Offset (-1, 0)) Sheets ("Sheet1" ) .Range ("C2"). Waarde = currentRow + 1 End Sub
Deze code gebruikt xlUp, een "magisch getal", of meer technisch een genummerde constante, die wordt herkend door de End-methode. Offset (1,0) gaat eenvoudig een rij omhoog in dezelfde kolom, dus het netto effect is om de laatste cel in kolom C te selecteren.
In woorden zegt de verklaring:
De laatste instructie werkt de locatie van de laatste rij bij.
VBA is waarschijnlijk moeilijker dan VB.NET omdat u zowel VB- als Excel VBA-objecten moet kennen. Het gebruik van xlUP is een goed voorbeeld van het soort gespecialiseerde kennis dat cruciaal is om VBA-macro's te kunnen schrijven zonder drie verschillende dingen op te zoeken voor elke verklaring die u codeert. Microsoft heeft grote vooruitgang geboekt bij het upgraden van de Visual Studio-editor om u te helpen de juiste syntaxis te achterhalen, maar de VBA-editor is niet veel veranderd.