Voorbeelden VBA Excel Inhoud Voorbeelden VBA Excel... 1 Werkblad beveiligen... 3 Werkblad beveiliging opheffen... 3 Werkmap beveiligen... 3 Werkmap beveiliging opheffen... 3 Alle werkbladen van een werkmap beveiligen... 3 Beveiliging alle werkbladen van een werkmap opheffen... 4 Beveiliging werkblad tijdelijk opheffen... 4 Aantal keer herhalen van een macro... 4 Macro die iets x aantal keer uitvoert... 5 Inputbox die inhoud in cel zet. Deze cel bepaalt de naam van het blad (1).... 5 Inputbox die reeks en blad een naam geeft (2).... 6 Macro die op bepaalde tijden een andere macro start... 6 Macro die wordt uitgevoerd voor het opslaan van een werkmap (1)... 6 Macro die wordt uitgevoerd voor het opslaan van een werkmap (2)... 7 Macro beveiligen met wachtwoord... 7 Doel zoeken sneller uitvoeren... 7 Knippen/plakken via cel... 7 Macro om naam en type en locatie vast te leggen... 9 Macro om specifiek Word document te openen... 9 Zoeken in alle werkbladen van werkmap en kleurtje geven aan cel... 10 Zoeken en vervangen in werkbladen... 10 Dialoogbox Zoeken tonen... 11 Macro die zoekt naar celinhoud via een diagaloogbox:... 11 macro die zoekt naar een vaste waarde:... 11 Rijen verbergen... 12 Pauze in macro... 12 Volgend blad activeren... 12 Vorig blad activeren... 12 Werkmap (Excel) sluiten en opslaan... 13 Venster minimaliseren... 13 Blad verbergen... 13
2 Blad zichtbaar maken... 14 Msgbox met als/dan (1)... 14 Msgbox met als/dan (2)... 14 Msgbox met ja/nee vraag... 15 Aantal rijen invoegen op basis van getal in cel... 15 Naar cel in een specifiek werkblad gaan bij openen... 15 Rij verbergen in beveiligd blad... 16
3 Werkblad beveiligen Sub beveiligen() ActiveSheet.protect Werkblad beveiliging opheffen Sub beveiliging_opheffen() ActiveSheet.Unprotect Werkmap beveiligen Sub beveiligen() ActiveWorkbook.protect Werkmap beveiliging opheffen Sub beveiliging_opheffen() ActiveWorkbook.Unprotect Alle werkbladen van een werkmap beveiligen - uitvoer naar scherm verbergen - lus - met of zonder wachtwoord Sub Werkbladenbeveiligen() Application.ScreenUpdating = False Next i Dim i As Integer For i = 1 To Worksheets.Count Sheets(i).Protect of met wachtwoord: Sheets(i).Protect ("ABC")
Beveiliging alle werkbladen van een werkmap opheffen - uitvoer naar scherm verbergen - lus - met of zonder wachtwoord 4 Sub Werkbladenbeveiligingopheffen() Application.ScreenUpdating = False Next i Dim i As Integer For i = 1 To Worksheets.Count Sheets(i).Unprotect of met wachtwoord: Sheets(i).Unprotect ("ABC") Beveiliging werkblad tijdelijk opheffen Sub Edit() ActiveSheet.Unprotect MsgBox "You can edit (e.g. delete rows) for a while." Application.OnTime Now() + TimeValue("00:00:10"), "Edit2" Sub Edit2() ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _, AllowInsertingRows:=True, AllowDeletingRows:=True Aantal keer herhalen van een macro - lus - Aanroepen van een macro in een andere macro Sub Repeat100() Dim i As Long For i = 1 To 100 Call Naam macro Next i
5 Macro die iets x aantal keer uitvoert - lus - als/dan (dit voorbeeld a.h.v. een waarde in een cel met de naam aantal) Sub herhalen() Dim Check Dim Counter Dim Aantal As Integer Aantal = Range("aantal").Value Check = True Counter = 1 Do Do While Counter <= Aantal Macro die x aantal keer uitgevoerd moet worden Counter = Counter + 1 If Counter > Aantal Then Check = False Exit Do if Counter > 10 Then Check = False Exit Do Loop Loop Until Check = False Inputbox die inhoud in cel zet. Deze cel bepaalt de naam van het blad (1). - Inputbox met meerdere regels en eigen naam - Cel via inputbox een naam geven - Naam van het blad aan de hand van inhoud van een cel. Sub naamgeven() Cells(1, 6).Value = InputBox("Geef een naam aan de cel" & Chr(13) & "Bijvoorbeeld: Zomer" & Chr(13) & "Of: Winter", "Naam van de inputbox") If [F1] <> "" Then ActiveSheet.Name = [F1] (i.p.v. Cells(1,6) kun je ook [F1] opgeven)
Inputbox die reeks en blad een naam geeft (2). - exit sub toepassen - blad verbergen - msgbox Sub naam_geven() Dim strname As String 6 strname = InputBox("Geef een naam aan de tabel" & Chr(13) & "Bijvoorbeeld: Zomer" & Chr(13) & "Of: Winter", "Naam tabel") If strname = vbnullstring Then Exit Sub Range("a1:c30000").Select Selection.Name = strname Range("a1").Select ActiveSheet.Name = strname ActiveSheet.Visible = False MsgBox "De gegevens zijn geïmporteerd." Macro die op bepaalde tijden een andere macro start - Macro die uitgevoerd wordt bij het openen van een werkmap Module Worksheet (thisworkbook): Private Sub Workbook_Open() Application.OnTime Now + TimeValue("00:55:00"), "opslaan" Application.OnTime Now + TimeValue("01:55:00"), "opslaan" Application.OnTime Now + TimeValue("02:55:00"), "opslaan" Application.OnTime Now + TimeValue("03:55:00"), "opslaan" Macro die wordt uitgevoerd voor het opslaan van een werkmap (1) Module Worksheet (thisworkbook): Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox "deze melding komt net voor het opslaan"
Macro die wordt uitgevoerd voor het opslaan van een werkmap (2) Module Worksheet (thisworkbook): Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If ActiveSheet.Range("Q2") <> "" Then MsgBox "Let op, er is een afspraak vandaag!", vbexclamation, "Herinnering" Application.Goto Reference:="A1" 7 Macro beveiligen met wachtwoord - inputbox met als/dan Sub macro1() If Inputbox("Geef uw wachtwoord op") = "wachtwoord" Then Naam macro End if End sub Doel zoeken sneller uitvoeren - geselecteerde cel gebruiken in macro - inputbox aan variabele toewijzen Sub Doelzoeken() Dim CelAdres As String Dim CelAdres2 As String Dim CelAdres3 As String CelAdres2 = Selection.Address Range(CelAdres2).Select CelAdres = InputBox("Geef het bedrag op") CelAdres3 = InputBox("Welke cel moet veranderen?") Range(CelAdres2).GoalSeek Goal:=CelAdres, ChangingCell:=Range(CelAdres3) Knippen/plakken via cel - naamgeven aan celadres - verplaatsen naar cel met naam Sub knippen() Selection.Name = "knip" Selection.Copy Range("AY1").Select Selection.Name = "even"
8 ActiveSheet.Paste Application.CutCopyMode = False Range("A1").Select Application.Goto Reference:="knip" ActiveCell.FormulaR1C1 = "" 'nu volgt de tweede cel Range("knip").Offset(0, 2).Select Selection.Copy Range("AZ1").Select Selection.Name = "even2" ActiveSheet.Paste Application.CutCopyMode = False Range("A1").Select Application.Goto Reference:="knip" Range("knip").Offset(0, 2).Select ActiveCell.FormulaR1C1 = "" Sub knippen_verkort() Selection.Name = "knip" Selection.Copy Range("A1000").Select Selection.Name = "even" ActiveSheet.Paste Application.Goto Reference:="knip" ActiveCell.Delete Sub plakken() Selection.Name = "plak" Application.Goto Reference:="even" Selection.Copy Application.Goto Reference:="plak" ActiveSheet.Paste Application.CutCopyMode = False Application.Goto Reference:="even" ActiveCell.FormulaR1C1 = "" Range("A1").Select Application.Goto Reference:="plak" 'nu volgt de tweede cel
9 Application.Goto Reference:="even2" Selection.Copy Application.Goto Reference:="plak" Range("plak").Offset(0, 2).Select ActiveSheet.Paste Application.CutCopyMode = False Application.Goto Reference:="even2" ActiveCell.FormulaR1C1 = "" Range("A1").Select Application.Goto Reference:="plak" Macro om naam en type en locatie vast te leggen Sub Naam() Dim strfilename As Variant Dim strpath As String strfilename = Range("c3").Value strfilename = Application.GetSaveAsFilename(InitialFileName:=strPath & strfilename, FileFilter:="Excel Files (*.xlsm), *.xls, Excel 2007 Files (*.xlsm), *.xlsm", FilterIndex:=2, Title:="Choose the folder and change the filename if you like.") If strfilename = False Then MsgBox "Error: you didn't save the file." Else ActiveWorkbook.SaveAs Filename:=strFileName MsgBox "The file is saved as: " & strfilename End sub Macro om specifiek Word document te openen Sub Worddocument_openen() Dim wdapp As Object Dim wddoc As Object Set wdapp = CreateObject("Word.application") Set wddoc = wdapp.documents.open _ (Filename:="C:\users\datadidact\documents\Ardennen.doc") wdapp.visible = True Range("A1").Select
Zoeken in alle werkbladen van werkmap en kleurtje geven aan cel - lus gebruiken 10 Sub zoeken() Dim bladnr As String Dim zoek As String Dim i As Integer Dim eerstegevonden As String Wend End IF Next aantal = ActiveWorkbook.Worksheets.Count zoek = InputBox("Geef de te zoeken tekst op: ") Sheets("blad1").Activate Range("a1").Select For i = 1 To aantal bladnr = "blad" + Format(i) Sheets(bladnr).Activate Range("a1").Select If Not Cells.FindNext(After:=ActiveCell) Is Nothing Then eerstegevonden = Cells.Find(zoek).Address Cells.Find(What:=zoek, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlpart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False).Activate ActiveCell.Interior.ColorIndex = 4 While Cells.FindNext(After:=ActiveCell).Address <> eerstegevonden Cells.FindNext(After:=ActiveCell).Activate ActiveCell.Interior.ColorIndex = 4 Zoeken en vervangen in werkbladen - lus toepassen Sub overal_zoeken() Dim i As Integer Dim zoek As String Dim vervang As String zoek = InputBox("Zoeken naar:") vervang = InputBox("Vervangen door:")
11 For i = 1 To Worksheets.Count Sheets(i).Cells.Replace What:=zoek, Replacement:=vervang, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next i Dialoogbox Zoeken tonen Sub box() Worksheets.Select Application.Dialogs(xlDialogFormulaFind).Show Macro die zoekt naar celinhoud via een diagaloogbox: - gebruik maken van een lus Sub zoeken() Dim i As Integer Dim Planonnummer As String Dim rng As Range Nummer = InputBox("Welk nummer zoekt u?") For i = 1 To Worksheets.Count Set rng = Worksheets(i).Cells.Find(Nummer) If Not rng Is Nothing Then Worksheets(i).Activate rng.entirerow.activate Next i macro die zoekt naar een vaste waarde: - gebruik maken van een lus Sub zoeken() Dim i As Integer Dim nummer As String Dim rng As Range nummer = "hallo" For i = 1 To Worksheets.Count
12 Set rng = Worksheets(i).Cells.Find(nummer) If Not rng Is Nothing Then Worksheets(i).Activate rng.entirerow.activate Next i Rijen verbergen Sub rijenverbergen() Cells.Select Selection.EntireRow.Hidden = False Range("B3").Select BeginRow = 11 EndRow = 49 ChkCol = 6 For RowCnt = BeginRow To EndRow If Cells(RowCnt, ChkCol).Value = 0 Then Cells(RowCnt, ChkCol).EntireRow.Hidden = True Next RowCnt Pauze in macro Sub Wait() ' Waits 5 seconds Application.Wait Time + TimeSerial(0, 0, 5) ' Continues here after pause Volgend blad activeren Sub volgend_blad() ActiveSheet.Next.Select Vorig blad activeren Sub Vorig_blad() ActiveSheet.Previous.Select
13 Werkmap (Excel) sluiten en opslaan Sub sluiten_opslaan() ActiveWorkbook.Save ActiveWorkbook.Close Application.Quit Venster minimaliseren Sub minimaal() Application.WindowState = xlminimized ActiveWorkbook.Save Blad verbergen - actie bij fout geven - verplaatsen naar ander deel macro - structuur werkmap beveiligen Sub bladenverbergen() On Error GoTo fout Application.ScreenUpdating = False Sheets("naam van het werkblad").select ActiveWindow.SelectedSheets.Visible = False ActiveWorkbook.Protect Structure:=True, Windows:=False Macro_Exit: Hiermee beëindig je de macro : Exit Sub fout: MsgBox "Fout bij het verbergen van de resultaten" & Chr(13) & "Maak eerst de resultaten zichbaar." Hiermee ga je naar een ander punt in dezelfde macro : Resume Macro_Exit
14 Blad zichtbaar maken - beveiligd met wachtwoord Sub bladenzichtbaar() If InputBox("Geef uw wachtwoord op:") = "cursus" Then Application.ScreenUpdating = False ActiveWorkbook.Unprotect Sheets("Naam werkblad").visible = True Msgbox met als/dan (1) Sub herinnering() If ActiveSheet.Range("Q2") <> "" Then MsgBox "Let op, er is een afspraak vandaag!", vbexclamation, "Herinnering" Msgbox met als/dan (2) Sub Registratie() Application.ScreenUpdating = False If Range("c7") = "" Then MsgBox "Vul jouw personeelsnummer eerst nog in." Else If Range("af1") = "geen invoer" Then MsgBox "Vul eerst nog een cursusdatum in." Else If Range("ae1") = "vol gepland" Then MsgBox "Deze cursusdatum is vol gepland." & Chr(13) & "Kies een andere datum." Else Jouw macro
15 Msgbox met ja/nee vraag - werkmap opslaan onder een specifieke naam Sub Vraag() Application.DisplayAlerts = False nee = MsgBox("De werkmap wordt opgeslagen onder de naam Seizoenen." & Chr(13) & Chr(13) & "OK?", vbyesno, "Question") If nee = vbno Then MsgBox ("Choose for Save as and close the application manualy." & Chr(13) & Chr(13) & "Don't forget to save as Excel-workmap with macros (XLSM)") Else ActiveWorkbook.SaveAs Filename:= _ "Seizoenen.xlsm", _ FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False Application.Quit Aantal rijen invoegen op basis van getal in cel Sub rijen() Dim aantal As String aantal = Range("h5").Value startrow = 10 Lastrow = aantal + startrow - 2 Let Copyrange = startrow & ":" & Lastrow Rows(Copyrange).Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Let Copyrange2 = "B" & startrow - 1 & ":" & "B" & Lastrow Naar cel in een specifiek werkblad gaan bij openen Sub Auto_open() Application.ScreenUpdating = False Sheets("content").Select Range("A1").Select
16 Rij verbergen in beveiligd blad Sub verbergen() Application.ScreenUpdating = False ActiveSheet.Unprotect Rows("12:12").Select Selection.EntireRow.Hidden = True Range("a13").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _, AllowInsertingRows:=True, AllowDeletingRows:=True