Using VBScript Statements

Data types aren’t the only things missing. VBScript also lacks several statements. It’s missing all of the statements related to file I/O, such as OpenCloseRead, and Input. Other statements that are not available are WriteGoSubOn GoSubOn GoToOn Error, and DoEvents. Table 13.5 contains a complete list of all of the available VBScript statements.

Table 13.5: Statements Supported in VBScript

StatementDescription
CallInvokes a subroutine
ConstDeclares a constant value
DimDeclares variables
Do/LoopExecutes a loop until a condition or while a condition is True
EraseReinitializes the contents of a fixed-size array and frees all of the memory allocated to a variable-sized array
For/NextExecutes a loop while iterating a variable
For Each/NextExecutes a loop while iterating through a collection of objects
Function/End FunctionDeclares a routine that will return a value
If/Then/Else/End IfConditionally executes one set of statements or another
On ErrorTakes the specified action if an error condition arises
Option ExplicitRequires that all variables must be declared before their use
PrivateDeclares private variables
PublicDeclares public variables
RandomizeInitializes the random-number generator
ReDimChanges the size of an array
Select Case/End SelectChooses a single condition from a list of possible conditions
SetAssigns a reference to an object or creates a new object
SubDeclares a subroutine
While/WendExecutes a loop while a condition is True


https://msdn.microsoft.com/en-us/library/aa383665(v=VS.85).aspx


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
' A constant that specifies a time-based trigger.
const TriggerTypeTime = 1
' A constant that specifies an executable action.
const ActionTypeExec = 0   
 
 
'********************************************************
' Create the TaskService object.
Set service = CreateObject("Schedule.Service")
call service.Connect()
 
'********************************************************
' Get a folder to create a task definition in. 
Dim rootFolder
Set rootFolder = service.GetFolder("/")
 
'The taskDefinition variable is the TaskDefinition object.
Dim taskDefinition
' The flags parameter is 0 because it is not supported.
Set taskDefinition = service.NewTask(0
 
'********************************************************
' Define information about the task.
 
' Set the registration info for the task by 
' creating the RegistrationInfo object.
Dim regInfo
Set regInfo = taskDefinition.RegistrationInfo
regInfo.Description = "Start notepad at a certain time"
regInfo.Author = "Author Name"
 
'********************************************************
' Set the principal for the task
Dim principal
Set principal = taskDefinition.Principal
 
' Set the logon type to interactive logon
principal.LogonType = 3
 
 
' Set the task setting info for the Task Scheduler by
' creating a TaskSettings object.
Dim settings
Set settings = taskDefinition.Settings
settings.Enabled = True
settings.StartWhenAvailable = True
settings.Hidden = False
 
'********************************************************
' Create a time-based trigger.
Dim triggers
Set triggers = taskDefinition.Triggers
 
Dim trigger
Set trigger = triggers.Create(TriggerTypeTime)
 
' Trigger variables that define when the trigger is active.
Dim startTime, endTime
 
Dim time
time = DateAdd("s"30, Now)  'start time = 30 seconds from now
'startTime = XmlTime("2018-04-03 10:55:00")
 
time = DateAdd("s"35, Now) 'end time = 5 minutes from now
endTime = XmlTime(time)
 
WScript.Echo "startTime :" & startTime
WScript.Echo "endTime :" & endTime
 
trigger.StartBoundary = startTime
trigger.EndBoundary = endTime
trigger.ExecutionTimeLimit = "PT5M"    'Five minutes
trigger.Id = "TimeTriggerId"
trigger.Enabled = True
 
'***********************************************************
' Create the action for the task to execute.
 
' Add an action to the task to run notepad.exe.
Dim Action
Set Action = taskDefinition.Actions.Create( ActionTypeExec )
Action.Path = "C:\Windows\System32\notepad.exe"
 
WScript.Echo "Task definition created. About to submit the task..."
 
'***********************************************************
' Register (create) the task.
 
call rootFolder.RegisterTaskDefinition( _
    "Test TimeTrigger", taskDefinition, 6, , , 3)
 
WScript.Echo "Task submitted."
 
 
 
'------------------------------------------------------------------
' Used to get the time for the trigger 
' startBoundary and endBoundary.
' Return the time in the correct format: 
' YYYY-MM-DDTHH:MM:SS. 
'------------------------------------------------------------------
Function XmlTime(t)
    Dim cSecond, cMinute, CHour, cDay, cMonth, cYear
    Dim tTime, tDate
 
    cSecond = "0" & Second(t)
    cMinute = "0" & Minute(t)
    cHour = "0" & Hour(t)
    cDay = "0" & Day(t)
    cMonth = "0" & Month(t)
    cYear = Year(t)
 
    tTime = Right(cHour, 2& ":" & Right(cMinute, 2& _
        ":" & Right(cSecond, 2)
    tDate = cYear & "-" & Right(cMonth, 2& "-" & Right(cDay, 2)
    XmlTime = tDate & "T" & tTime 
End Function
 
cs


'C Lang > VBA,VBS Technic' 카테고리의 다른 글

VBScript Statements  (0) 2018.04.04
VBA에서 Visual Basic .NET으로 코드 변환  (0) 2018.01.31

언어에 대한 차이점

Visual Basic .NET은 .NET Framework를 활용하도록 고안되었기 때문에 많은 부분에서 이전 언어 버전과의 호환성이 유지되지 않습니다. 다음은 Visual Basic .NET에서 Visual Basic 언어로 변경되는 사항 중 일부 목록입니다. 자세한 내용은 Visual Basic 베테랑을 위한 Visual Basic .NET 소개를 참조하십시오.

  • 최신   바인딩.VBA 및 Visual Basic .NET은 최신 바인딩을 지원합니다. 그러나 이전에 바인딩된 개체를 사용하면 코드를 더욱 쉽게 읽고 유지 관리하고 IntelliSense를 사용할 수 있습니다. Visual Basic .NET에서는 이전 바인딩을 강제 적용하고 데이터를 잃을 수 있는 암시적인 변환을 방지하는 Option Strict On 문이 도입되었습니다. 컴파일러 기본값은 Option Strict Off입니다. 이를 위한 중요한 이유 중 하나는 Office 개체의 많은 메서드와 속성이 Object 형식을 반환하므로 다음 예제에 나오는 것처럼 개체를 정확한 형식으로 명시적으로 변환해야 하기 때문입니다.

    ' Using Ctype to convert the Object.returned by Sheet1 to a Worksheet.
    MsgBox(CType(ThisWorkbook.Worksheets("Sheet1"), Excel.Worksheet).Name)
  • 변수   선언 VBA에서는 Option Explicit 문을 사용하여 명시적인 변수 선언을 강제 적용할 수 있습니다. 또한 VBA IDE 옵션에서 변수 선언 요구 확인란을 선택하여 이 문을 자동으로 설정할 수도 있습니다. 이 확인란은 기본적으로는 선택되어 있지 않습니다. 암시적으로 선언된 모든 변수는 Variant 형식입니다.

    Visual Basic .NET 컴파일러는 명시적인 선언을 강제 적용하므로 모든 변수를 선언해야 합니다. Option Explicit Off 문을 사용하여 이 설정을 재정의할 수 있으며, 암시적으로 선언된 모든 변수는 Object 형식입니다. Visual Basic .NET에서는 Variant 데이터 형식이 더 이상 지원되지 않고 자동으로 Object 데이터 형식으로 변환되기 때문에, VBA에서 Visual Basic .NET으로 코드를 복사하거나 붙여넣을 때 이러한 점을 고려해야 합니다. 프로젝트에서 선언된 모든 변수를 명시적으로 입력해야 합니다.

  • 기본   속성 Visual Basic .NET에서는 해당 속성이 인수를 취하는 경우에만 기본 속성이 지원됩니다. VBA에서는 기본 속성을 제거함으로써 코드를 입력할 때 바로 가기를 사용할 수 있습니다. 예:

    ActiveDocument.Tables(1).Cell(1, 1).Range = "Name" 

    이 코드를 Visual Basic .NET으로 변환하려면 Range 개체의 기본 속성(Text)을 입력해야 합니다.

    ThisApplication.ActiveDocument.Tables(1).Cell(1, 1).Range.Text = "Name" 

    Tables 개체의 기본 속성(Item)은 인덱스 매개 변수를 취하지 않기 때문에 필요하지 않습니다. 그러나 모든 기본 속성을 포함하면 코드를 더욱 읽기 쉽게 만들 수 있습니다.

    ThisApplication.ActiveDocment.Tables.Item(1).Cell(1, 1).Range.Text _ = "Name" 
  • ByVal , ByRef 매개   변수 .VBA에서는 매개 변수가 기본적으로 참조로 전달되며, Visual Basic .NET에서는 매개 변수가 기본적으로 값으로 전달됩니다. 코드를 Visual Basic .NET으로 변환하려고 준비할 때, 모든 메서드가 매개 변수를 참조로 전달할 지 아니면 값으로 전달할 지의 여부를 명시적으로 정의하는지 확인하고 싶은 경우가 있을 것입니다. 정의되지 않은 매개 변수를 사용하여 Visual Studio .NET IDE에 코드를 붙여 넣으면 자동으로 ByVal가 목록의 각 매개 변수에 추가됩니다.

  • 열거 .Visual Basic. NET에서는 열거 상수가 정규화되어야 합니다. VBA 코드를 변환할 때 Word 및 Excel 상수에 모두 정규화된 열거 이름을 추가해야 합니다. 예를 들어, Word VBA에서 검색을 수행하는 경우 wd 상수를 사용하여 Selection 또는 Range의 FindWrap 값을 지정합니다. wdFindStop, wdFindAsk, wdFindContinue의 세 가지 옵션이 제공됩니다. VBA에서는 열거가 프로젝트에 대해 글로벌 특성을 띠므로 상수를 할당하기만 하면 됩니다.

    Selection.Find.Wrap = wdFindContinue 

    Visual Basic .NET에서는 다음과 같이 열거 이름을 사용하여 상수를 정규화해야 합니다.

    ThisApplication.Selection.Find.Wrap = Word.WdFindWrap.wdFindContinue 

    이렇게 하려면 추가 입력이 상당히 많이 필요한 것처럼 보이지만, Visual Studio .NET의 IntelliSense 기능을 사용하면 정규화된 상수를 찾아 입력하는 작업이 비교적 쉽고 코드를 더욱 읽기 쉽게 만들 수 있습니다. 이미 상수 이름에 익숙한 경우라면 해당 열거 이름이 상수 이름과 거의 일치한다는 사실을 알 수 있습니다. 위의 경우에는 모두 wdFind를 포함하고 있습니다. 사용 가능한 열거를 탐색하려면 Word.Wd를 입력하고 IntelliSense 드롭다운 목록에서 사용 가능한 항목을 스크롤합니다(Excel에 대해 사용할 수 있는 열거 목록을 스크롤하려면 Excel.XL을 입력합니다.)

  • 0    아닌   값의   배열 VBA에서는 배열 차원의 기본 하한값은 0입니다. Option Base를 사용하면 이 값을 1로 바꿀 수 있습니다. Visual Basic .NET에서는 Option Base 문이 지원되지 않으며 모든 배열 차원의 하한값은 0이어야 합니다. 또한 배열 선언으로 ReDim을 사용할 수 없습니다. Visual Basic .NET에서 Office 컬렉션을 사용할 때 유의할 사항 중 하나는 Office 컬렉션의 배열 하한값은 대부분 1부터 시작한다는 점입니다.

  • 메서드   호출      괄호   사용 VBA에서는 서브루틴을 호출할 때, 괄호가 선택 사항인 경우와 필수인 경우를 기억하는 것은 어렵습니다. Visual Basic .NET에서는 메서드 호출에서 매개 변수를 전달하는 경우에 괄호가 필수입니다.

  • Set 키워드 VBA에서 개체 할당과 개체의 기본 속성 할당을 구분하기 위해서는 Set 키워드가 필수입니다. Visual Basic .NET에서는 기본 속성이 지원되지 않기 때문에 Set 키워드가 필요하지 않으며 더 이상 지원되지 않습니다. 다음 예제는 이러한 변경 사항을 보여줍니다.

    ' VBA
    Dim mySelection as Selection
    Dim myOtherSelection as String
    Set mySelection = Selection
    myOtherSelection = Selection
    ' Visual Basic .NET
    Dim mySelection As Word.Selection
    Dim myOtherSelection As String
    mySelection = ThisApplication.Selection
    myOtherSelection = ThisApplication.Selection.Text
  • 데이터   액세스 Microsoft Visual Basic .NET에서는 데이터 액세스 개체(DAO) 또는 원격 데이터 개체(RDO) 데이터 원본에 대해 데이터 바인딩이 지원되지 않습니다. ActiveX 데이터 개체(ADO) 데이터 바인딩은 이전 버전과의 호환성을 위해 지원되지만 ADO.NET으로 변환하고 싶은 경우도 있을 것입니다. 자세한 내용은 ADO.NET과 ADO 비교를 참조하십시오.

  • UserForms  Windows Forms    변환 VBA UserForms는 Visual Studio .NET으로 복사하거나 가져올 수 없습니다. 대부분의 경우 사용자의 폼을 Windows Forms로 다시 만들어야 합니다. VBA에서 폼을 만들 때 끌어서 놓기 컨트롤은 일관되게 사용되지만 Windows Form 컨트롤의 이벤트 처리기는 다르게 처리됩니다. 다음과 같은 여러 가지 새로운 기능을 사용하면 폼을 이전보다 더욱 쉽게 만들 수 있습니다.

    • " 컨트롤 고정이 가능하므로 사용자가 폼 크기를 변경하면 컨트롤 크기가 자동으로 변경되고 컨트롤 배치가 알맞게 새로 조정됩니다.

    • " Windows Forms에서 탭 순서 설정이 훨씬 쉬워졌습니다. 보기 메뉴에서 탭 순서를 클릭하여 탭 순서 지정 기능을 활성화할 수 있습니다. 그런 다음 각 컨트롤을 원하는 순서대로 클릭하기만 하면 됩니다.

    • " VBA의 메뉴 생성 기능을 개선한 인라인 메뉴 생성 기능이 추가되었습니다.

    • " VBA에서는 폼을 vbModal 또는 vbModeless로 표시할 수 있습니다. Visual Basic .NET에서는 ShowDialog 메서드를 사용하여 폼을 모달로 표시하고, Show 메서드를 사용하여 폼을 비모달로 표시합니다. 그러나 폼을 비모달로 표시하고 Word나 Excel 문서를 클릭하면 폼이 배경으로 이동하므로 사용자가 혼동을 일으킬 수 있습니다.

    • " Visual Basic .NET에서는 데이터 입력 검사기, 공통 대화 상자, 하이퍼링크 레이블, 시스템 트레이 아이콘, 패널, 숫자 올리기/내리기(numeric-up/down), 즉석에서 디자인할 수 있는 트리 보기, 도움말 파일 링커, 도구 설명 확장선 등 다양한 새로운 폼 컨트롤도 사용할 수 있습니다.


https://msdn.microsoft.com/ko-kr/library/aa192490(v=office.11).aspx


+ Recent posts