如何使用……最终带座在VBA Excel中?
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
让我们来看另一个例子。
如果创建了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函数这是仪表板的另一个重要功能。这可以帮助您汇总特定条件下的值。