image

VBA의 With-End With 블록은 주어진 객체를 사용할 것임을 VBA에 알리는 데 사용되며 점 연산자를 사용한 후에 만 ​​주어진 객체의 속성을 고려해야합니다. 이 기사의 뒷부분에서 예제를 살펴 보겠습니다.

구문-블록으로 끝

With [Object]

'Code to alter or use [Object]

'--

'--

End With

이제 With-End With 블록의 구문을 알았으므로 사용법을 살펴 보겠습니다.

With의 예-End With Block A2 : A10 범위에 대해 몇 가지 변경을 수행하고 싶다고 가정 해 보겠습니다. 이 범위를 선택하고 채우기 색상, 글꼴 스타일 등을 변경하고 싶습니다. 일반적으로 어떻게해야합니까? 아마도 다음과 같을 것입니다 :

Sub test()

Range("A1:A10").Select

Range("A1:A10").Interior.ColorIndex = 8

Range("A1:A10").Font.Name = "Algerian"

Range("A1:A10").Font.ColorIndex = 12

Range("A1:A10").Font.Underline = xlUnderlineStyleDouble

Range("A1:A10").Copy Range("B1:B10")

Range("A1:A10").Clear

End Sub

위는 A1 : A10 범위를 선택합니다. 범위의 내부 색상을 색상 인덱스 8로 변경합니다. 글꼴을 알제리 어로 변경합니다. 글꼴 색상을 색상 인덱스 12로 변경합니다. 범위 내의 텍스트에 이중 밑줄로 밑줄을 긋습니다.

그런 다음 A1 : A10 범위를 동일한 시트의 B1 : B10 범위로 복사합니다. 마침내 A1 : A10 범위를 지 웁니다.

A1 : A10 범위로 모든 작업을 수행하려면 매번 작성해야합니다. 그런 다음 도트 연산자는 해당 속성에 액세스합니다. 이것은 처리 속도를 감소시키고 VBA 프로그래머에 대한 작업 오버 헤드를 증가시킵니다. 이를 수행하는 대안은 With 블록을 사용하는 것입니다. 아래 코드는 위 코드와 동일하지만 더 빠릅니다.

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

.Font.Name = "Algerian"

.Font.ColorIndex = 12

.Font.Underline = xlUnderlineStyleDouble

.Copy Range("B1:B10")

.Clear

End With

End Sub

image

다른 예를 봅시다.

Outlook 메일 개체를 만든 경우 해당 개체를 사용하여 모든 속성을 초기화하고 메서드를 사용할 수 있습니다.

Set outMail = Outlook.Application.CreateItem(0)

With outMail

.To = "abcd.mail.com" 'Mandatory. Here you define the destination mail id.

.cc = "cc.mail.com" 'optional. Cc mail id if you want.

.BCC = "bcc.mail.com" 'optional. Bcc mail id if you want.

.Subject = subj 'should have. The massage on mail body.

.Body = msg 'optional. The massage on mail body.

.Attachments.Add "C:/exceltip.com\test.xlsx"

.Send

End With

어떻게 작동합니까?

With Range ( “A1 : A10”)를 작성할 때 vba는 객체 범위 ( “A1 : A10”)에 대한 참조를 잠급니다. 따라서 점 (.) 연산자를 작성할 때마다 VBA는 개체 Range ( “A1 : A10”) 또는 언급 한 개체에만 영향을주는이 범위 클래스의 모든 멤버를 나열합니다. 참조 잠금은 VBA가 End With 문을 읽을 때 해제됩니다.

블록으로 중첩 우리는 다른 블록 내에 블록을 가질 수 있습니다. 위의 예에서는 범위 개체를 사용하여 선택했습니다. 그런 다음 Range.Font를 여러 번 사용하여 글꼴 작업을했습니다. 이것은 다시 반복됩니다. 위의 코드도 다음과 같이 작성할 수 있습니다.

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

'Using another With within a With Block

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

.Copy Range("B1:B10")

.Clear

End With

End Sub

내부 with 블록은 외부 개체의 하위 멤버 인 개체를 참조해야합니다. 바깥 쪽 with는 object with 객체로, 안쪽 With는 Child With라고 부를 수 있습니다. inner with로 시작할 때 객체는 앞의 점 연산자로 작성되어야합니다.

자녀가되면 부모 특정 속성에 액세스 할 수 없습니다. 예를 들어, 아래 코드는 잘못되었습니다.

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

'Using another With within a With Block

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

'The below code will generate error as copy and clear methods does not belong to font class.

.Copy Range("B1:B10")

.Clear

End With

End With

End Sub

Fully Qualified With Block 통합 문서를 포함하는 코드에서 sheet2의 A1 : A10 범위의 글꼴을 변경하려면 정규화 된 블록을 사용해야합니다.

아래의 두 코드는 동일하게 작동합니다.

Sub test2()

With ThisWorkbook

With .Sheets("Sheet2")

With .Range("A1:A10")

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

End With

End With

End With

End Sub
'Fully qualified with block

Sub test3()

With ThisWorkbook.Sheets("Shee2").Range("A1:A10").Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

End Sub

차이를 볼 수 있습니다. 따라서 객체에서 여러 메서드와 속성을 사용할 것임을 알고 있으면 처음에 정규화 된 이름을 지정하십시오. 자식 개체를 사용하는 경우 이전 접근 방식을 사용하십시오. 숙련 된 프로그래머는 적절한 상황에서 두 가지 방법을 모두 사용합니다.

예 여러분, 이것이 VBA에서 With-End With 블록을 사용하는 방법입니다. 내가 충분히 설명하고이 기사가 With-End With의 개념을 이해하는 데 도움이 되었기를 바랍니다. 이 기사 또는 다른 주제에 대해 의문이 있으시면 아래 의견 섹션에서 저에게 질문하십시오. 기꺼이 도와 드리겠습니다.

관련 기사 :

link : / general-topics-in-vba-vba-variables-in-excel [Excel의 VBA 변수]| * VBA는 Visual Basic for Applications를 나타냅니다.

Microsoft의 프로그래밍 언어입니다. MSExcel, MS-Word 및 MS-Access와 같은 Microsoft Office 응용 프로그램에서 사용되는 반면 VBA 변수는 특정 키워드입니다.

link : / general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope]| * 모든 프로그래밍 언어에는 정의 된 변수에 액세스 할 수있는 위치를 정의하는 변수 액세스 지정자가 있습니다. Excel VBA도 예외는 아닙니다. VBA에도 범위 지정자가 있습니다.

link : / cells-ranges-rows-and-columns-in-vba-byref-and-byval-arguments-vba-interview-question [ByRef 및 ByVal 인수]| 인수가 ByRef 인수로 다른 하위 또는 함수에 전달되면 실제 변수의 참조가 전송됩니다. 변수 복사본에 대한 변경 사항은 원래 인수에 반영됩니다.

link : / files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [Microsoft Excel에서 VBA를 사용하여 확인 메시지없이 시트 삭제]| VBA를 사용하여 시트를 삭제하므로 수행중인 작업을 알고 있습니다.

이 경고를 표시하지 않고 망할 시트를 삭제하도록 Excel에 지시하고 싶습니다.

link : / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel 2016에서 VBA를 사용하여 새 통합 문서 추가 및 저장]| 이 코드에서는 먼저 통합 문서 개체에 대한 참조를 만들었습니다. 그런 다음 새 통합 문서 개체로 초기화했습니다. 이 접근 방식의 이점은이 새 통합 문서에서 작업을 쉽게 수행 할 수 있다는 것입니다. 저장, 닫기, 삭제 등`link : / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [메시지 표시 켜기 Excel VBA 상태 표시 줄 *]`| Excel의 상태 표시 줄은 코드 모니터로 사용할 수 있습니다. VBA 코드가 길고 VBA를 사용하여 여러 작업을 수행하는 경우 화면 깜박임이 표시되지 않도록 화면 업데이트를 비활성화하는 경우가 많습니다.

link : / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Microsoft Excel 2016에서 VBA를 사용하여 경고 메시지 끄기]| *이 코드는 VBA를 비활성화 할뿐만 아니라 경고뿐만 아니라 코드의 시간 효율성도 증가시킵니다. 방법을 살펴 보겠습니다.

인기 기사 :

link : / keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [50 Excel 단축키로 생산성 향상]| 작업 속도를 높이십시오. 이 50 개의 바로 가기를 사용하면 Excel에서 더 빠르게 작업 할 수 있습니다.

link : / formulas-and-functions-introduction-of-vlookup-function [Excel의 VLOOKUP 함수]| 이것은 다른 범위와 시트에서 값을 조회하는 데 사용되는 Excel의 가장 많이 사용되고 인기있는 기능 중 하나입니다. link : / tips-countif-in-microsoft-excel [Excel 2016의 COUNTIF]| 이 놀라운 기능을 사용하여 조건으로 값을 계산합니다. 특정 값을 계산하기 위해 데이터를 필터링 할 필요가 없습니다.

Countif 기능은 대시 보드를 준비하는 데 필수적입니다.

link : / excel-formula-and-function-excel-sumif-function [Excel에서 SUMIF 함수 사용 방법]| 이것은 또 다른 대시 보드 필수 기능입니다. 이를 통해 특정 조건에 대한 값을 합산 할 수 있습니다.