最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

vba新建工作簿

来源:动视网 责编:小OO 时间:2025-09-29 10:58:55
文档

vba新建工作簿

新建工作簿参阅特性若要在VisualBasic中创建新的工作簿,请使用Add方法。下述过程创建了新的工作簿。MicrosoftExcel自动将该工作簿命名为“BookN”,其中“N”是下一个可用的数字。新工作簿将成为活动工作簿。SubAddOne()Workbooks.AddEndSub创建新工作簿更好的方法是将其分配给一个对象变量。下例中,由Add方法返回的Workbook对象分配给了对象变量newBook。然后,又设置了newBook的若干属性。使用对象变量可以很容易地控制新工作簿。Sub
推荐度:
导读新建工作簿参阅特性若要在VisualBasic中创建新的工作簿,请使用Add方法。下述过程创建了新的工作簿。MicrosoftExcel自动将该工作簿命名为“BookN”,其中“N”是下一个可用的数字。新工作簿将成为活动工作簿。SubAddOne()Workbooks.AddEndSub创建新工作簿更好的方法是将其分配给一个对象变量。下例中,由Add方法返回的Workbook对象分配给了对象变量newBook。然后,又设置了newBook的若干属性。使用对象变量可以很容易地控制新工作簿。Sub
新建工作簿

参阅特性

若要在 Visual Basic 中创建新的工作簿,请使用 Add 方法。下述过程创建了新的工作簿。Microsoft Excel 自动将该工作簿命名为“BookN”,其中“N”是下一个可用的数字。新工作簿将成为活动工作簿。

Sub AddOne()

    Workbooks.Add

End Sub

        

创建新工作簿更好的方法是将其分配给一个对象变量。下例中,由 Add 方法返回的 Workbook 对象分配给了对象变量 newBook。然后,又设置了 newBook 的若干属性。使用对象变量可以很容易地控制新工作簿。

Sub AddNew()

Set NewBook = Workbooks.Add

    With NewBook

        .Title = "All Sales"

        .Subject = "Sales"

        .SaveAs Filename:="Allsales.xls"

    End With

End Sub

        

打开工作簿

参阅特性

用 Open 方法打开一个工作簿时,该工作簿将成为 Workbooks 集合的成员。下述过程打开 C 盘上名为 MyFolder 的文件夹中的 MyBook.xls 工作簿。

Sub OpenUp()

    Workbooks.Open("C:\\MyFolder\\MyBook.xls")

End Sub

        

按索引编号引用工作表

参阅特性

编号是分配给工作表的连续数字,基于其工作表标签在同一类型的工作表之间的位置(按从左到右计数)。下述过程使用 Worksheets 属性激活活动工作簿上的第一张工作表。

Sub FirstOne()

    Worksheets(1).Activate

End Sub

        

如果要处理所有类型的工作表(工作表、图表、模块和对话框编辑表),可使用 Sheets 属性。下述过程激活工作簿中的第四张工作表。

Sub FourthOne()

    Sheets(4).Activate

End Sub

        

注释  如果移动、添加或删除工作表,则编号顺序将会更改。

按名称引用工作表

参阅特性

使用 Worksheets 属性和 Charts 属性可通过名称来标识工作表。下述语句激活活动工作簿中的不同工作表。

Worksheets("Sheet1").Activate

Charts("Chart1").Activate

        

DialogSheets("Dialog1").Activate

        

可用 Sheets 属性返回工作表、图表、模块或对话框编辑表;Sheets 集合包含了所有这些表。下例激活活动工作簿中的“Chart1”。

Sub ActivateChart()

    Sheets("Chart1").Activate

End Sub

        

注释   嵌入到工作表中的图表是 ChartObjects 集合的成员,而那些位于单独的工作表上的图表则属于 Charts 集合。

将文档保存为网页

参阅特性

在 Microsoft Excel 中,可以将工作簿、工作表、图表、区域、查询表、数据透视表、打印区域或自动筛选区域保存到网页中。也可以直接在 Excel 中编辑 HTML 文件。

将文档保存为网页

将文档保存为网页是一个创建并保存 HTML 文件及任何支持文件的过程。若要完成此过程,请使用 SaveAs 方法,如下例所示,此示例将活动工作簿保存为“C:\\Reports\\myfile.htm”。

ActiveWorkbook.SaveAs _

    Filename:="C:\\Reports\\myfile.htm", _

    FileFormat:=xlHTML

        

自定义网页

通过设置 DefaultWebOptions 对象和 WebOptions 对象的属性,用户可以自定义 HTML 文档的外观、内容、浏览器支持、编辑支持、图形格式、屏幕分辨率、文件组织和编码。DefaultWebOptions 对象包含应用程序级的属性。而任何具有相同名称的工作簿级属性设置(包含在 WebOptions 对象中)将优先于这些设置。

设置完属性后,可使用 Publish 方法将工作簿、工作表、图表、区域、查询表、数据透视表、打印区域或自动筛选区域保存到网页中。下例设置了不同的应用程序级属性,然后设置了活动工作簿的 AllowPNG 属性,而此设置将优先于应用程序级的默认设置。最后,本示例将区域保存为“C:\\Reports\\1998_Q1.htm”。

With Application.DefaultWebOptions

    .RelyonVML = True

    .AllowPNG = True

    .PixelsPerInch = 96

End With

With ActiveWorkbook

    .WebOptions.AllowPNG = False

    With .PublishObjects(1)

        .FileName = "C:\\Reports\\1998_Q1.htm"

        .Publish

    End With

End With

        

也可以直接将文件保存到 Web 服务器上。下例将一个区域保存到 Web 服务器上,假定该网页的 URL 地址为 http://example.homepage.com/annualreport.htm。

With ActiveWorkbook

    With .WebOptions

        .RelyonVML = True

        .PixelsPerInch = 96

    End With

    With .PublishObjects(1)

        .FileName = _

        "http://example.homepage.com/annualreport.htm"

        .Publish

    End With

End With

        

在 Microsoft Excel 中打开 HTML 文档

若要在 Excel 中编辑 HTML 文档,请首先使用 Open 方法打开该文档。下例打开文件“C:\\Reports\\1997_Q4.htm”以进行编辑。

Workbooks.Open Filename:="C:\\Reports\\1997_Q4.htm"

        

打开文件后,可通过设置 DefaultWebOptions 和 WebOptions 对象的属性来自定义该 HTML 文档的外观、内容、浏览器支持、编辑支持、图象格式、屏幕分辨率、文件组织和编码。

用 A1 样式记号引用单元格和单元格区域

可使用 Range 属性来引用 A1 引用样式中的单元格或单元格区域。下述子程序将单元格区域 A1:D5 的字体设置为加粗。

Sub FormatRange()

    Workbooks("Book1").Sheets("Sheet1").Range("A1:D5") _

        .Font.Bold = True

End Sub

        

下表演示了使用 Range 属性的一些 A1 样式引用。

引用含义
Range("A1")单元格 A1

Range("A1:B5")从单元格 A1 到单元格 B5 的区域

Range("C5:D9,G9:H16")多块选定区域
Range("A:A")A 列

Range("1:1")第一行
Range("A:C")从 A 列到 C 列的区域

Range("1:5")从第一行到第五行的区域
Range("1:1,3:3,8:8")第 1、3 和 8 行

Range("A:A,C:C,F:F")A 、C 和 F 列

用编号引用单元格

参阅特性

通过使用行列编号,可用 Cells 属性来引用单个单元格。该属性返回代表单个单元格的 Range 对象。下例中,Cells(6,1) 返回 Sheet1 上的单元格 A6,然后将 Value 属性设置为 10。

Sub EnterValue()

    Worksheets("Sheet1").Cells(6, 1).Value = 10

End Sub

        

因为可用变量替代编号,所以 Cells 属性非常适合于在单元格区域中循环,如下例所示。

Sub CycleThrough()

    Dim Counter As Integer

    For Counter = 1 To 20

        Worksheets("Sheet1").Cells(Counter, 3).Value = Counter

    Next Counter

End Sub

        

注释  如果要同时更改某一单元格区域中所有单元格的属性或对其应用方法,可使用 Range 属性。有关详细信息,请参阅用 A1 样式记号引用单元格。

引用行和列

参阅特性

可用 Rows 属性或 Columns 属性来处理整行或整列。这两个属性返回代表单元格区域的 Range 对象。下例中,用 Rows(1) 返回 Sheet1 上的第一行,然后将单元格区域的 Font 对象的 Bold 属性设置为 True。

Sub RowBold()

    Worksheets("Sheet1").Rows(1).Font.Bold = True

End Sub

        

下表举例说明了使用 Rows 和 Columns 属性的一些行和列的引用。

引用含义
Rows(1)第一行
Rows工作表上所有的行
Columns(1)第一列
Columns("A")第一列
Columns工作表上所有的列
若要同时处理若干行或列,请创建一个对象变量并使用 Union 方法,将对 Rows 属性或 Columns 属性的多个调用组合起来。下例将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗。

Sub SeveralRows()

    Worksheets("Sheet1").Activate

    Dim myUnion As Range

    Set myUnion = Union(Rows(1), Rows(3), Rows(5))

    myUnion.Font.Bold = True

End Sub

    

用快捷记号引用单元格

参阅特性

可用方括号将 A1 引用样式或命名区域括起来,作为 Range 属性的快捷方式。这样就不必键入单词“Range”或使用引号,如下例所示。

Sub ClearRange()

    Worksheets("Sheet1").[A1:B5].ClearContents

End Sub

Sub SetValue()

    [MyRange].Value = 30

End Sub

    

引用命名区域

参阅特性

用名称比用 A1 样式记号更容易标识单元格区域。若要命名选定的单元格区域,请单击编辑栏左端的名称框,键入名称,再按 Enter。

引用命名区域

下例引用了名为“MyBook.xls”的工作簿中的名为“MyRange”的单元格区域。

Sub FormatRange()

    Range("MyBook.xls!MyRange").Font.Italic = True

End Sub

        

下例引用名为“Report.xls”的工作簿中的特定工作表单元格区域“Sheet1!Sales”。

Sub FormatSales()

    Range("[Report.xls]Sheet1!Sales").BorderAround Weight:=xlthin

End Sub

        

若要选定命名区域,请用 GoTo 方法,该方法将激活工作簿和工作表,然后选定该区域。

Sub ClearRange()

    Application.Goto Reference:="MyBook.xls!MyRange"

    Selection.ClearContents

End Sub

        

下例显示对于活动工作簿将如何编写相同的过程。

Sub ClearRange()

    Application.Goto Reference:="MyRange"

    Selection.ClearContents

End Sub

        

在命名区域中的单元格上循环

下例用 For Each...Next 循环语句在命名区域中的每一个单元格上循环。如果该区域中的任一单元格的值超过 limit 的值,就将该单元格的颜色更改为黄色。

Sub ApplyColor()

    Const Limit As Integer = 25

    For Each c In Range("MyRange")

If c.Value > Limit Then

            c.Interior.ColorIndex = 27

        End If

    Next c

End Sub

        

相对于其他单元格来引用单元格

参阅特性

处理相对于另一个单元格的某一单元格的常用方法是使用 Offset 属性。下例中,将位于活动工作表上活动单元格下一行和右边三列的单元格的内容设置为双下划线格式。

Sub Underline()

    ActiveCell.Offset(1, 3).Font.Underline = xlDouble

End Sub

        

注释  可录制使用 Offset 属性(而不是绝对引用)的宏。在“工具”菜单上,指向“宏”,再单击“录制新宏”,然后单击“确定”,再单击录制宏工具栏上的“相对引用”按钮。

若要在单元格区域中循环,请在循环中将变量与 Cells 属性一起使用。下例以 5 为步长,用 5 到 100 之间的值填充第三列的前 20 个单元格。变量 counter 用作 Cells 属性的行号。

Sub CycleThrough()

    Dim counter As Integer

    For counter = 1 To 20

        Worksheets("Sheet1").Cells(counter, 3).Value = counter * 5

    Next counter

End Sub

    

用 Range 对象引用单元格

参阅特性

如果将对象变量设置为 Range 对象,即可用变量名方便地操作单元格区域。

下述过程创建了对象变量 myRange,然后将活动工作簿中 Sheet1 上的单元格区域 A1:D5 赋予该变量。随后的语句用该变量代替该区域对象,以修改该区域的属性。

Sub Random()

    Dim myRange As Range

    Set myRange = Worksheets("Sheet1").Range("A1:D5")

    myRange.Formula = "=RAND()"

    myRange.Font.Bold = True

End Sub

        

引用工作表上的所有单元格

参阅特性

如果对工作表应用 Cells 属性时不指定编号,该属性将返回代表工作表上所有单元格的 Range 对象。下述 Sub 过程清除活动工作簿中 Sheet1 上的所有单元格的内容。

Sub ClearSheet()

    Worksheets("Sheet1").Cells.ClearContents

End Sub

    

引用多个单元格区域

参阅特性

使用适当的方法可以很容易地同时引用多个单元格区域。可用 Range 和 Union 方法引用任意组合的单元格区域;用 Areas 属性可引用工作表上选定的一组单元格区域。

使用 Range 属性

通过在两个或多个引用之间放置逗号,可使用 Range 属性来引用多个单元格区域。下例清除了 Sheet1 上三个单元格区域的内容。

Sub ClearRanges()

    Worksheets("Sheet1").Range("C5:D9,G9:H16,B14:D18"). _

        ClearContents

End Sub

        

命名区域使得用 Range 属性处理多个单元格区域更为容易。下例可在三个命名区域处于同一工作表时运行。

Sub ClearNamed()

    Range("MyRange, YourRange, HisRange").ClearContents

End Sub

        

使用 Union 方法

用 Union 方法可将多个单元格区域组合到一个 Range 对象中。下例创建了名为 myMultipleRange 的 Range 对象,并将其定义为单元格区域 A1:B2 和 C3:D4 的组合,然后将该组合区域的字体设置为加粗。

Sub MultipleRange()

    Dim r1, r2, myMultipleRange As Range

    Set r1 = Sheets("Sheet1").Range("A1:B2")

    Set r2 = Sheets("Sheet1").Range("C3:D4")

    Set myMultipleRange = Union(r1, r2)

    myMultipleRange.Font.Bold = True

End Sub

        

使用 Areas 属性

可用 Areas 属性引用选定的单元格区域或多块选定区域中的区域集合。下述过程计算选定区域中的块数目,如果有多个块,就显示一则警告消息。

Sub FindMultiple()

If Selection.Areas.Count > 1 Then

        MsgBox "Cannot do this to a multiple selection."

    End If

End Sub

选定和激活单元格

参阅特性

使用 Microsoft Excel 时,通常要先选定单元格或单元格区域,然后执行某一操作,如设置单元格的格式或在单元格中输入数值。但在 Visual Basic 中,通常在修改单元格之前不必先选定它们。

例如,如果要用 Visual Basic 在单元格 D6 中输入公式,就不必先选定单元格 D6,而只需返回 Range 对象,然后将该对象的 Formula 属性设置为所需的公式,如下例所示。

Sub EnterFormula()

    Worksheets("Sheet1").Range("D6").Formula = "=SUM(D2:D5)"

End Sub

        

有关使用其他方法在不选定单元格的情况下对其进行控制的示例,请参阅如何引用单元格和区域。

使用 Select 方法和 Selection 属性

Select 方法激活工作表和工作表上的对象;而 Selection 属性返回代表活动工作簿中活动工作表上的当前选定区域的对象。在成功使用 Selection 属性之前,必须先激活工作簿,并激活或选定工作表,然后用 Select 方法选定单元格区域(或其他对象)。

宏录制器经常创建使用 Select 方法和 Selection 属性的宏。下述 Sub 过程是用宏录制器创建的,该过程演示了 Select 方法和 Selection 属性在一起使用的方法。

Sub Macro1()

    Sheets("Sheet1").Select

    Range("A1").Select

    ActiveCell.FormulaR1C1 = "Name"

    Range("B1").Select

    ActiveCell.FormulaR1C1 = "Address"

    Range("A1:B1").Select

    Selection.Font.Bold = True

End Sub

        

下例完成同样的任务,但不激活或选定工作表或单元格。

Sub Labels()

    With Worksheets("Sheet1")

        .Range("A1") = "Name"

        .Range("B1") = "Address"

        .Range("A1:B1").Font.Bold = True

    End With

End Sub

        

选定活动工作表上的单元格

如果用 Select 方法选定单元格,应注意 Select 方法仅用于活动工作表。如果从模块中运行 Sub 过程,必须先在该过程中激活工作表,然后才能用 Select 方法选定单元格区域,否则该方法将失败。例如,下述过程在活动工作簿中将 Sheet1 中的一行复制到 Sheet2 上。

Sub CopyRow()

    Worksheets("Sheet1").Rows(1).Copy

    Worksheets("Sheet2").Select

    Worksheets("Sheet2").Rows(1).Select

    Worksheets("Sheet2").Paste

End Sub

        

激活选定区域内的单元格

可用 Activate 方法激活选定区域内的单元格。即使选定了单元格区域,也只能有一个活动单元格。下述过程选定了一个单元格区域,然后激活该区域内的一个单元格,但并不改变选定区域。

Sub MakeActive()

    Worksheets("Sheet1").Activate

    Range("A1:D4").Select

    Range("B2").Activate

End Sub

    处理三维区域

参阅特性

如果要处理若干工作表上相同位置的单元格区域,可用 Array 函数选定两张或多张工作表。下例设置三维单元格区域的边框格式。

Sub FormatSheets()

    Sheets(Array("Sheet2", "Sheet3", "Sheet5")).Select

    Range("A1:H1").Select

    Selection.Borders(xlBottom).LineStyle = xlDouble

End Sub

        

下例应用 FillAcrossSheets 方法,在活动工作簿中,将 Sheet2 上的单元格区域的格式和任何数据复制到该工作簿中所有工作表上的相应区域中。

Sub FillAll()

    Worksheets("Sheet2").Range("A1:H1") _

        .Borders(xlBottom).LineStyle = xlDouble

    Worksheets.FillAcrossSheets (Worksheets("Sheet2") _

        .Range("A1:H1"))

End Sub

    

处理活动单元格

参阅特性

ActiveCell 属性返回代表活动单元格的 Range 对象。可对活动单元格应用 Range 对象的任何属性和方法,如下例所示。

Sub SetValue()

    Worksheets("Sheet1").Activate

    ActiveCell.Value = 35

End Sub

        

注释  只有活动单元格所在的工作表处于活动状态时,才能处理该活动单元格。

移动活动单元格

可用 Activate 方法指定活动单元格。例如,下述过程使单元格 B5 成为活动单元格,然后将其字体设置为加粗。

Sub SetActive()

    Worksheets("Sheet1").Activate

    Worksheets("Sheet1").Range("B5").Activate

    ActiveCell.Font.Bold = True

End Sub

        

注释  若要选定单元格区域,请用 Select 方法。若要使单个单元格成为活动单元格,请使用 Activate 方法。

可用 Offset 属性来移动活动单元格。下述过程在选定区域内的活动单元格中插入文本,然后将活动单元格右移一格,但并不更改选定区域。

Sub MoveActive()

    Worksheets("Sheet1").Activate

    Range("A1:D10").Select

    ActiveCell.Value = "Monthly Totals"

    ActiveCell.Offset(0, 1).Activate

End Sub

        

选择活动单元格周围的单元格

CurrentRegion 属性返回由空白行和空白列所包围的单元格区域。下例中,选定区域扩充到与活动单元格相邻的包含数据的单元格中,然后用“货币”样式设置该区域的格式。

Sub Region()

    Worksheets("Sheet1").Activate

    ActiveCell.CurrentRegion.Select

    Selection.Style = "Currency"

End Sub

    

在工作表上使用 ActiveX 控件

参阅特性

本主题包括了在工作表或图表工作表上使用 ActiveX 控件的特定信息。有关添加和处理控件的一般信息,请参阅在文档中使用 ActiveX 控件和创建自定义对话框。

在工作表上处理控件时,必须记住以下几点。

∙除 ActiveX 控件可用的标准属性之外,在 Microsoft Excel 中还可使用 ActiveX 控件的下列属性:BottomRightCell、LinkedCell、ListFillRange、Placement、PrintObject、TopLeftCell 和 ZOrder。 

这些属性可用 ActiveX 控件的名称来设置和返回。下例滚动工作簿窗口,使 CommandButton1 位于窗口的左上角。

Set t = Sheet1.CommandButton1.TopLeftCell

With ActiveWindow

    .ScrollRow = t.Row

    .ScrollColumn = t.Column

End With

                

∙当 ActiveX 控件处于激活状态时,将禁用某些 Microsoft Excel Visual Basic 方法和属性。例如,当某一控件处于激活状态时,就不能使用 Sort 方法,故下述按钮单击事件过程中的代码将无效(因为用户单击按钮后,该按钮将处于激活状态)。 

∙Private Sub CommandButton1.Click

∙    Range("a1:a10").Sort Key1:=Range("a1")

∙End Sub

                

在使用无效的属性或方法之前,可通过激活工作表上的其他一些元素来避免该问题。例如,下列代码可对单元格区域排序:

Private Sub CommandButton1.Click

    Range("a1").Activate

    Range("a1:a10").Sort Key1:=Range("a1")

    CommandButton1.Activate

End Sub

        

∙当用户通过双击嵌入在其他应用程序的文档中的 Microsoft Excel 工作簿来对其进行编辑时,该工作簿上的控件无法正常工作。如果用户用鼠标右键单击工作簿,然后选中快捷菜单上的“打开”命令,工作簿上的控件将正常工作。 

∙用 Microsoft Excel 5.0/95 工作簿文件格式保存 Microsoft Excel 工作簿时,将丢失 ActiveX 控件信息。 

∙工作表上 ActiveX 控件的事件过程中的 Me 关键字引用的是工作表,而非控件。 

用 Visual Basic 添加控件

在 Microsoft Excel 中,用 OLEObjects 集合中的 OLEObject 对象代表 ActiveX 控件(所有的 OLEObject 对象也包含在 Shapes 集合中)。若要用编程的方式向工作表添加 ActiveX 控件,请用 OLEObjects 集合的 Add 方法。下例向第一张工作表添加命令按钮。

Worksheets(1).OLEObjects.Add "Forms.CommandButton.1", _

    Left:=10, Top:=10, Height:=20, Width:=100

        

通过 Visual Basic 使用控件属性

绝大多数情况下,Visual Basic 代码可用名称引用 ActiveX 控件。下例更改了控件“CommandButton1”的标题。

Sheet1.CommandButton1.Caption = "Run"

        

请注意,当在控件所在的工作表的类模块之外使用控件的名称时,必须用工作表的名称限定该控件的名称。

若要更改在 Visual Basic 代码中所用的控件的名称,请先选定该控件,然后在“属性”窗口中设置控件的“(名称)”属性。

因为 ActiveX 控件也可用 OLEObjects 集合中的 OLEObject 对象代表,所以也可用该集合中的对象来设置控件的属性。下例设置了控件“CommandButton1”的左边位置。

Worksheets(1).OLEObjects("CommandButton1").Left = 10

        

没有显示为 OLEObject 对象属性的控件属性可通过由 Object 属性返回的实际控件对象来设置。下例设置了控件“CommandButton1”的标题。

Worksheets(1).OLEObjects("CommandButton1"). _

    Object.Caption = "run me"

        

因为所有的 OLE 对象也是 Shapes 集合的成员,所以也可用该集合设置若干控件的属性。下例对齐第一张工作表上的所有控件的左边缘。

For Each s In Worksheets(1).Shapes

    If s.Type = msoOLEControlObject Then s.Left = 10

Next

        

使用 Shapes 和 OLEObjects 集合的控件名称

工作表上的 ActiveX 控件具有两个名称:包含控件的图形的名称(当查看工作表时,可在“名称”框中看到此名称);控件的代码名称(在“属性”窗口的“(名称)”右边的单元格中可看到此名称)。第一次向工作表中添加控件时,图形名称和代码名称是匹配的。但是,如果更改其中之一(图形名称或代码名称),另一个名称不会自动随之更改。

在控件的事件过程名称中使用的是控件代码名称,但是,当您从工作表的 Shapes 或 OLEObjects 集合中返回控件时,必须使用图形名称而不是代码名称来通过名称引用控件。例如,假定要向工作表中添加一个复选框,其默认的图形名称和代码名称都是 CheckBox1。如果通过在“属性”窗口的“(名称)”旁边键入“chkFinished”而更改了控件代码名称,则在事件过程名称中必须使用“chkFinished”,但是您仍然需要使用 CheckBox1 来从 Shapes 或 OLEObject 集合中返回控件,如下例所示。

Private Sub chkFinished_Click()

    ActiveSheet.OLEObjects("CheckBox1").Object.Value = 1

End Sub

    

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

参阅特性

在 Visual Basic 语句中可以使用大多数 Microsoft Excel 工作表函数。若要查看可以使用的工作表函数列表,请参阅 可用于 Visual Basic 的工作表函数列表。

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

从 Visual Basic 中调用工作表函数

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

以下 Sub 过程使用 Min 工作表函数来决定在某个单元格区域中的最小值。首先,将变量 myRange 声明为 Range 对象,然后将其设置为 Sheet1 上的 A1:C10 单元格区域。指定另一个变量 answer 为对 myRange 应用 Min 函数的结果。最后,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

        

示例

本示例使用工作表函数 Pmt 来计算住宅抵押贷款的支付额。请注意,本示例使用的是 InputBox 方法,而不是 InputBox 函数,因此该方法可以执行类型检查。Static 语句使 Visual Basic 保留三个变量的值;当下次运行该程序时,这些变量将显示为默认值。

Static loanAmt

Static loanInt

Static loanTerm

loanAmt = Application.InputBox _

    (Prompt:="Loan amount (100,000 for example)", _

        Default:=loanAmt, Type:=1)

loanInt = Application.InputBox _

    (Prompt:="Annual interest rate (8.75 for example)", _

        Default:=loanInt, Type:=1)

loanTerm = Application.InputBox _

    (Prompt:="Term in years (30 for example)", _

        Default:=loanTerm, Type:=1)

payment = Application.WorksheetFunction _

    .Pmt(loanInt / 1200, loanTerm * 12, loanAmt)

MsgBox "Monthly payment is " & Format(payment, "Currency")

OLE 程序标识符

参阅特性

可使用 OLE 程序标识符(有时称作 ProgID)创建自动化对象。下表列出了 ActiveX 控件、Microsoft Office 应用程序和 Microsoft Office Web Components 的 OLE 程序标识符。

ActiveX 控件 

Microsoft Access 

Microsoft Excel 

Microsoft Graph 

Microsoft Office Web Components 

Microsoft Outlook 

Microsoft PowerPoint 

Microsoft Word 

ActiveX 控件

若要创建下表列出的 ActiveX 控件,请使用相应的 OLE 程序标识符。

若要创建此控件请使用此标识符
复选框Forms.CheckBox.1
组合框Forms.ComboBox.1
命令按钮Forms.CommandButton.1
框架Forms.Frame.1
图像Forms.Image.1
标签Forms.Label.1
列表框Forms.ListBox.1
多页Forms.MultiPage.1
选项按钮Forms.OptionButton.1
滚动条Forms.ScrollBar.1
旋转按钮Forms.SpinButton.1
TabStripForms.TabStrip.1
文字框Forms.TextBox.1
切换按钮Forms.ToggleButton.1
Microsoft Access

若要创建下表列出的 Microsoft Access 对象,请使用相应的 OLE 程序标识符之一。如果使用不带版本号后缀的标识符,则会在最近版本的 Access(运行宏的计算机上可用的 Access 版本)中创建对象。

若要创建此对象请使用这些标识符之一
ApplicationAccess.Application
CurrentDataAccess.CodeData、Access.CurrentData

CurrentProjectAccess.CodeProject、Access.CurrentProject

DefaultWebOptionsAccess.DefaultWebOptions
Microsoft Excel

若要创建下表列出的 Microsoft Excel 对象,请使用相应的 OLE 程序标识符之一。如果使用不带版本号后缀的标识符,则会在最近版本的 Excel(运行宏的计算机上可用的 Excel 版本)中创建对象。

若要创建此对象请使用这些标识符之一备注
ApplicationExcel.Application
WorkbookExcel.AddIn
WorkbookExcel.Chart返回包含两张工作表的工作簿;其中一个为图表,另一个为图表的数据。图表工作表为活动工作表。
WorkbookExcel.Sheet返回具有一张工作表的工作簿。
Microsoft Graph

若要创建下表列出的 Microsoft Graph 对象,请使用相应的 OLE 程序标识符之一。如果使用不带版本号后缀的标识符,则会在最近版本的 Graph(运行宏的计算机上可用的 Graph 版本)中创建对象。

若要创建此对象请使用这些标识符之一
ApplicationMSGraph.Application
ChartMSGraph.Chart
Microsoft Office Web Components

若要创建下表列出的 Microsoft Office Web Components 对象,请使用相应的 OLE 程序标识符之一。如果使用不带版本号后缀的标识符,则会在最近版本的 Microsoft Office Web Components(运行宏的计算机上可用的 Microsoft Office Web Components 版本)中创建对象。

若要创建此对象请使用此标识符
ChartSpaceOWC10.Chart
DataSourceControlOWC10.DataSourceControl
ExpandControlOWC.ExpandControl
PivotTableOWC10.PivotTable
RecordNavigationControlOWC10.RecordNavigationControl
SpreadsheetOWC10.Spreadsheet
Microsoft Outlook

若要创建下表列出的 Microsoft Outlook 对象,请使用相应的 OLE 程序标识符之一。如果使用不带版本号后缀的标识符,则会在最近版本的 Outlook(运行宏的计算机上可用的 Outlook 版本)中创建对象。

若要创建此对象请使用这些标识符之一
ApplicationOutlook.Application
Microsoft PowerPoint

若要创建下表列出的 Microsoft PowerPoint 对象,请使用相应的 OLE 程序标识符之一。如果使用不带版本号后缀的标识符,则会在最近版本的 PowerPoint(运行宏的计算机上可用的 PowerPoint 版本)中创建对象。

若要创建此对象请使用这些标识符之一
ApplicationPowerPoint.Application
Microsoft Word

若要创建下表列出的 Microsoft Word 对象,请使用相应的 OLE 程序标识符之一。如果使用不带版本号后缀的标识符,则会在最近版本的 Word(运行宏的计算机上可用的 Word 版本)中创建对象。

若要创建此对象请使用这些标识符之一
ApplicationWord.Application
DocumentWord.Document、Word.Template

GlobalWord.Global
OnKey 方法

参阅应用于示例特性

当按特定键或特定的组合键时运行指定的过程。

expression.OnKey(Key, Procedure)

expression      必需。该表达式返回一个 Application 对象。

Key      String 类型,必需。用于表示要按的键的字符串。

Procedure      Variant 类型,可选。表示要运行的过程名称的字符串。如果 Procedure 参数为空文本 (""),则按 Key 时不发生任何操作。OnKey 方式将更改击键在 Microsoft Excel 中产生的正常结果。如果省略 Procedure 参数,则 Key 产生 Microsoft Excel 中的正常结果,同时清除先前使用 OnKey 方法所做的特殊击键设置。

说明

Key 参数可指定任何与 Alt、Ctrl 或 Shift 组合使用的键,还可以指定这些键的任何组合。每一个键可由一个或多个字符表示,比如 "a" 表示字符 a,或者 "{ENTER}" 表示 Enter。

若要指定按对应的键(例如 Enter 或 Tab)时的非显示字符,请使用下表所列出的代码。表中的每一代码代表键盘上的一个对应键。

代码
Backspace{BACKSPACE} or {BS}
Break{BREAK}
Caps Lock{CAPSLOCK}

Clear{CLEAR}

Delete 或 Del

{DELETE} 或 {DEL}

End{END}
Enter~(波形符)
Enter(数字小键盘)

{ENTER}
Esc{ESCAPE} 或 {ESC}

F1 到 F15

{F1} 到 {F15}

Help{HELP}

Home{HOME}
Ins{INSERT}

Num Lock{NUMLOCK}

Page Down{PGDN}

Page Up{PGUP}

Return{RETURN}

Scroll Lock{SCROLLLOCK}
Tab{TAB}

向上键{UP}

向下键{DOWN}

向右键{RIGHT}

向左键{LEFT}

还可指定与 Shift 和/或 Ctrl 和/或 Alt 组合使用的键。若要指定与其他键组合使用的键,可使用下表。

要组合的键在键代码之前添加
Shift+(加号)
Ctrl^(插入符号)
Alt%(百分号)
若为特定字符指定处理过程(如 +、^、% 等等),可将此字符用圆括号括起。有关详细信息,请参阅示例。

示例

本示例为 Ctrl+ 加号分配“InsertProc”过程,并为 Shift+Ctrl+ 向右键分配“SpecialPrintProc”过程。

Application.OnKey "^{+}", "InsertProc"

Application.OnKey "+^{RIGHT}", "SpecialPrintProc"

        

本示例将 Shift+Ctrl+ 向右键重新设为正常的含义。

Application.OnKey "+^{RIGHT}"

        

本示例将 Shift+Ctrl+ 向右键设为不发生任何操作。

Application.OnKey "+^{RIGHT}", ""

        

OnTime 方法

参阅应用于示例特性

安排一个过程在将来的特定时间运行(既可以是具体指定的某个时间,也可以是指定的一段时间之后)。

expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

expression      必需。该表达式返回一个 Application 对象。

EarliestTime      Variant 类型,必需。设置过程开始运行的时间。

Procedure      String 类型,必需。设置要运行的过程名。

LatestTime      Variant 类型,可选。过程开始运行的最晚时间。例如,LatestTime 参数设为 EarliestTime + 30,当时间到了 EarliestTime 时,如果由于其他程序处于运行状态 Microsoft Excel 不处于“就绪”、“复制”、“剪切”或“查找”模式,则 Microsoft Excel 将等待 30 秒让第一个过程先结束运行。如果 30 秒内 Microsoft Excel 不能回到“就绪”模式,则不运行此过程。如果省略该参数,Microsoft Excel 将一直等待到可以运行该过程为止。

Schedule      Variant 类型,可选。如果该值为 True,则安排一个新的 OnTime 过程。如果该值为 False,则清除先前设置的过程。默认值为 True。

说明

使用 Now + TimeValue(time) 可安排经过一段时间(从现在开始计时)之后运行某个过程。使用 TimeValue(time) 可安排某个过程只运行指定的时间。

示例

本示例设置 15 秒后运行 my_Procedure 过程,从现在开始计时。

Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"

        

本示例设置 my_Procedure 在下午 5 点开始运行。

Application.OnTime TimeValue("17:00:00"), "my_Procedure"

        

本示例撤消前一个示例对 OnTime 的设置。

Application.OnTime EarliestTime:=TimeValue("17:00:00"), _

    Procedure:="my_Procedure", Schedule:=False

        

文档

vba新建工作簿

新建工作簿参阅特性若要在VisualBasic中创建新的工作簿,请使用Add方法。下述过程创建了新的工作簿。MicrosoftExcel自动将该工作簿命名为“BookN”,其中“N”是下一个可用的数字。新工作簿将成为活动工作簿。SubAddOne()Workbooks.AddEndSub创建新工作簿更好的方法是将其分配给一个对象变量。下例中,由Add方法返回的Workbook对象分配给了对象变量newBook。然后,又设置了newBook的若干属性。使用对象变量可以很容易地控制新工作簿。Sub
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top