1. Introduktion #
VBScript kan bruges i de fleste Office-programmer, oftest i Excel og Word. Det er et scripting sprog, der kan bruges til at arbejde med programmerne udenom et UI. I forhold til RPA, kan det spare en masse vedligehold, da selectors ind imellem skifter navn ved opdateringer. Yderligere kan meget funktionalitet laves med et par linjer kode, fremfor flere actions og selectors, til at klikke igennem UI’et for at køre det samme.
Navn | Note | Link |
Scripts generelt | Active Directory, Group Policy, Data, Office m.m. | https://www.vbsedit.com/scripts/ |
Scripts til Office | Diverse scripts til Word, Excel og PowerPoint | https://www.vbsedit.com/scripts/office/ |
Eksempel på script til Excel:
Eksempel på script til Word:
2. Excel #
Beskrivelse | Script |
Attach på kørende Excel proces | Set objExcel = GetObject(, “Excel.Application”) objExcel.visible=true |
Start en ny Excel proces | Set objExcel = CreateObject(”Excel.Application”) objExcel.visible=true |
Åbn workbook fra filsti Attach på specifik Workbook Attach på specifikt Sheet Attach på aktive Workbook Attach på aktive Sheet | Set objWorkbook = objExcel.Workbooks.Open(“C:\folder1\Folder2\MyExcel.xlsx”) Set objWorkbook = objExcel.Workbooks(“Mappe1”) Set objSheet = objWorkbook.Sheets(“Ark1”) Set objWorkbook = objExcel.ActiveWorkbook Set objSheet = objWorkbook.ActiveSheet |
Luk åben Workbook | objExcel.Application.DisplayAlerts = False objWorkbook.Close |
Opret ark | objWorkbook.Sheets.Add.Name = “Nyt ark” |
Slet ark | objExcel.Application.DisplayAlerts = False objSheet.Delete objExcel.Application.DisplayAlerts = true |
Gem kopi af excel ark som anden sti / filtype | objWorkbook.SaveCopyAs “C:\Users\rpahelp\Documents\Test.csv” |
Til specifik celle | objSheet.Cells(row, column) |
Til celleområder | objSheet.Range(“A1:C10”) |
Skriv i celle | objSheet.Cells(row, column).Value = “Test” |
Ændr Font Bold italic underline | objSheet.Cells(row, column).Font.Bold = true objSheet.Cells(row, column).Font.FontStyle = “Bold Italic” objSheet.Range(“A1:D1”).Font.Name = “Arial” objSheet.Range(“A1:D1”).Font.Size = “18” |
Formater celleværdi til anden format type (e.g. tekst / tal) i en kolonne** | objSheet.Range(“A1”).EntireColumn.NumberFormat = “@” objSheet.Range(“A1”).EntireRow.Interior.ColorIndex = 45 objSheet.Range(“D1”).NumberFormat = “General” |
Conditional Formatting*** | objSheet.Range(“A1:A5”).FormatConditions.Delete objSheet.Range(“A1:A5”).FormatConditions.Add 1, 7, “0” objSheet.Range(“A1:A5”).FormatConditions(1).Interior.Colorindex = 3 |
Farv celle* | objSheet.Range(“A1”).Interior.Color = RGB(255, 0, 0) objSheet.Range(“A2”).Font.Colorindex = 4 |
Fjern formatering af celler | objSheet.Range(“A1:%FirstFreeColumn%:%FirstFreeRow%”).clearformats |
Slet rækker, obs det er en range i parentesen | objSheet.Rows(“1:1”).EntireRow.Delete |
Autojuster kolonner | for col=1 to %FirstFreeColumn% objSheet.columns(col).AutoFit() next |
Kopier celler til andet ark | objSheet.Range(“A1:%FirstFreeColumn%:%FirstFreeRow%”).Copy objSheet2.Range(“A1”) |
Kopier celler fra Excel fil til Excel fil | Set objWorkbook2 = objExcel.Workbooks.open(“C:\Users\henrik\Documents\Mappe2.xlsx”) objWorkbook.Worksheets(“Ark1”).Range(“A1:A2”).copy objWorkbook2.Worksheets(“Ark1”).Range(“A1”).pastespecial |
Simpel sortering af en range ud fra en kolonne | set range = objSheet.Range(“A2:Z100”) set varKey = objSheet.Range(“A2:Z100”) range.Sort(varKey) |
Gem åben Excel workbook som CSV semikolon separeret | Dim objExcel, objWorkbook Set objExcel = GetObject(, “Excel.Application”) Set objWorkbook = objExcel.Workbooks(“Mappe1”) objExcel.visible=true objWorkbook.SaveAs “%FilePathCSV%”, 6, , , , , , , , , , True objWorkbook.Close False objExcel.Quit |
*Farv Celle
Farve index hvis man bruger Colorindex i stedet for RGB.
**Numberformat værdier
General | |
0 | |
$#,##0.00;[Red]$#,##0.00 | |
_($* #,##0.00_);_($* (#,##0.00);_($* “-“??_);_(@_) | |
m/d/yy | |
[$-F400]h:mm:ss am/pm | |
0.00% | |
# ?/? | |
0.00E+00 | |
@ |
***Conditional formatting
Der er et par valgmuligheder i forhold til formateringen:
xlFormatConditionType
xlCellValue | 1 |
xlExpression | 2 |
xlFormatConditionOperator
xlBetween | 1 |
xlNotBetween | 2 |
xlEqual | 3 |
xlNotEqual | 4 |
xlGreater | 5 |
xlLess | 6 |
xlGreaterEqual | 7 |
xlLessEqual | 8 |
Eksempel
I selve koden er rækkefølgen vigtig, i forhold til hvilken regel er øverst, og den der har først prioritering, markeret med rød. Noter at man kan selv sætte en fast værdi eller referér til en celle, se grøn markering. Umiddelbart kan man ikke blande ConditionType (xlCellValue, xlExpression), da ingen af formateringerne slår igennem i det tilfælde.
Efter VBScriptet ser det således ud, hvis man åbner Administrere Regler…
3. Word #
Vær opmærksom på i Words tilfælde, at nogle funktionaliteter ikke virker alt efter hvilken sprogpakke man har installeret. Nedenstående er testet både på en dansk og engelsk installation, og virker på begge.
Beskrivelse | Script |
Attach på kørende Word proces | Set objWord = GetObject(,”Word.Application”) objWord.Visible = True |
Start en ny Word proces | Set objWord = CreateObject(”Word.Application”) objWord.visible=true |
Opret nyt Word dokument | Set objDoc = objWord.Documents.Add() |
Attach på kørende Word dokument | Set objDoc = objWord.ActiveDocument |
Attach på side indhold | Set objSelection = objWord.Selection |
Åbn specifik fil | Set objDoc = objWord.Documents.Open(“c:\scripts\word\testdoc.doc”) |
Gem dokument som | objDoc.SaveAs(“C:\Scripts\Word\testdoc.doc”) |
Gem dokument | objDoc.Save |
Luk Word | objWord.Quit |
Luk Word uden at gemme | objDoc.Saved = TRUE objWord.Quit |
Skriv i dokumentet | objSeelction.TypeText “Test” |
Linjeskift i dokument | objSelection.TypeParagraph() |
Ændr Font Bold italic underline | objSelection.Font.Bold = true objSelection.Font.Name = “Arial” objSelection.Font.Size = “18” |
Linjeafstand | objSelection.ParagraphFormat.LineSpacing = 10 |
Tilføj billede | Set objShape = objDoc.Shapes objShape.AddPicture(“C:\Scripts\Logo.jpg”) |
Overskrid tekst i word dokument med et billede. | Add-Type -AssemblyName Microsoft.Office.Interop.Word $imageFilePath = “%FilePathImage%” # Find den eksisterende Word proces $word = [Runtime.Interopservices.Marshal]::GetActiveObject(‘Word.Application’) $word.Visible = $true # Attach på det åbne dokument $document = $word.ActiveDocument # Find teksten “[Indsæt billede]” og er erstat med billedet $findText = “[Indsæt billede]” $range = $document.Content $range.Find.Execute($findText) if ($range.Find.Found) { $range.Select() $selection = $word.Selection $selection.InlineShapes.AddPicture($imageFilePath) } # Release COM objects [System.Runtime.Interopservices.Marshal]::ReleaseComObject($selection) | Out-Null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($document) | Out-Null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null |