VBA에서 동시에 변수를 선언하고 할당 할 수 있습니까?


165

VBA를 처음 사용하고 다음 선언 및 할당을 한 줄로 변환 할 수 있는지 알고 싶습니다.

Dim clientToTest As String
clientToTest = clientsToTest(i)

또는

Dim clientString As Variant
clientString = Split(clientToTest)

답변:


239

불행히도 VBA에는 줄임말이 없습니다 :. 가독성을 높이기 위해 연속 문자를 원하는 경우 연속 문자를 사용하는 것이 가장 시각적입니다 .

Dim clientToTest As String:  clientToTest = clientsToTest(i)
Dim clientString As Variant: clientString = Split(clientToTest)

힌트 (기타 답변 / 설명 요약) : 개체와도 작동 (Excel 2010) :

Dim ws  As Worksheet: Set ws = ActiveWorkbook.Worksheets("Sheet1")
Dim ws2 As New Worksheet: ws2.Name = "test"

13
+1, Microsoft는 .NET에 빌드하는 동안 VB6 개발자가 VB.NET을 준비하기 위해이 작업을 시작한다고 제안합니다.
존 M 간트

이것은 VBA에 대한 나의 가장 큰 단일 불만입니다. 경영진이 추가하기를 원한다면 주니어 프로그래머가 VBA 에이 바로 가기를 추가하는 데 하루 만 걸릴 것이라고 확신합니다.
피트 알빈

21

다음과 같이 객체를 사용하여 정렬 할 수 있습니다.

Dim w As New Widget

그러나 문자열이나 변형이 아닙니다.


이것은 전체적으로 올바르지 않습니다. "조치"를 semi-colo로 분리하여 모든 데이터 유형 (값 또는 오브젝트)으로 동일한 행에서 변수를 선언하고 초기화 할 수 있습니다 :. 같은 줄에 여러 값을 선언 할 수 없으므로 몇 가지 제한 사항이 있습니다 (예 :) var1 = val1: var2 = val2. 그것은 산발적으로 버그를 발생시키고 때로는이 유형의 과제를 수행 할 수 있지만 전체적으로이 표기법에서 제안하지는 않습니다.
GoldBishop

2
@GoldBishop, 예, 콜론을 사용하여 여러 문장을 한 줄로 결합하면 일반적으로 작동합니다 (Alex K.가 말했듯이). 내가 말하고있는 것은 문자열이나 변형 (또는 아마도 다른 프리미티브와 함께)에서 작동하지 않을 것입니다. Dim x As New T구문은 객체에서만 작동합니다.
John M Gant

예, 생성자 초기화 줄에서는 작동하지 않지만 변형 및 문자열 할당에서는 작동합니다. 나는 항상 값 유형과 일부 객체 유형에 사용합니다. dim str as String: str = "value"그리고 dim str as Worksheet: set str = ActiveWorkbook.worksheets("Sheet1")반복적으로 모두 작동합니다. 비록 내가 개체 인스턴스화를 수행하면 dim ws as New Worksheet: set ws = ActiveWorkbook.Worksheets("Sheet1")VBA의 다른 잘못된 작업처럼 오류가 발생합니다.
GoldBishop

3
콜론 트릭은 변형 및 문자열 할당과 함께 작동합니다. New키워드는하지 않습니다. 그것이 내가 말하는 전부입니다.
John M Gant

2
@JohnMGrant는 답을 명확하게하고 싶을 것입니다. 생성자 초기화 및 문자열 / 변형 값 유형으로 동일한 줄 할당을 수행 할 수 없다고 말합니다. 약간 혼란 스러울 수 있습니다.
GoldBishop

2

실제로는 가능하지만 그렇게 할 수는 없습니다.

Sub MySub( Optional Byval Counter as Long=1 , Optional Byval Events as Boolean= True)

'code...

End Sub

하위를 호출 할 때 변수를 다르게 설정하거나 기본값으로 설정할 수 있습니다.


5
이것은 지역 변수가 아닌 인수를위한 것입니다.
ivan_pozdeev

1

경우에 따라 Withstatement 를 사용하면 변수를 선언 할 필요가 없습니다 .

예를 들어

    Dim fd As Office.FileDialog
    Set fd = Application.FileDialog(msoFileDialogSaveAs)
    If fd.Show Then
        'use fd.SelectedItems(1)
    End If

이것은 다음과 같이 다시 쓸 수 있습니다

    With Application.FileDialog(msoFileDialogSaveAs)
      If .Show Then
        'use .SelectedItems(1)
      End If
    End With

0

아래에 표시된대로 한 줄에 값을 정의하고 할당 할 수 있습니다. 한 줄로 선언되고 할당 된 두 변수의 예를 제시했습니다. 여러 변수의 데이터 유형이 동일한 경우

 Dim recordStart, recordEnd As Integer: recordStart = 935: recordEnd = 946
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.