Excel VBA Application 方法属性大全

Excel VBA Application 方法属性大全
Excel VBA Application 方法属性大全

Application Excel 方法属性

Application对象是Excel对象模型中最高层级的对象,代表Excel应用程序自身,也包含组成工作簿的许多部分,包括工作簿、工作表、单元格集合以及它们包含的数据。

Application对象包含:

应用程序设置和选项,许多选项与“选项”对话框中的选项相同。

返回顶级对象的方法,例如ActiveCell、ActiveSheet,等等。

本文使用VBA代码示例简要介绍了与Application对象相关的经常使用的对象、方法和属性,其中一些成员能够改变用户与Excel应用程序交互的方式,还能够改变应用程序的外观和式样。

熟悉Application对象能够让您扩展和调整Excel的功能,以满足自已的需求。

本文主要介绍的内容如下:

从Application对象中引用对象

Application对象相关的集合

?AddIns集合

?Columns集合和Rows集合

?Dialogs集合

?Sheets集合

Application对象相关的属性

?ActiveCell属性

?ActiveChart属性

?ActiveSheet属性

?ActiveWindow属性

?ActiveWorkbook属性

?RangeSelection属性

?ScreenUpdating属性

?Selection属性

?StatusBar属性

?ThisWorkbook属性

Application对象相关的方法

?FindFile方法和Dialogs集合

?GetOpenFilename方法

?GetSaveAsFilename方法

?InputBox方法

?Run方法

Application对象相关的事件

?激活Application事件监视

使用Application对象执行其它任务

?删除工作表而显示提示信息(DisplayAlerts属性)

?无须提示用户而保存工作表(DisplayAlerts属性)

?使用SendKeys方法发送信息到记事本

?安排宏在指定的时间和间隔运行(OnTime方法)

Application对象的其它一些属性和方法

?Caller属性

?CutCopyMode属性

?Evaluate方法

?OnKey方法

?ThisCell属性

?WorksheetFunction属性

?改变光标显示(Cursor属性)

?获取或改变Excel窗口的状态或大小(WindowState属性)

?获取系统信息

?自动隐藏公式栏(DisplayFormulaBar属性)

?将Excel全屏显示(DisplayFullScreen属性)

?获取Excel启动文件夹的路径(StartupPath属性)

?检测Excel的版本(Version属性)

?打开最近使用过的文档(RecentFiles属性)

?文件对话框操作(FileDialog属性)

?改变Excel工作簿的名称(Caption属性)

?调用Windows的计算器(ActivateMicrosoftApp方法)

?暂时停止宏运行(Wait方法)

?重新计算工作簿(Calculate方法)

?控制函数重新计算(Volatile方法)

?获取重叠区域(Intersect方法)

?获取路径分隔符(PathSeparator属性)

?快速移至指定位置(Goto方法)

?关闭Excel(Quit方法)

从Application对象中引用对象

使用Application属性返回Application对象。在引用应用程序之后,要访问Application 对象下面的对象,则依次下移对象模型层级。

例如,下面的代码设置第一个工作簿的第一个工作表中的第一个单元格的值为20:Application.Workbooks(1).Worksheets(1).Cells(1, 1) = 20

要引用该单元格,上述代码以Application对象开始,移至第一个工作簿,然后到第一

个工作表,最后到达单元格。

下面的示例代码在另一个应用程序中创建一个Excel工作簿,然后打开该工作簿:Set xl = CreateObject("Excel.Sheet")xl.Application.Workbooks.Open "newbook.xls"

可以使用许多属性和方法返回最常用的用户界面对象,例如活动工作表(ActiveSheet 属性),而无须Application对象限定。例如,下面的代码:

https://www.360docs.net/doc/d212875083.html, = "Monthly Sales"

可以替换为:

https://www.360docs.net/doc/d212875083.html, = "Monthly Sales"

然而,在使用简短的引用时必须小心,必须已经选择了正确的对象。如果已经使用诸如Worksheet对象的Activate方法选择了合适的工作簿和工作表,那么能够使用下面的代码引用第一个单元格:

Cells(1, 1) = 20

有一些实例必须使用Application限定引用。例如,OnTime方法、应用程序窗口的Width和Height属性。通常,处理Excel窗口外观的属性或者影响应用程序全部行为的属性需要Application限定,例如DisplayFormulaBar属性用于显示或隐藏公式栏。Calculation 方法也需要限定。

Application对象相关的集合

本节介绍与Application对象相关的一些集合。

AddIns集合

AddIns集合代表当前在Excel中装载的所有加载项。就像遍历任何其它集合一样,可以列出应用程序中关于加载项的不同类型的信息。下面的示例列出当前在Excel中装载的加载项的路径和名称:

Sub ListAddIns()

Dim myAddin As AddIn

For Each myAddin In AddIns

MsgBox myAddin.FullName

Next

End Sub

Columns集合和Rows集合

这些集合代表当前工作簿中的列和行,可以使用它们分别选择指定的列和行。

Application.Columns(4).Select

上述语句选择D列,就像在工作表中单击该列的标题一样。

Application.Rows(5).Select

上述语句选择第5行,就像在工作表中单击该行的行边一样。

Dialogs集合

Dialogs集合由应用程序中所有的对话框组成。本文后面将详细介绍该集合。

Sheets集合

Sheets对象返回指定工作簿或活动工作簿中所有工作表的集合。Sheets集合包含Chart对象或Worksheet对象。下面的示例打印活动工作簿中所有工作表:Application.Sheets.PrintOut

下面的示例遍历工作簿中所有的工作表,并打印包含有数据的工作表:

For iSheet = 1 To Application.Sheets.Count

If Not IsEmpty(Application.Sheets(iSheet).UsedRange) Then

Application.Sheets(iSheet).PrintOut copies:=1

End If

Next iSheet

Application对象相关的属性

在Excel 2007应用程序中,有大量的属性用来访问不同的对象。这里,只探讨经常使用的属性。

?ActiveCell

?ActiveChart

?ActiveSheet

?ActiveWindow

?ActiveWorkbook

?RangeSelection

?ScreenUpdating

?Selection

?StatusBar

?ThisWorkbook

ActiveCell属性

Application对象的ActiveCell属性返回Range对象,代表活动工作簿的活动工作表中的活动单元格。如果没有指定对象限定,那么该属性返回活动窗口中的活动单元格。

注意区分活动单元格和单元格选区。活动单元格是当前选区里的单个单元格,选区可能包含很多单元格,但仅有一个单元格是活动单元格。

下面的示例改变活动单元格的字体格式。注意确保正在处理正确的单元格,Worksheets集合的Activate方法使工作表Sheet1为活动工作表。

Worksheets("Sheet1").Activate With ActiveCell.Font .Bold = True .Italic = True End With

ActiveChart属性

ActiveChart属性返回Chart对象,代表活动图表,无论该图表是嵌入式图表还是图表工作表。当嵌入式图表被选择或者被激活时,该图表是活动图表。下面的示例使用ActiveChart属性在工作表Monthly Sales中添加一个三维柱形图:

Sub AddChart()

Charts.Add

With ActiveChart

.ChartType = xl3DColumn

.SetSourceData Source:=Sheets("Sheet1").Range("B3:H15")

.Location Where:=xlLocationAsObject, Name:="Monthly Sales"

.HasTitle = True

.ChartTitle.Characters.Text = "Monthly Sales by Category"

End With

End SubActiveSheet属性

ActiveSheet属性返回Worksheet对象,代表当前所选择的工作表(在顶部的工作表)。在一个工作簿中仅仅有一个工作表是活动工作表。下面的示例显示活动工作表的名字:MsgBox "活动工作表的名字是" & https://www.360docs.net/doc/d212875083.html,

下面的示例由用户指定复制活动工作表的次数并复制活动工作表,将复制的工作表放

置到工作表Sheet1的前面:

Sub CopyActiveSheet()

Dim x As Integer, numtimes As Integer

x = InputBox("请输入复制活动工作表的次数")

For numtimes = 1 To x '在工作表Sheet1的前面放置工作表副本

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets("Sheet1")

Next

End Sub

ActiveWindow属性

ActiveWindow属性返回Window对象,代表活动窗口(在顶部的窗口)。下面的示例显示活动窗口的名称(Caption属性):

MsgBox "活动窗口的名称是" & ActiveWindow.Caption

Caption属性返回活动窗口的名称,允许使用名称而不是索引号来更清楚地访问该窗口。

下面的示例选择并打印工作表,然后对第二个工作表重复这一过程:

Sub PrintWorksheet()

Application.ScreenUpdating = False

Sheets("Sales").Select

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

Sheets("Expenses").Select

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

End Sub

在该示例中,您可能奇怪为什么将ScreenUpdating属性设置为False。当Excel执行一系列操作任务时,屏幕被更新并且被刷新许多次,这导致屏幕闪烁。设置ScreenUpdating 属性为False消除这些闪烁。此外,因为计算机处理器无须为刷新屏幕而暂停,这能使大的应用程序运行得更快。

ActiveWorkbook属性

ActiveWorkbook属性返回Workbook对象,代表活动窗口中的工作簿。下面的示例显示活动工作簿的名称:

MsgBox "活动工作簿的名称是" & https://www.360docs.net/doc/d212875083.html,

下面的示例设置计算模式为手动,然后遍历并计算活动工作簿中的每个工作表:

Sub CalcBook()

Dim wks As Worksheet

Application.Calculate = xlManual

For Each wks In ActiveWorkbook.Worksheets

wks.Calculate

Next

Set wks = Nothing

End Sub

RangeSelection属性

RangeSelection属性返回Range对象,代表在指定的窗口的工作表中所选择的单元格,即使是工作表中激活或选择的图形对象。下面的示例显示活动窗口的工作表中所选择的单元格的地址:

MsgBox Application.ActiveWindow.RangeSelection.Address

当选择单元格区域时,RangeSelection属性和Selection对象代表相同的单元格区域。当选择图形时,RangeSelection属性返回以前的单元格选区。关于Selection属性的更多介绍参见下节。

下面的示例显示单元格中头三个字符:

Range("A1").Select

MsgBox Left(ActiveWindow.RangeSelection, 3)

下面的示例显示单元格名称的头三个字符:

Range("A1").Select

MsgBox Left(https://www.360docs.net/doc/d212875083.html,, 3)

命令https://www.360docs.net/doc/d212875083.html,返回单元格名称。

ScreenUpdating属性

ScreenUpdating属性用于控制屏幕刷新,可将其值设置为True或False。通常,Excel 开启了屏幕刷新(即该属性值为True),因此在代码执行时,Excel会随着代码的操作而不断更新屏幕显示,这样在运行处理涉及到多个工作表或单元格中的大量数据的代码(选择或激活对象)时,屏幕会不停闪烁,并且会占用CPU的处理时间,从而降低程序的运行速度。

可以在程序代码的开始部分设置ScreenUpdating属性为False,即

Application.ScreenUpdating=False,以关闭屏幕刷新,这样不仅能够使代码运行更快,而

且使得界面对用户更为友好。在程序结束前,将该属性设置为True,以恢复Excel对屏幕

更新的控制。

然而,在宏运行的过程中,如果需要显示用户窗体或者内置对话框,建议先恢复屏幕刷新,否则拖动用户窗体时,会在屏幕上产生橡皮擦的效果。当然,在显示该对象后,可以重新关闭屏幕刷新。

Selection属性

Selection属性返回活动窗口中所选择的对象。例如,对于单元格,该属性返回Range 对象;对于图表,该属性返回Chart对象。如果使用该属性时没有限定引用,则等价于Application.Selection。

下面的示例清除工作表Sheet1中的选区(假设选区是单元格区域):

Worksheets("Sheet1").ActivateSelection.Clear

下面的示例在变量NumRows中存储所选行的总数:

numrows = 0

For Each area In Selection.Areas

numrows = numrows + area.Rows.Count

Next area

下面的示例统计所选区域中单元格的数量,并在消息框中显示结果:

Dim cell As Object

Dim count As Integer

count = 0

For Each cell In Selection

count = count + 1

Next cell

MsgBox count & "项被选择"

下面的示例确保在输入数据之前选择的是工作表:

If TypeName(ActiveSheet) <> "Worksheet" Or TypeName(Selection) <> "Range" Then

MsgBox "本程序仅用于单元格区域", vbCritical

Exit Sub

End If

Range("A1").Value = 20

StatusBar属性

StatusBar属性返回或设置状态栏中的文本。该属性允许改变显示在Excel窗口底部的状态栏中的信息,这特别有助于使用户了解需要花时间完成的操作处理的进度。因此,状态栏是一种告知用户当前程序信息的极好方式,并且状态栏不会干扰用户,也易被开发者利用。

如果Excel控制状态栏,则StatusBar属性返回False。此外,要恢复缺省的状态栏文本,只需设置该属性为False,即使隐藏了状态栏。

例如,下面的示例将现在正在处理的文件赋值给状态栏:

Sub test()

Dim FileNum As Integer

FileNum = 0

For Each file In Files

Application.StatusBar = "现在正在处理文件" & FileNum

FileNum = FileNum + 1

Next

End Sub

然后,当程序结束时,使用下面的语句将状态栏恢复为正常:

Application.StatusBar = False

这是通知Excel并清空状态栏的最简单的方式。除非重新启动Excel,否则状态栏中会一直保持着使用Application.StatusBar所显示的文本,因此应该在合适的地方使用Application.StatusBar = False语句,尤其是应该考虑发生错误时如何恢复状态栏。另外,在使用状态栏时,需要选择一个合适的更新间隔,使之既不会影响程序性能又能为用户提供有用的信息。

可以创建自已的过程来使用StatusBar属性,以显示宏或其它过程的进度:

Sub ShowStatusBarProgress()

Dim i As Long

Dim pctDone As Double

Dim numSquares As Long

Const MAXSQR As Long = 15

For i = 1 To 30

pctDone = i / 30

numSquares = pctDone * MAXSQR

Application.StatusBar = Application.WorksheetFunction.Rept(Chr(60), numSquares)

Application.Wait Now + TimeSerial(0, 0, 1)

Next i

Application.StatusBar = False

End Sub

本示例随着程序的运行逐渐显示由常量MAXSQR定义的15个小于符号,小于符号使用ASCⅡ字符60生成。本示例没有指示过程执行多长时间,只是显示了执行的进度。Wait 方法摸拟宏占用的执行时间。

要在VBA代码中使用状态栏,首先确定在用户界面中是否显示了状态栏(因为用户极

有可能关闭了显示状态栏的选项),并且在状态栏使用完毕后,应将其恢复到用户原先的设置,因此在程序开始前,将状态栏的信息保存到一个变量中:

bStatusBarInfo=Application.DisplayStatusBar

然后,将DisplayStatusBar属性设置为True,以确保显示状态栏。在程序结束前,将状态栏恢复到原先的设置:

Application.DisplayStatusBar=bStatusBarInfo

ThisWorkbook属性

ThisWorkbook属性返回Workbook对象,代表当前正运行的宏所在的工作簿。该属性允许加载项引用包含代码的工作簿。ActiveWorkbook属性在该实例中不会工作,因为活动工作簿可能不是包含加载项代码的工作簿。换句话说,ActiveWorkbook属性不会返回加载项工作簿,它返回调用加载项的工作簿。如果从VB代码创建了一个加载项,应该使用ThisWorkbook属性限定必须在编译到该加载项的工作簿中运行的语句。

下面的示例关闭包含示例代码的工作簿,如果修改了该工作簿,则不会保存修改。

ThisWorkbook.Close SaveChanges:=False

下面的示例遍历每个打开的工作簿并将其关闭,然后关闭包含该代码的工作簿。

Sub CloseOpenWrkBks()

Dim wrkb As Workbook

For Each wbk In Application.Workbooks

If https://www.360docs.net/doc/d212875083.html, <> https://www.360docs.net/doc/d212875083.html, Then

wbk.Close True

End If

Nextwbk

ThisWorkbook.Close True

End Sub

Application对象相关的方法

下面探讨Application对象经常使用的一些方法。

FindFile方法和Dialogs集合

与GetOpenFilename方法不同,FileFind方法显示“打开”对话框并允许用户打开文件。如果成功打开文件,那么该方法返回True;如果用户取消了该对话框,那么该方法返回False。

下面的示例显示一条消息,告诉用户打开一个指定的文件,然后显示“打开”对话框。如果用户不能够打开该文件,则显示一条消息。

Sub OpenFile1()

Dim bSuccess As Boolean

MsgBox "请定位到MonthlySales.xls文件."

bSuccess = Application.FindFile

If Not bSuccess Then

MsgBox "该文件没有打开."

End If

End Sub

也可以使用Dialogs集合打开特定的对话框来完成相同的操作。使用Dialogs集合的优势之一是使用Show方法,可以传递参数修改内置对话框的缺省行为。例如,xlDialogOpen 的参数为:file_text、update_links、read_only、format、prot_pwd、write_res_pwd、ignore_rorec、file_origin、custom_delimit、add_logical、editable、file_access、notify_logical、converter。

注:要找到特定对话框的参数,在Excel帮助的“内置对话框参数列表”中查找相应的对话框常量。

下面的示例显示在文件名框中带有Book1.xlsm的“打开”对话框,允许用户显示缺省文件而不必选择文件。

Sub OpenFile2()

Application.Dialogs(XlBuiltInDialog.xlDialogOpen).Show arg1:="Book1.xlsm"

End Sub

Dialogs集合的优点在于,可以使用它来显示任何的Excel对话框(大约有250个)。通过下述步骤可以找到对话框完整列表。

(查找对话框集合的成员列表)

1、打开VBE。

2、单击“查看——对象浏览器”或者按F2键,显示“对象浏览器”。

3、在搜索框中输入xlDialog。

4、单击“搜索”按钮。

对Excel 2007而言,可以使用CommandBar对象来执行功能区中的命令,例如,下面的语句显示“定位”对话框:

https://www.360docs.net/doc/d212875083.html,mandBars.ExecuteMso ("GoTo")

ExecuteMso方法执行由idMso参数标识的控件。idMso参数的取值可以查找网上资源。

下面的语句显示“设置单元格格式”对话框中的“字体”选项卡:

https://www.360docs.net/doc/d212875083.html,mandBars.ExecuteMso ("FormatCellsFontDialog")

GetOpenFilename方法

GetOpenFilename方法显示标准的“打开”对话框并从用户处获取文件名称,但不真正打开任何文件,而是以字符串返回用户选择的文件名及其路径。那么,您可以利用该字符串完成所需要的操作,例如可以传递返回的结果到OpenText方法。下面是GetOpenFilename 方法的语法(所有参数都是可选的):

GetOpenFilename(FileFilter,FilterIndex,Title,ButtonText,MultiSelect)

参数FileFilter是一个字符串,规定筛选条件(例如,*.txt,*.xla),在“打开”文件对话框中只显示与筛选条件相匹配的文件,默认为“所有文件(*.*),*.*”。参数FilterIndex指定缺省的文件筛选条件的索引值,从1到参数FileFilter中指定的筛选数,默认使用索引值为1的

文件筛选条件。参数Title指定对话框的标题,默认显示“打开”。参数ButtonText仅用于Macintosh计算机。参数MultiSelect是一个Boolean值,指定能否选择多个文件,默认仅能够选择单个文件。

下面的示例显示在文件类型中设置为文本文件(*.txt)的“打开”对话框,然后显示带有用户选择的信息的消息框。注意,文件并没有被打开。

Dim fileToOpen As String

fileToOpen = Application.GetOpenFilename("文本文件(*.txt),*.txt")

If fileToOpen <> "" Then

MsgBox "打开" & fileToOpen

End If

下面的示例获取多个工作簿:

Sub TestGetFiles()

Dim nIndex As Integer

Dim vFiles As Variant

Dim strFileName As String '获取多个Excel文件

vFiles = GetExcelFiles("测试GetExcelFiles函数") '确保没有取消对话框. '如果用户取消对话框,函数返回False,而不是数组

If Not IsArray(vFiles) Then

MsgBox "没有选择文件."

Exit Sub

End If '如果没有取消对话框,则遍历文件

For nIndex = 1 To UBound(vFiles)

strFileName = strFileName & vbCrLf & vFiles(nIndex)

Next nIndex '显示用户所选择的文件名称

MsgBox "用户已选择的文件如下:" & vbCrLf & strFileName

End Sub

'允许选择多个文件'返回含有文件名称的数组

Function GetExcelFiles(sTitle As String) As Variant

Dim sFilter As String

Dim bMultiSelect As Boolean

sFilter = "Excel工作簿(*.xlsx),*.xlsx"

bMultiSelect = True

GetExcelFiles = Application.GetOpenFilename(FileFilter:=sFilter, Title:=sTitle, MultiSelect:=bMultiSelect)

End Function

当将GetOpenFilename方法的参数MultiSelect设置为True时,如果用户选择了文件,那么将返回一个变体类型的数组,且数组索引值基于1而不是0;如果用户取消了选择文件,

那么返回False。在TestGetFiles过程的代码中,使用IsArray函数测试返回值是否是数组。如果使用vFiles=False来判断的话,当用户选择了文件时,由于返回的值为数组,则会导致运行时错误:类型不匹配。

GetSaveAsFilename方法

GetSaveAsFilename方法显示“另存为”对话框,允许用户指定一个文件名和需要保存文件的位置,但是实际上并没有保存文件。GetSaveAsFilename方法的语法如下(所有参数都是可选的):

Application.GetSaveAsFilename(InitialFilename,FileFilter,FilterIndex,Title,ButtonTex t)

参数InitialFilename为指定文件名的字符串,默认为活动工作簿的名称,若不需要指定初始文件名,则将其设置为空字符串(”");参数FileFilter是表示筛选条件的字符串,在“另存为”对话框只显示与筛选条件相匹配的文件,默认为“所有文件(*.*),*.*”;参数FilterIndex 用来指定缺省的文件筛选条件的索引值,默认使用索引值为1的文件筛选条件;参数Title 指定显示对话框标题的字符串文本,默认显示“另存为”;参数ButtonText仅用于Macintosh 计算机。

下面介绍一个综合示例,是Steven M. Hansen编写的,从完整的文件名字符串中分解出文件路径和文件名。

Sub TestBreakdownName()

Dim sPath As String

Dim sName As String

Dim sFileName As String

Dim sMsg As String

sFileName = Application.GetSaveAsFilename

BreakdownName

sFileName , sName, sPath

sMsg = "文件名是:" & sName & vbCrLf

sMsg = sMsg & "文件路径是:" & sPath

MsgBox sMsg, vbOKOnly

End Sub

Function GetShortName(sLongName As String) As String

Dim sPath As String

Dim sShortName As String

BreakdownName

sLongName , sShortName, sPath

GetShortName = sShortName

End Function

Sub BreakdownName(sFullName As String, ByRef sName As String, ByRef sPath

As String)

Dim nPos As Integer '找出文件名从哪里开始

nPos = FileNamePosition(sFullName)

If nPos > 0 Then

sName = Right(sFullName, Len(sFullName) - nPos)

sPath = Left(sFullName, nPos - 1)

Else '无效的文件名

End If

End Sub

'返回提供的完整文件名中文件名的位置或首字符索引值'完整文件名包括路径和文件名

'例如:FileNamePosition("C:\Testing\Test.xlsx")=11

Function FileNamePosition(sFullName As String) As Integer

Dim bFound As Boolean

Dim nPosition As Integer

bFound = False

nPosition = Len(sFullName)

Do While bFound = False '确保不是零长度字符串

If nPosition = 0 Then Exit Do '从右开始查找第一个"\"

If Mid(sFullName, nPosition, 1) = "\" Then

bFound = True

Else '从右至左

nPosition = nPosition - 1

End If

Loop

If bFound = False Then

FileNamePosition = 0

Else

FileNamePosition = nPosition

End If

End Function

除了运行TestBreakdownName过程获取文件名和文件路径外,还可以使用GetShortName函数仅获取文件名。此外,在Sub过程BreakdownName中使用了ByRef 参数,即通过引用传递参数,这样传递给子过程的参数改变后,调用子过程的主过程中相应的参数也随之改变。

InputBox方法

InputBox方法提供了一种程序与用户之间进行简单的交互的方式,允许我们从用户处获得信息。该方法将显示一个对话框,提示用户输入某值。通过指定希望用户输入的数据类型,InputBox方法能够进行数据验证。InputBox方法的语法如下:

InputBox(Prompt,Title,Default,Left,Top,HelpFile,HelpContextID,Type)

其中:参数Prompt是在对话框中显示的消息。这里,可以提示用户您希望用户输入的数据类型。该参数是唯一的必需参数。

参数Title是对话框顶部显示的标题。缺省使用应用程序名称。

参数Default是对话框最初显示时的缺省值。

参数Left和Top用于指定对话框的位置,这些值相对于屏幕的左上角且以磅为单位。如果忽略,则对话框将水平居中且距屏幕顶约1/3处。

参数HelpFile和HelpContextId指定帮助文件,如果使用了这两个参数,那么在对话框中将出现帮助按钮。

1。

注意,如果Type为8,那么必须使用Set语句将结果赋值给Range对象,如下面的代码所示:

Set myRange = Application.InputBox(Prompt:="示例", Type:=8)

如果希望允许输入多种数据类型,那么可以使用上表中的任意数值组合。例如,如果要显示一个可以接受文本或数值的输入框,则可以将type的值设置为3(即1+2的结果)。如果输入了错误类型的数据,则显示错误消息并提示再次输入数据。如果单击“取消”按钮,则返回False。

下面的示例提示用户输入希望打印活动工作表的份数(注意,type指定希望输入的是一个数值):

Sub PrintActiveSheet()

Dim TotalCopies As Long, NumCopies As Long

Dim sPrompt As String, sTitle As String

sPrompt = "您想要多少副本?"

sTitle = "打印活动工作表"

TotalCopies = Application.InputBox(Prompt:=sPrompt, Title:=sTitle, Default:=1, Type:=1)

For NumCopies = 1 To TotalCopies

ActiveSheet.PrintOut

Next NumCopies

End Sub

如果将InputBox方法的返回值赋给一个Variant型变量,则可以检测该值是否为False。如果要返回单元格区域,则使用像下面的代码会更好:

Sub GetRange()

Dim rng As Range

On Error Resume Next

Set rng = Application.InputBox(Prompt:="输入单元格区域", Type:=8)

If rng Is Nothing Then

MsgBox "操作取消"

Else

rng.Select

End If

End Sub

此时,必须使用Set语句将Range对象赋值给某对象变量,如果用户单击“取消”按钮则返回值False,Set语句将失败并提示运行时错误。使用On Error Resume Next语句避免运行时错误,然后检查是否产生了一个有效的区域。如果用户单击“确定”按钮,那么InputBox方法检查内置类型以确保将返回有效的区域,因此空区域表明单击了“取消”按钮。

Run方法

Run方法执行一个宏或调用一个函数。可以使用该方法运行由VBA或Excel宏语言编写的宏,或者运行动态链接库(DLL)里的函数或Excel加载项(XLL)。XLL是使用任何支持创建DLLs的编译器为Excel创建的加载项。Run方法的语法为:

Run(Macro,Arg1,…,Arg30)

参数Macro是要执行的宏或函数的名称,参数Arg1至Arg30是需要传递给宏或函数的一些参数。

下面的示例使用Run方法调用一个过程,设置单元格区域中单元格的字体为粗体。当然,也可以使用Call方法获得相同的结果。

Sub UseRunMethod()

Dim wks As Worksheet

Dim rng As Range

Set wks = Worksheets("Sheet2")

Set rng = wks.Range("A1:A10")

Application.Run "MyProc", rng '也能够使用下面的语句完成相同的任务'

Call MyProc(rng)

End Sub

Sub MyProc(rng As Range)

With rng.Font

.Bold = True

End With

End Sub

Application对象相关的事件

Application对象也有一些事件,能够用于监视整个Excel应用程序的行为。要使用Application事件,必须启用事件监视。

激活Application事件监视

1、单击“插入——类模块”,创建一个类。

2、在属性中,将类的名称改为AppEventClass。

3、在类的代码窗口,添加下面的代码:

Public WithEvents Appl As Application

现在,能够在应用程序中运用应用程序级事件。

4、在代码窗口顶部左侧的对象列表中,选择Appl。

5、在代码窗口顶部右侧的过程列表中,选择WorkbookOpen。此时,将为

Appl_WorkbookOpen过程插入一对占位符。

6、在过程中添加下面的语句:

Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook) MsgBox "已打开工作簿."End Sub

7、重复上面的步骤插入Appl_WorkbookBeforeClose事件,并添加下面的语句:

Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean) MsgBox "关闭工作簿."End Sub

8、接下来,创建一个变量用于引用类模块中创建的Application对象。在工程资源管理器中,双击ThisWorkbook打开代码窗口。

9、添加下面的语句。

Dim ApplicationClass As New AppEventClass

通过在ThisWorkbook代码窗口添加下面的语句,创建所声明的对象对Application对象的连接:

Private Sub Workbook_Open()

Set ApplicationClass.Appl = Application

End Sub

10、保存并关闭该工作簿。

11、现在,测试代码。打开该工作簿,将触发Appl_WorkbookOpen事件,显示相应的信息框。

12、关闭该工作簿,将触发Appl_WorkbookBeforeClose事件,显示相应的信息框。

13、切换回AppEventClass类模块并单击过程列表显示能够用于监控应用程序行为的一系列事件。

理解这些事件如何被触发以及事件的顺序对理解应用程序是重要的。在类模块中添加其他的事件并插入消息框,然后试验不同的行为来看看何时触发某特定的事件。

使用Application对象执行其它任务

除了Application对象中最常用的对象外,您可能希望在Excel应用程序中执行一些其他任务。下面我们就来探讨这方面的内容。

删除工作表而显示提示信息(DisplayAlerts属性)

下面的示例首先关闭询问是否保存工作表的任何消息,接着删除工作表并打开警告消息。

Sub DeleteSheet()

Application.DisplayAlerts = False

ActiveSheet.Delete

Application.DisplayAlerts = True

End Sub

上述示例代码中使用了DisplayAlerts属性,将其值设置为False以自动执行Excel警告对话框中默认按钮相关的操作。

设置DisplayAlerts属性的意图在于,运行宏时不必响应系统出现的警告而使执行过程中断。当然,在过程结束前,最好将DisplayAlerts属性设置为True。

无须提示用户而保存工作表(DisplayAlerts属性)

下面的示例保存工作表,而没有通知用户是否保存。

Sub SaveWorksheet()

Application.DisplayAlerts = False

ActiveWorkbook.SaveAs "C:\MonthlySales.xls"

Application.DisplayAlerts = True

End Sub

此时,如果现有文件与要保存的文件名相同,那么会覆盖该文件而不会弹出任何警告消息。

使用SendKeys方法发送信息到记事本

SendKeys方法允许发送按键到当前活动窗口,用来控制不支持任何其他交互形式的应用程序,例如DDE(动态数据交换)或OLE。

下面的示例使用SendKeys命令从Excel中复制数据区域到记事本,然后保存该文件。

Sub SKeys()

Range("A1:D15").Copy '复制单元格区域

SendKeys "% n", True '最小化Excel

Shell "notepad.exe", vbNormalFocus '开启记事本

SendKeys "^V", True '将数据粘贴到记事本

SendKeys "%FA", True '指定另存为

SendKeys "SalesData.txt", True '提供文件名

SendKeys "%S", True '保存文件

End Sub

本示例首先复制数据区域到剪贴板,然后最小化Excel,开启记事本,接着从剪贴板复制数据到记事本,最后指定文件名并保存文件。

下面的示例打开了“记事本”应用程序(不支持DDE或OLE),并将数据行写入记事本文档:

Sub SKeys()

Dim dReturnValue As Double

dReturnValue = Shell("NOTEPAD.EXE", vbNormalFocus)

AppActivate dReturnValue

Application.SendKeys "Copy Data.xlsx c:\", True

Application.SendKeys "~", True

Application.SendKeys "%FABATCH%S", True

End Sub

注意,应该在Excel应用程序窗口执行上述程序。

下面的过程清除VBE立即窗口中的内容。如果在立即窗口中进行过试验或者使用Debug.Print语句在立即窗口输出数据,那么旧的信息将产生混乱。该过程将焦点转移到立即窗口,发送选择该窗口中的所有文本,然后发送Del键删除文本:

Sub ImmediateWindowClear()

Application.VBE.Windows.Item("立即窗口").SetFocus

Application.SendKeys "^a"

Application.SendKeys "{Del}"

End Sub

注意,要使上述代码运行,必需编程访问Visual Basic工程。从Excel功能区中选择“开发工具”选项卡,选择“宏安全性”,然后勾选“信任对VBA工程对象模型的访问”。

其中,百分比符号(%)用于代表Alt键,波形符号(~) 代表回车键,^符号代表Ctrl键。在花括号{}里放置名称指定其它特别的键,例如{Del}代表Delete键。

安排宏在指定的时间和间隔运行(OnTime方法)

可以使用Application对象的OnTime方法在指定的时间或者在有规律的时间间隔运行某过程。OnTime方法的语法如下:

Application.OnTime(EarliestTime,Procedure,LastestTime,Schedule)

参数EarliestTime指明希望何时运行由参数Procedure指定的过程,可选的参数LastestTime和Schedule指明过程运行的最迟时间,以及是否安排运行一个新过程或者删除已经存在的过程。当开始调用某过程而Excel正忙时,则需要使用参数LastestTime指定希望调用该过程的时间区间。如果使用Application对象的Wait方法暂停某宏,所有的Excel 行为,包括手工交互操作,都将被挂起。OnTime方法的优势在于,当等待运行安排的宏时,允许返回正常的Excel交互操作,包括运行其他的宏。

下面的示例指定每隔5分钟运行一次名为YourProc的过程:

Application.OnTime EarliestTime:=Now + TimeValue("00:05:00"),

Procedure:="YourProc"

下面的示例在每天中午运行过程YourProc:

Application.OnTime EarliestTime:=TimeValue("12:00:00"), Procedure:="YourProc"

下面的示例安排每隔5分钟调用一次AutoSave过程。如果关闭该工作簿,则调用CleanUp过程来执行可能希望的清理以及删除任何额外的调用。

Private Sub Workbook_Open()

Application.OnTime Now + TimeValue("00:05:00"), "AutoSave"

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

On Error Resume Next

Application.OnTime Now + TimeValue("00:05:00"), "CleanUp", , False

End Sub

注意,Workbook_Open事件和Workbook_BeforeClose事件包含在工作簿代码模块中,而AutoSave过程和CleanUp过程则存在于标准代码模块中。

当使用OnTime方法安排在将来的某个时间运行宏时,必须确保Excel一直在内存中运行直至到达安排的时间。但不需要一直打开包含OnTime宏的工作簿。如果需要,Excel 将打开该工作簿。

通过上述简介,我们已经了解了OnTime方法的基本用法。下面再详细介绍OnTime 方法。

有时,我们可能需要设计Excel工作簿定期并自动地运行一个过程。例如,可能希望每隔几分钟从数据源中更新数据,此时执行Excel应用程序的OnTime方法指令Excel在给定的时间去运行某过程。通过编写代码使程序自已调用OnTime方法,能使VBA代码定期自动执行。

OnTime方法要求指定日期和时间以及要运行的过程作为参数,重要的是要记住具体

地告诉Excel什么时候运行这个过程而不是从当前时间开始的偏差。为了取消一个未执行的OnTime过程,必须经过该过程计划要运行的确切的时间,不能够告诉Excel取消下一个计划执行的过程。因此,建议将安排过程开始运行的时间存放在一个公共的(或全局)变量中,该变量作用于所有的代码。然后,能够使用所存储时间的变量去安排运行或取消事件。下面的示例代码在公共的常量中存储了所运行过程的名称和重复执行的时间间隔,当然这不是必需的。

Public RunWhen As DoublePublic Const cRunIntervalSeconds = 120 ' two minutesPublic Const cRunWhat = "The_Sub"

为开始这个过程,使用一个名为StartTimer的子程序。代码如下:

Sub StartTimer()

RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)

Application.OnTime earliesttime:=RunWhen, procedure:=cRunWhat,

schedule:=True

End Sub

将比当前时间多两分钟的日期和时间存放在RunWhen变量中,然后调用OnTime方法指令Excel何时运行cRunWhat过程。

“The_Sub”是一个字符串变量,Excel将在合适的时间运行该过程。下面是该过程代码示例:

Sub The_Sub()

' '这里放置代码' StartTimer

End Sub

注意,The_Sub过程的最后一行调用了StartTimer过程,再次重复运行这个过程。并且当下次使用OnTime调用The_Sub过程时,将再次调用StartTimer来重复执行它自已。这就是如何执行周期循环的方法。

有时,当关闭工作簿时或者满足某个条件时需要停止定时执行的过程。由于OnTime 方法是Application对象的一部分,简单地关闭已创建事件的工作簿不会取消对OnTime的调用。一旦Excel自身保持运行,它将执行OnTime过程,并且在必要时会自动打开该工作簿。

为了停止OnTime过程,必须对OnTime方法指定确切的时间,这就是我们将时间作为公共的变量存放在RunWhen中的原因。否则,没办法知道过程计划执行的确切时间。(所计划的时间像OnTime方法中的一把“钥匙”,如果没有它,就没有通往事件的入口)下面是一个名为StopTimer的子过程,它将停止要执行的OnTime过程。

Sub StopTimer()

On Error Resume Next

Application.OnTime earliesttime:=RunWhen, procedure:=cRunWhat,

schedule:=False

用VB在Excel中实现数据查找调用并校验

用VB在Excel中实现数据查找调用并校验 Sub 按钮3_单击() Application.ScreenUpdating = False '关闭屏幕 Sheets("信息表").Select Cells(4, 20) = 1 Columns("U:U").Select '对单位进行筛选 Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="=1", Operator:=xlAnd Range("K5:K4003").Select Selection.ClearContents Sheets("银行卡号").Select Range("Z5:Z4003").Select Selection.ClearContents Sheets("信息表").Select Dim i, j, k, m, n As Integer n = Cells(2, 22).Value + 5 Cells(6, 25) = "查找银行卡号并导入" For m = 5 To n Sheets("信息表").Select Cells(7, 26) = m - 4 Application.ScreenUpdating = True '重新打开屏幕 Cells(1, 2) = Cells(8, 26) Range(Cells(m, 6), Cells(m, 6)).Select Application.ScreenUpdating = False '关闭屏幕 Cells(2, 25) = Cells(m, 6) Cells(2, 26) = Cells(m, 3) Cells(m, 8) = Cells(3, 27) If Cells(3, 26) > 1 Then Cells(m, 11) = "同校同名" End If Sheets("银行卡号").Select j = Cells(4, 24) + 4 Cells(j, 26) = 1 Sheets("信息表").Select Next m Cells(6, 25) = "为零银行卡号复查导入" For k = 5 To n Sheets("信息表").Select Cells(7, 26) = k - 4 Application.ScreenUpdating = True '重新打开屏幕 Cells(1, 2) = Cells(8, 26) Range(Cells(k, 6), Cells(k, 6)).Select

(新)vb程序调用excel数据

Visual Basic调用Excel之技巧吴声松 (湖北省水利水电勘测设计院地质大队湖北 430070) Visual Basic(以下简称VB)是一套可视化、面向对象、事件驱动方式的结构化程序设计语言,已经成为许多程序设计者甚至专业程序员用来开发WINDOWS应用程序的首选开发工具。但用过VB的程序设计人员都知道,要想用VB输出复杂的表格来,是十分困难的。能不能用VB调用EXCEL呢?Active技术标准为我们解决了这个问题。最近笔者为单位开发“土工试验数据整理”的某个模块时,涉及到复杂数据表格的输出问题,经过笔者的摸索,用VB调用EXCEL,取得了很好的效果。本文从编程实践的角度对使用VB控制EXCEL的技术作简要说明。 1 EXCEL的对象模型 如果一个应用程序支持自动化技术,那么其它的应用就可以通过其暴露的对象,对它进行控制,控制程序称为客户机,而被控制的一方就称为服务器,被控制的对象就是Active对象。VB正是通过EXCEL显露的各级对象来控制EXCEL工作的。每个对象都有各自的方法和属性,通过方法可以实现对对象的控制,而属性则可以改变对象的各种状态。 理解EXCEL的对象模型是对其编程的基础。EXCEL是以层次结构组织对象的,其对象模型中含有许多不同的对象元素,这些对象元素就是VB可以操纵的。在EXCEL对象的层次结构中,最顶层是Application对象,是Excel本身。从该对象开始往下依次是: .workbooks对象集,是Application对象的下层,其指的是Excel的工作簿文件。 .worksheets对象集,是Workbooks对象集的下层,它表示的是Excel 的一个工作表。 .Cells和Range对象,它们是worksheets对象的下层,它则指向Excel 工作表中的一个或多个单元格。 以上介绍的四个对象是Excel中最重要也是用得最多的对象,而且从上面的介绍中也不难看出,要控制Excel中的某个具体对象,如某个工作簿中某一表格中的单元格,就必须从Excel层次结构对象的最上层即Application对象开始遍历。 2 Excel对象的使用

excel导入导出通用方法

1.package https://www.360docs.net/doc/d212875083.html,mon.utils; 2.import java.io.OutputStream; 3.import java.util.List; 4.import javax.servlet.http.HttpServletResponse; 5.import org.apache.struts2.ServletActionContext; 6.import https://www.360docs.net/doc/d212875083.html,ng.reflect.Field; 7. 8.import jxl.Workbook; 9.import jxl.format.Alignment; 10.import jxl.format.Border; 11.import jxl.format.BorderLineStyle; 12.import jxl.format.VerticalAlignment; 13.import https://www.360docs.net/doc/d212875083.html,bel; 14.import jxl.write.WritableCellFormat; 15.import jxl.write.WritableFont; 16.import jxl.write.WritableSheet; 17.import jxl.write.WritableWorkbook; 18./*** 19. * @author lsf 20. */ 21.public class ExportExcel { 22./*************************************************************************** 23. * @param fileName EXCEL文件名称 24. * @param listTitle EXCEL文件第一行列标题集合 25. * @param listContent EXCEL文件正文数据集合 26. * @return 27. */ 28.public final static String exportExcel(String fileName,String[] Title, List listConte nt) { 29. String result="系统提示:Excel文件导出成功!"; 30.// 以下开始输出到EXCEL 31.try { 32.//定义输出流,以便打开保存对话框______________________begin 33. HttpServletResponse response=ServletActionContext.getResponse(); 34. OutputStream os = response.getOutputStream();// 取得输出流 35. response.reset();// 清空输出流 36. response.setHeader("Content-disposition", "attachment; filename="+ new String(fileN ame.getBytes("GB2312"),"ISO8859-1")); 37.// 设定输出文件头 38. response.setContentType("application/msexcel");// 定义输出类型 39.//定义输出流,以便打开保存对话框_______________________end 40. 41./** **********创建工作簿************ */ 42. WritableWorkbook workbook = Workbook.createWorkbook(os);

用VB操作excel方法汇总

用VB操作excel方法汇总 Private Sub Command3_Click() Dim i As Long Dim j As Long Dim objExl As Excel.Application '声明对象变量 Me.MousePointer = 11 '改变鼠标样式 Set objExl = New Excel.Application '初始化对象变量 objExl.SheetsInNewWorkbook = 1 '将新建的工作薄数量设为1 objExl.Workbooks.Add '增加一个工作薄 objExl.Sheets(objExl.Sheets.Count).Name = "book1" '修改工作薄名称 objExl.Sheets.Add , objExl.Sheets("book1") '增加第二个工作薄在第一个之后 objExl.Sheets(objExl.Sheets.Count).Name = "book2" objExl.Sheets.Add , objExl.Sheets("book2") '增加第三个工作薄在第二个之后 objExl.Sheets(objExl.Sheets.Count).Name = "book3" objExl.Sheets("book1").Select '选中工作薄 For i = 1 To 50 '循环写入数据 For j = 1 To 5 If i = 1 Then objExl.Selection.NumberFormatLocal = "@" '设置格式为文本 objExl.Cells(i, j) = " E " & i & j Else objExl.Cells(i, j) = i & j End If Next Next objExl.Rows("1:1").Select '选中第一行 objExl.Selection.Font.Bold = True '设为粗体 objExl.Selection.Font.Size = 24 '设置字体大小 objExl.Cells.EntireColumn.AutoFit '自动调整列宽 objExl.ActiveWindow.SplitRow = 1 '拆分第一行 objExl.ActiveWindow.SplitColumn = 0 '拆分列 objExl.ActiveWindow.FreezePanes = True '固定拆分 objExl.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1" '设置打印固定行 objExl.ActiveSheet.PageSetup.PrintTitleColumns = "" '打印标题 objExl.ActiveSheet.PageSetup.RightFooter = "打印时间: " & _ For mat(Now, "yyyy年mm月dd日 hh:MM:ss") objExl.ActiveWindow.View = xlPageBreakPreview '设置显示方式 objExl.ActiveWindow.Zoom = 100 '设置显示大小 '给工作表加密码 objExl.ActiveSheet.Protect "123", DrawingObjects:=True, _ Contents:=True, Scenarios:=True objExl.Application.IgnoreRemoteRequests = False

怎样实现用VB对EXCEL的操作

用VB操作excel方法 Private Sub Command3_Click() Dim i As Long Dim j As Long Dim objExl As Excel.Application'声明对象变量 Me.MousePointer=11'改变鼠标样式 Set objExl=New Excel.Application'初始化对象变量 objExl.SheetsInNewWorkbook=1'将新建的工作薄数量设为1 objExl.Workbooks.Add'增加一个工作薄 objExl.Sheets(objExl.Sheets.Count).Name="book1"'修改工作薄名称 objExl.Sheets.Add,objExl.Sheets("book1")'增加第二个工作薄在第一个之后 objExl.Sheets(objExl.Sheets.Count).Name="book2" objExl.Sheets.Add,objExl.Sheets("book2")'增加第三个工作薄在第二个之后 objExl.Sheets(objExl.Sheets.Count).Name="book3" objExl.Sheets("book1").Select'选中工作薄 For i=1To50'循环写入数据 For j=1To5 If i=1Then objExl.Selection.NumberFormatLocal="@"'设置格式为文本 objExl.Cells(i,j)="E"&i&j Else objExl.Cells(i,j)=i&j End If Next Next objExl.Rows("1:1").Select'选中第一行 objExl.Selection.Font.Bold=True'设为粗体 objExl.Selection.Font.Size=24'设置字体大小 objExl.Cells.EntireColumn.AutoFit'自动调整列宽 objExl.ActiveWindow.SplitRow=1'拆分第一行 objExl.ActiveWindow.SplitColumn=0'拆分列 objExl.ActiveWindow.FreezePanes=True'固定拆分 objExl.ActiveSheet.PageSetup.PrintTitleRows="$1:$1"'设置打印固定行 objExl.ActiveSheet.PageSetup.PrintTitleColumns=""'打印标题 objExl.ActiveSheet.PageSetup.RightFooter="打印时间:"&_ For mat(Now,"yyyy年mm月dd日hh:MM:ss") objExl.ActiveWindow.View=xlPageBreakPreview'设置显示方式 objExl.ActiveWindow.Zoom=100'设置显示大小 '给工作表加密码 objExl.ActiveSheet.Protect"123",DrawingObjects:=True,_ Contents:=True,Scenarios:=True objExl.Application.IgnoreRemoteRequests=False objExl.Visible=True'使EXCEL可见

.NET页面数据导出excel表方法

public void CreateExcel(DataSet ds,string typeid,string FileName) { HttpResponse resp; resp = Page.Response; resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName); string colHeaders= "", ls_item=""; int i=0; //定义表对象与行对像,同时用DataSet对其值进行初始化 DataTable dt=ds.Tables[0]; DataRow[] myRow=dt.Select(""); // typeid=="1"时导出为EXCEL格式文件;typeid=="2"时导出为XML格式文件if(typeid=="1") { //取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符for(i=0;i colHeaders+=dt.Columns[i].Caption.ToString()+"\t"; colHeaders +=dt.Columns[i].Caption.ToString() +"\n"; //向HTTP输出流中写入取得的数据信息 resp.Write(colHeaders); //逐行处理数据 foreach(DataRow row in myRow) { //在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n for(i=0;i ls_item +=row[i].ToString() + "\t"; ls_item += row[i].ToString() +"\n"; //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据 resp.Write(ls_item); ls_item=""; } } else { if(typeid=="2") { //从DataSet中直接导出XML数据并且写到HTTP输出流中 resp.Write(ds.GetXml()); } } //写缓冲区中的数据到HTTP头文件中 resp.End(); }

VB中读写EXCEL文件

VB中读写EXCEL文件 在VB中要想调用Excel,需要打开VB编程环境“工程”菜单中的“引用”项目,并选取项目中的“Microsoft Excel 11.0 object library”项。由于你的Excel 版本不同,所以这个选项的版本号可能不同 。定义EXCEL对象 Dim XlsObj As Excel.Application 'Excel对象 Dim XlsBook As Excel.Workbook '工作簿 Dim XlsSheet As Excel.Worksheet '工作表 。打开或创建EXCEL Set XlsObj = CreateObject("Excel.Application") '创建EXCEL对象XlsObj.Visible = True '设置EXCEL对象可见(或不可见) '打开已经存在的test.xls工件簿文件 Set xlbook = xlapp.Workbooks.Open(App.Path & "\test.xls") '创建有一个工作表的工作簿 XlsObj.SheetsInNewWorkbook = 1 Set XlsBook = XlsObj.Workbooks.Add 。设置活动工作表 '或者Set XlsSheet = XlsObj.Worksheets(1) 代表第1个Sheet Set XlsSheet = XlsObj.Worksheets("表名") 给单元格(row,col)赋值 XlsSheet.Cells(row, col) =值 给合并的单元格赋值,如(A3:A9) XlsSheet.Range("A3:A9") =值 运行 EXCEL 宏 XlsBook.RunAutoMacros ("宏名") 插入一行

C# 导出Excel 表

using System; using System.Collections.Generic; using https://www.360docs.net/doc/d212875083.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Reflection; using System.IO; namespace ExcelTest { public partial class frmMain : Form { public frmMain() { InitializeComponent(); } string[] ExcelColumTitle ={ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; int[] ExcelColumWidth ={10,15,15,12,12,12,20 };//各列宽度 private void btnOk_Click(object sender, EventArgs e) { this.Enabled = false;

Excel.Application excelKccx = new Excel.Application();//创建excel对象 excelKccx.Workbooks.Add(true);//创建excel工作薄 int row = 2; //把数据表的各个信息输入到excel表中 for (int i = 0; i < dataGridView1.Columns.Count; i++)//取字段名 { excelKccx.Cells[1, i + 1] = dataGridView1.Columns[i].Name.ToString(); } for (int i = 0; i < dataGridView1.Rows.Count; i++)//取记录值 { for (int j = 0; j < dataGridView1.Columns.Count; j++) { excelKccx.Cells[row, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString(); } row++; } for (int i = 0; i < dataGridView1.Columns.Count; i++) { excelKccx.get_Range(ExcelColumTitle[i]+(i+1), Type.Missing).ColumnWidth =ExcelColumWidth[i] ; //宽度设置 } for (int i = 0; i <= dataGridView1.Rows.Count; i++) { excelKccx.get_Range("A" + (i + 1), Type.Missing).RowHeight = 14.25; //高度设置 } excelKccx.Visible = true;//使excel可见*/ } private void frmMain_Load(object sender, EventArgs e) { List list = new List(); string[] tempArray = Directory.GetFileSystemEntries(@"new\"); for (int i = 0; i < tempArray.Length; i++) { string tempLine = ""; string tempAll = ""; string tempA = "";//编号 string tempB = "";//所属人 string tempC = "";//概览

VB6[1].0_导出excel_方法源代码

往链点点通共享资源,了解更多请登录https://www.360docs.net/doc/d212875083.html, VB6.0 导出excel 方法源代码 方法一: 用Msflexgrid的Textmatrix属性取Msflexgrid中每一个单元格的内容,然后填到Excel表中,或者写成CSV格式 方法二: 直接把查询结果导出成Excel工作表 Public Sub Export(formname As Form, flexgridname As String) Dim xlApp As Object 'Excel.Application Dim xlBook As Object 'Excel.Workbook Dim xlSheet As Object 'Excel.Worksheet Screen.MousePointer = vbHourglass On Error GoTo Err_Proc Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) 'Begin to fill data to sheet Dim i As Long Dim j As Integer Dim k As Integer With formname.Controls(flexgridname) For i = 0 To .rows - 1 k = 0 For j = 0 To .Cols - 1 If .colwidth(j) > 20 Or .colwidth(j) < 0 Then k = k + 1 xlSheet.Cells(i + 1, k).Value = "'" & .TextMatrix(i, j) End If Next j Next i End With xlApp.Visible = True Screen.MousePointer = vbDefault Exit Sub Err_Proc: Screen.MousePointer = vbDefault MsgBox "请确认您的电脑已安装Excel!", vbExclamation,"提示"

用VB操作EXCEL(VB6.0)(整理)

用VB操作Excel(VB6.0)(整理)全面控制Excel: 首先创建Excel对象,使用ComObj: Dim ExcelID as Excel.Application Set ExcelID as new Excel.Application 1)显示当前窗口: ExcelID.Visible:=True; 2)更改Excel标题栏: ExcelID.Caption:='应用程序调用MicrosoftExcel'; 3)添加新工作簿: ExcelID.WorkBooks.Add; 4)打开已存在的工作簿: ExcelID.WorkBooks.Open('C:\Excel\Demo.xls'); 5)设置第2个工作表为活动工作表: ExcelID.WorkSheets[2].Activate; 或ExcelID.WorkSheets['Sheet2'].Activate; 6)给单元格赋值: ExcelID.Cells[1,4].Value:='第一行第四列'; 7)设置指定列的宽度(单位:字符个数),以第一列为例: ExcelID.ActiveSheet.Columns[1].ColumnsWidth:=5; 8)设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:ExcelID.ActiveSheet.Rows[2].RowHeight:=1/0.035;//1厘米 9)在第8行之前插入分页符: ExcelID.WorkSheets[1].Rows[8].PageBreak:=1; 10)在第8列之前删除分页符: ExcelID.ActiveSheet.Columns[4].PageBreak:=0; 11)指定边框线宽度: ExcelID.ActiveSheet.Range['B3:D4'].Borders[2].Weight:=3;

vb读取excel数据

取得excel文件所有内容: 'add microsoft ado frist. Private Sub Command2_Click() Dim adoConnection As New ADODB.Connection Dim adoRecordset As New ADODB.Recordset CommonDialog1.ShowOpen 'OLE DB + ODBC Driver 方式: 'adoConnection.Open "Data Provider=MSDASQL.1;driver=Microsoft Excel Driver (*.xls);DBQ=e:\temp\book2.xls" 'Microsoft.Jet.OLEDB.4.0 方式,(建?) adoConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & CommonDialog1.FileName & ";Extended Properties='Excel 8.0;HDR=Yes'" adoRecordset.Open "select * from [sheet1$]", adoConnection, adOpenKeyset, adLockOptimistic Debug.Print adoRecordset.RecordCount Dim i As Integer Do Until adoRecordset.EOF For i = 0 To adoRecordset.Fields.Count - 1 Debug.Print adoRecordset.Fields.Item(0).Name Debug.Print adoRecordset.Fields.Item(0).Value Next i adoRecordset.MoveNext Loop End Sub 但还不知道如何取得sheet名,不好意思,那位老鸟知道请告知,谢谢 sheet名用Excel.Application对象 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Open("C;\123.xls")) For i = 1 To intSheetSum strTemp=xlBook.Worksheets(i).name Next i Dim xlsconn As New ADODB.Connection

vb读取excel内容

1、定义Excel操作变量 Dim objExcelFile As Excel.Application Dim objWorkBook As Excel.Workbook Dim objImportSheet As Excel.Worksheet 2、打开Excel进程,并打开目标Excel文件 Set objExcelFile = New Excel.Application objExcelFile.DisplayAlerts = False Set objWorkBook = objExcelFile.Workbooks.Open(strFileName) Set objImportSheet = objWorkBook.Sheets(1) 3、获取Excel有效区域的行和列数 intLastColNum = https://www.360docs.net/doc/d212875083.html,edRange.Columns.Count intLastRowNum = https://www.360docs.net/doc/d212875083.html,edRange.Rows.Count 4、逐行读取Excel中数据 由于前两行为Header部分,所以需要从第三行读取 如果第1到第10个单元格的值均为空或空格,则视为空行 For intCountI = 3 To intLastRowNum ''Check if Empty Data Row blnNullRow = True For intI = 1 To 10 If Trim$(objImportSheet.Cells(intCountI, intI).Value) <> "" Then blnNullRow = False End If Next intI 若不是空行,则进行读取动作,否则继续向后遍历Excel中的行 If blnNullRow = False Then 获取单元格中的数据,做有效性Check,并将合法数据创建为实体存入对象数组中objImportSheet.Cells(intCountI, 1).Value …… End If Next intCountI 5、退出Excel进程,并关闭Excel相关操作对象 objExcelFile.Quit Set objWorkBook = Nothing Set objImportSheet = Nothing Set objExcelFile = Nothing

VB读取excel表

我给你个简单的例子,假设有文件"c:\1.xls" '要在VB中操作Excel,需要引用Excel对象模型 '方法,在菜单里选择[工程] -- [引用],在窗口里勾选Microsoft Excel XX.X Object Library '其中,XX.X取决于你安装的Office的版本号 Private Sub Command6_Click() Dim excel_App As Excel.Application Dim excel_Book As Excel.Workbook Dim excel_sheet As Excel.Worksheet '启动Excel Set excel_App = CreateObject("Excel.Application") '引用程序对象实例 '设置Excel为不可见 excel_App.Visible = False '打开文件 Set excel_Book = excel_App.Workbooks.Open("C:\1.XLS") '工作簿实例Set excel_sheet = excel_Book.Worksheets("Sheet1") '数据表实例excel_sheet.Range("C1").Value = "你好!" '设置单元格C1的值为"你好!" excel_sheet.Range("A1").Value = 100 '设置单元格A1的值为100 excel_sheet.Range("A2").Value = 9 '设置单元格A2的值为9 excel_sheet.Range("A3").Value = excel_sheet.Range("A1").Value + excel_sheet.Range("A2").Value '计算 ''''''''''''''''''''''''''''''''''' '关闭Excel文件 Set excel_sheet = Nothing excel_App.ActiveWorkbook.Close savechanges:=True '保存对EXCELL进行更改。 Set excel_Book = Nothing excel_App.Quit Set excel_App = Nothing End Sub 追问 你好,高手! 我的想法是这样的,编一个软件,这个软件用excel表格当做它的数据库。这个软件只能对表格进行读写操作。比如: 当text1读入A行a内容时,text2自动读取A行b内容,代码里不要对表格进行赋值。 69978084

DataGrid导出EXCEL的几个方法(WebControl)

DataGirdμ?3?EXCELμ?????·?·¨£¨WebControl£? using System; using System.Data; using System.Text; using System.Web; using System.Web.UI; using System.Diagnostics; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.Collections; namespace bookstore { ///

/// myExcel μ??aòa?μ?÷?£ /// public class myExcel { public myExcel() { } /// /// ??DATAGRIDμ?3??aEXCEL???t·?·¨ò?, /// 2?êyê?:òaμ?3?μ?DATAGRIDμ?IDoíòa±£′???à′μ?EXCEL???t?? /// /// page /// datagrid /// filename private void OutExcel(Page myPage,DataGrid dg,string name) { HttpResponse Response; Response=myPage.Response; string name1="attachment;filename="+name+".xls"; dg.Visible=true;

VB中调用Excel生成图表(精品文档)

VB中调用Excel生成图表 添加时间:2004-9-3 查看:298次 编写数据库程序的最后步骤一般都是通过查询检索生成各种报表、图形等,在VB中通过调用Exc el的图表制作功能可以生成各种复杂的图表,使编程过程得以简化。举例如下:新建工程,在Form1窗口添加Command1按钮,编写程序在Excel中添加数据并生成饼图。 Private Sub Command1_Click() Dim x1 As Excel.Application '声明数据类型 Set x1 = CreateObject(""Excel.Application"") '创建实例 x1.Workbooks.Add '添加工作簿 x1.Visible = True x1.Range(""A1"").Value = 1 'A1格赋值 x1.Range(""B1"").Value = 2 'B1格赋值 x1.Range(""C1"").Value = 3 'C1格赋值 x1.Range(""D1"").Value = 4 'D1格赋值 x1.Range(""A1"", ""D1"").Borders.LineStyle = xlContinuous '单元格边框 x1.ActiveSheet.Rows.HorizontalAlignment = xlVAlignCenter x1.ActiveSheet.Rows.VerticalAlignment = xlVAlignCenter '上下、左右居中 Set ct = x1.Worksheets(""sheet1"").ChartObjects.Add(10, 40, 220, 120) '插入图形 ct.Chart.ChartType = xl3DPie '图形类型为饼图 ct.Chart.SetSourceData Source:=Sheets(""Sheet1"").Range(""A1:D1""), PlotBy:=xl Rows '图形数据来源 With ct.Chart

VB处理EXCEL数据方法

在VB中要想调用Excel,需要打开VB编程环境“工程”菜单中的“引用”项目,并选取项目中的“Microsoft Excel 11.0 object library”项。由于你的Excel 版本不同,所以这个选项的版本号也是不同的。 因为EXCEL是以层次结构组织对象的,其对象模型中含有许多不同的对象元素。 第一层:Application对象,即Excel本身; 第二层:workbooks对象集,指Excel的工作簿文件; 第三层:worksheets对象集,表示的是Excel的一个工作表; 第四层:Cells和Range对象,指向Excel工作表中的单元格。 新建立一个VB的工程,先放一个button,名称为Excel_Out。先定义好各层: Dim xlapp As Excel.Application 'Excel对象 Dim xlbook As Excel.Workbook '工作簿 Dim xlsheet As Excel.Worksheet '工作表 我们打算做的是:打开/新建一个excel,在其中对某工作表的一些单元格修改其值,然后另存为test.xls文件。 Private Sub Excel_Out_Click() Dim i, j As Integer Set xlapp = CreateObject("Excel.Application") '创建EXCEL对象 'Set xlbook = xlapp.Workbooks.Open(App.Path & "\test.xls") '打开已经存在的test.xls工件簿文件 Set xlbook = xlapp.Workbooks.Add '新建EXCEL工件簿文件 'xlbook.RunAutoMacros (xlAutoOpen) '运行EXCEL启动宏 'xlbook.RunAutoMacros (xlAutoClose) '运行EXCEL关闭宏 xlapp.Visible = True '设置EXCEL对象可见(或不可见) Set xlsheet = xlbook.Worksheets(1) '设置活动工作表'' ''~~~当前工作簿的第一页,这里也可以换成“表名” '下面就是简单的在一些单元格内写入数字 For i = 7 To 15 For j = 1 To 10 xlsheet.Cells(i, j) = j '当前工作簿第一页的第I行第J列 Next j Next i With xlsheet '设置边框为是实线 .Range(.Cells(7, 1), .Cells(28, 29)).Borders.LineStyle =

html导出excel的方法(简单)

html导出excel的方法(简单) 在html实现打印和导出excel的实现: 2006/11/05 01:54 P.M. 在所要打印和导如的EXCES的table 加个如 id = "PrintA" 在打印按纽上注册监听如:onclick="javascript:AllAreaWord(); 在加上如下内容: