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 Mail对象,则可以使用该对象初始化其所有属性并使用方法。

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

如何运作?

好吧,当我们用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作为对象with并将内部With称为Child 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

带有块的完全合格的代码如果我想对包含工作簿的代码中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的一种编程语言。它与Microsoft Office应用程序(例如MSExcel,MS-Word和MS-Access)一起使用,而VBA变量是特定的关键字。

Excel VBA变量范围 | *在所有编程语言中,我们都有变量访问说明符,用于定义可从何处访问已定义变量。 Excel VBA也不例外。 VBA也具有范围说明符。

ByRef和ByVal参数当参数作为ByRef参数传递给其他子函数时,将发送实际变量的引用。对变量副本所做的任何更改都将反映在原始参数中。

在Microsoft Excel中使用VBA删除无确认提示的工作表由于要使用VBA删除工作表,因此您知道自己在做什么。

您想告诉Excel不要显示此警告并删除该死的表。

在Microsoft Excel 2016中使用VBA添加和保存新工作簿] |在此代码中,我们首先创建了对工作簿对象的引用。然后,我们使用一个新的工作簿对象对其进行了初始化。这种方法的好处是您可以轻松地对此新工作簿进行操作。像保存,关闭,删除等一样,链接:/ menus-toolbars-status-bar-in-vba-在Microsoft Excel中使用vba-显示状态栏上的消息Excel VBA状态栏*]| excel中的状态栏可用作代码监视器。当您的VBA代码很长并且您使用VBA执行多项任务时,通常会禁用屏幕更新,以免看到屏幕闪烁。

`link:/ general-topics-in-vba-off-warning-messages-using-vba-in-microsoft-excel [在Microsoft Excel 2016中使用VBA关闭警告消息] | **此代码不仅禁用VBA警报,但也增加了代码的时间效率。让我们看看如何。

热门文章:

50 Excel快捷方式以提高生产率更快地完成任务。这50个快捷键将使您在Excel上的工作速度更快。

Excel中的VLOOKUP函数在Excel 2016中为COUNTIF使用此惊人的功能对条件进行计数。您无需过滤数据即可计算特定值。

Countif功能对于准备仪表板至关重要。

如何在Excel中使用SUMIF函数这是仪表板的另一个重要功能。这可以帮助您汇总特定条件下的值。