Excel-VBA入门知识(9)(excel的vba教程)

23、在窗体上使用 Microsoft Office Web 组件

在 Visual Basic 或 Visual Basic for Applications 中,可以向用户窗体中添加 Microsoft Office Web 组件,其方法与向用户窗体中添加任何其他 ActiveX 控件相同。注意,虽然在设计窗体时可以使用“属性工具箱”,但却不能在运行时从模式窗体或对话框中的 Microsoft Office Web 组件中显示“属性工具箱”。对于在非 Visual Basic 或 Visual Basic for Applications 以外的其他设计环境中所创建的模式窗体,此情况同样适用。

可以使用 ShowModal 属性将窗体设置为无模式。

24、使用Microsoft Excel 对象的事件

可在 Microsoft Excel 中编写工作表级、图表级、查询表级、工作簿级或应用程序级的事件处理过程。例如,Activate 事件发生在工作表级,而 SheetActivate 事件既可发生在工作簿级,也可发生在应用程序级。工作簿的 SheetActivate 事件发生在激活该工作簿中的任一工作表时,而应用程序级的 SheetActivate 事件发生在任一打开的工作簿中的任一工作表被激活时。

工作表、图表工作表和工作簿事件处理过程对任意打开的工作表或工作簿都有效。如果要为嵌入式图表、查询表或 Application 对象编写事件处理过程,则必须在类模块中用 WithEvents 关键字创建新的对象。

可用 EnableEvents 属性激活或禁用事件。例如,使用 Save 方法保存工作表时,将引发 BeforeSave 事件。可在调用 Save 方法之前将 EnableEvents 属性设置为 False,以防止该事件的引发。

Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True

25、在Visual Basic 中使用Microsoft Excel 工作表函数

在 Visual Basic 语句中可以使用大多数 Microsoft Excel 工作表函数。有关可以使用的工作表函数列表,请参阅 “Visual Basic 可使用的工作表函数列表”。

注意一些工作表函数在 Visual Basic 中是不实用的。例如:Concatenate 就不需要。因为在 Visual Basic 中可以用 & 运算符来连接多重文本值。

从 Visual Basic 中调用工作表函数

在 Visual Basic 中,Microsoft Excel 可以通过 WorksheetFunction 对象来使用工作表函数。

以下 Sub 过程使用 Min 工作表函数来决定在一个单元格范围中的最小值。首先,变量 myRange 被声称为 Range 对象,然后被加在“Sheet1”的“A1:C10”范围内。另一个变量,answer被指定为将 Min 函数应用到 myRange 的结果。最后,answer 的值就被显示在信息框中。

Sub UseFunction()
Dim myRange As Range
Set myRange = Worksheets("Sheet1").Range("A1:C10")
answer = Application.WorksheetFunction.Min(myRange)
MsgBox answer
End Sub

如果您使用的工作表函数需要一个引用范围作为参数,则必须指定 Range 对象,例如: 您可以用 Match 工作表函数搜索单元格的范围。可以在工作表单元格中键入公式,如“=MATCH(9,A1:A10,0)”。但是,您可以在 Visual Basic 过程中指定 Range 对象以获得相同结果。

Sub FindFirst()
myVar = Application.WorksheetFunction _
.Match(9, Worksheets(1).Range("A1:A10"), 0)
MsgBox myVar
End Sub

注意Visual Basic 函数不使用 WorksheetFunction 识别符。函数可能和 Microsoft Excel 的函数同名但工作各异。例如:
Application.WorksheetFunction.Log 和 Log 将返回不同的值。

在单元格中插入工作表函数

要在单元格中插入工作表函数,您需要指定函数作为相应的 Range 对象的 Formula 属性值。以下示例中,RAND 工作表函数(由它生成随机数字)被分配到活动工作簿的“Sheet1”的“A1:B3”范围的 Formula 属性中。

Sub InsertFormula()
Worksheets("Sheet1").Range("A1:B3").Formula = "=RAND()"
End Sub