作为闲鱼的卖家,对方一直不确认收闲鱼卖家不发货怎么办办

以下试题来自:
问答题设总体X的分布律为PX=k=(1-p)k-1(k=1,2,…),其中p是未知参数,X1,X2…,Xn为来自总体的简单随机样本,求参数p的矩估计量和极大似然估计量.
为您推荐的考试题库
你可能感兴趣的试题
1.问答题 2.问答题 3.填空题 4.填空题 f’2+zf’3+xf"12+xzf"13+xyf"22+2xyz2f"23+xyz2f"335.问答题 对任意的x∈[0,1],由泰勒公式得
热门相关试卷
最新相关试卷=OFFSET(Sheet1!$A$1,Sheet1!$E$1-1,0)是什么意思,求详细讲解_院校_考试与招生资讯网
=OFFSET(Sheet1!$A$1,Sheet1!$E$1-1,0)是什么意思,求详细讲解
发表于: 12:50:08& 整理: &来源:网络
  EXCEL 常用的宏代码大全&- []Tag:&&&本示例为设置密码窗口 (1)If Application.InputBox("请输入密码:") = 1234 Then[A1] = 1 '密码正确时执行Else: MsgBox "密码错误,即将退出!" '此行与第2行共同设置密码End If本示例为设置密码窗口 (1)X = MsgBox("是否真的要结帐?", vbYesNo)If X = vbYes ThenClose本示例为设置工作表密码ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码ActiveSheet.Unprotect Password:=641112 '撤消工作表保护并取消密码'本示例关闭除正在运行本示例的工作簿以外的其他所有工作簿,并保存其更改内容。For Each w In WorkbooksIf w.Name && ThisWorkbook.Name Thenw.Close SaveChanges:=TrueEnd IfNext w'每次打开工作簿时,本示例都最大化 Microsoft Excel 窗口。Application.WindowState = xlMaximized'本示例显示活动工作表的名称。MsgBox "The name of the active sheet is " & ActiveSheet.Name'本示例保存当前活动工作簿的副本。ActiveWorkbook.SaveCopyAs "C:\TEMP\XXXX.XLS"'下述过程激活工作簿中的第四张工作表。Sheets(4).Activate'下述过程激活工作簿中的第1张工作表。Worksheets(1).Activate'本示例通过将 Saved 属性设为 True 来关闭包含本段代码的工作簿,并放弃对该工作簿的任何更改。ThisWorkbook.Saved = TrueThisWorkbook.Close'本示例对自动重新计算功能进行设置,使 Microsoft Excel 不对第一张工作表自动进行重新计算。Worksheets(1).EnableCalculation = False'下述过程打开 C 盘上名为 MyFolder 的文件夹中的 MyBook.xls 工作簿。Workbooks.Open ("C:\MyFolder\MyBook.xls")'本示例显示活动工作簿中工作表 sheet1 上单元格 A1 中的值。MsgBox Worksheets("Sheet1").Range("A1").Value本示例显示活动工作簿中每个工作表的名称For Each ws In WorksheetsMsgBox ws.NameNext ws本示例向活动工作簿添加新工作表 , 并设置该工作表的名称?Set NewSheet = Worksheets.AddNewSheet.Name = "current Budget"本示例将新建的工作表移到工作簿的末尾'Private Sub Workbook_NewSheet(ByVal Sh As Object)Sh.Move After:=Sheets(Sheets.Count)End Sub本示例将新建工作表移到工作簿的末尾'Private Sub App_WorkbookNewSheet(ByVal Wb As Workbook, _ByVal Sh As Object)Sh.Move After:=Wb.Sheets(Wb.Sheets.Count)End Sub本示例新建一张工作表,然后在第一列中列出活动工作簿中的所有工作表的名称。Set NewSheet = Sheets.Add(Type:=xlWorksheet)For i = 1 To Sheets.CountNewSheet.Cells(i, 1).Value = Sheets(i).NameNext i本示例将第十行移到窗口的最上面?Worksheets("Sheet1").ActivateActiveWindow.ScrollRow = 10当计算工作簿中的任何工作表时,本示例对第一张工作表的 A1:A100 区域进行排序。'Private Sub Workbook_SheetCalculate(ByVal Sh As Object)With Worksheets(1).Range("a1:a100").Sort Key1:=.Range("a1")End WithEnd Sub本示例显示工作表 Sheet1 的打印预览。Worksheets("Sheet1").PrintPreview本示例保存当前活动工作簿?ActiveWorkbook.Save本示例保存所有打开的工作簿,然后关闭 Microsoft Excel。For Each w In Application.Workbooksw.SaveNext wApplication.Quit下例在活动工作簿的第一张工作表前面添加两张新的工作表?Worksheets.Add Count:=2, Before:=Sheets(1)本示例设置 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每当工作表重新计算时,本示例就调整 A 列到 F 列的宽度。'Private Sub Worksheet_Calculate()Columns("A:F").AutoFitEnd Sub本示例使活动工作簿中的计算仅使用显示的数字精度。ActiveWorkbook.PrecisionAsDisplayed = True本示例将工作表 Sheet1 上的 A1:G37 区域剪下,并放入剪贴板。Worksheets("Sheet1").Range("A1:G37").CutCalculate 方法计算所有打开的工作簿、工作簿中的一张特定的工作表或者工作表中指定区域的单元格,如下表所示:'要计算 '依照本示例所有打开的工作簿 ' Application.Calculate (或只是 Calculate)指定工作表 '计算指定工作表Sheet1 Worksheets("Sheet1").Calculate指定区域 'Worksheets(1).Rows(2).Calculate本示例对自动重新计算功能进行设置,使 Microsoft Excel 不对第一张工作表自动进行重新计算。Worksheets(1).EnableCalculation = False本示例计算 Sheet1 已用区域中 A 列、B 列和 C 列的公式。Worksheets("Sheet1").UsedRange.Columns("A:C").Calculate本示例更新当前活动工作簿中的所有链接?ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources本示例设置第一张工作表的滚动区域?Worksheets(1).ScrollArea = "a1:f10"本示例新建一个工作簿,提示用户输入文件名,然后保存该工作簿。Set NewBook = Workbooks.AddDofName = Application.GetSaveAsFilenameLoop Until fName && FalseNewBook.SaveAs Filename:=fName本示例打开 Analysis.xls 工作簿,然后运行 Auto_Open 宏。Workbooks.Open "ANALYSIS.XLS"ActiveWorkbook.RunAutoMacros xlAutoOpen本示例对活动工作簿运行 Auto_Close 宏,然后关闭该工作簿。With ActiveWorkbook.RunAutoMacros xlAutoClose.CloseEnd With在本示例中,Microsoft Excel 向用户显示活动工作簿的路径和文件名称。'Sub UseCanonical()Display the full path to user.MsgBox ActiveWorkbook.FullNameURLEncodedEnd Sub本示例显示当前工作簿的路径及文件名(假定尚未保存此工作簿)。MsgBox ActiveWorkbook.FullName本示例关闭 Book1.xls,并放弃所有对此工作簿的更改。Workbooks("BOOK1.XLS").Close SaveChanges:=False本示例关闭所有打开的工作簿。如果某个打开的工作簿有改变,Microsoft Excel 将显示询问是否保存更改的对话框和相应提示。Workbooks.Close本示例在打印之前对当前活动工作簿的所有工作表重新计算?'Private Sub Workbook_BeforePrint(Cancel As Boolean)For Each wk In Worksheetswk.CalculateNextEnd Sub本示例对查询表一中的第一列数据进行汇总,并在数据区域下方显示第一列数据的总和。Set c1 = Sheets("sheet1").QueryTables(1).ResultRange.Columns(1)c1.Name = "Column1"c1.End(xlDown).Offset(2, 0).Formula = "=sum(Column1)"本示例取消活动工作簿中的所有更改?ActiveWorkbook.RejectAllChanges本示例在商业问题中使用规划求解函数,以使总利润达到最大值。SolverSave 函数将当前问题保存到活动工作表上的某一区域。Worksheets("Sheet1").ActivateSolverResetSolverOptions Precision:=0.001SolverOK SetCell:=Range("TotalProfit"), _MaxMinVal:=1, _ByChange:=Range("C4:E6")SolverAdd CellRef:=Range("F4:F6"), _Relation:=1, _FormulaText:=100SolverAdd CellRef:=Range("C4:E6"), _Relation:=3, _FormulaText:=0SolverAdd CellRef:=Range("C4:E6"), _Relation:=4SolverSolve UserFinish:=FalseSolverSave SaveArea:=Range("A33")本示例隐藏 Chart1、Chart3 和 Chart5。Charts(Array("Chart1", "Chart3", "Chart5")).Visible = False当激活工作表时,本示例对 A1:A10 区域进行排序。'Private Sub Worksheet_Activate()Range("a1:a10").Sort Key1:=Range("a1"), Order:=xlAscendingEnd Sub本示例更改 Microsoft Excel 链接。ActiveWorkbook.ChangeLink "c:\excel\book1.xls", _"c:\excel\book2.xls", xlExcelLinks本示例启用受保护的工作表上的自动筛选箭头?ActiveSheet.EnableAutoFilter = TrueActiveSheet.Protect contents:=True, userInterfaceOnly:=True本示例将活动工作簿设为只读?ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly本示例使共享工作簿每三分钟自动更新一次?ActiveWorkbook.AutoUpdateFrequency = 3下述 Sub 过程清除活动工作簿中 Sheet1 上的所有单元格的内容。'Sub ClearSheet()Worksheets("Sheet1").Cells.ClearContentsEnd Sub本示例对所有工作簿都关闭滚动条?Application.DisplayScrollBars = False如果具有密码保护的工作簿的文件属性没有加密,则本示例设置指定工作簿的密码加密选项。'Sub SetPasswordOptions()With ActiveWorkbookIf .PasswordEncryptionProvider && "Microsoft RSA SChannel Cryptographic Provider" Then.SetPasswordEncryptionOptions _PasswordEncryptionProvider:="Microsoft RSA SChannel Cryptographic Provider", _PasswordEncryptionAlgorithm:="RC4", _PasswordEncryptionKeyLength:=56, _PasswordEncryptionFileProperties:=TrueEnd IfEnd WithEnd Sub在本示例中,如果活动工作簿不能进行写保护,那么 Microsoft Excel 设置字符串密码以作为活动工作簿的写密码。'Sub UseWritePassword()Dim strPassword As StringstrPassword = "secret"' Set password to a string if allowed.If ActiveWorkbook.WriteReserved = False ThenActiveWorkbook.WritePassword = strPasswordEnd IfEnd Sub在本示例中,Microsoft Excel 打开名为 Password.xls 的工作簿,设置它的密码,然后关闭该工作簿。本示例假定名为 Password.xls 的文件位于 C:\ 驱动器上。'Sub UsePassword()Dim wkbOne As WorkbookSet wkbOne = Application.Workbooks.Open("C:\Password.xls")wkbOne.Password = "secret"wkbOne.Close'注意 Password 属性可读并返回 “********”。End Sub本示例将 Book1.xls 的当前窗口更改为显示公式。Workbooks("BOOK1.XLS").Worksheets("Sheet1").ActivateActiveWindow.DisplayFormulas = True'本示例接受活动工作簿中的所有更改?ActiveWorkbook.AcceptAllChanges本示例显示活动工作簿的路径和名称Sub UseCanonical()MsgBox '消息框[b7] = ActiveWorkbook.FullName '当前工作簿[b8] = ActiveWorkbook.FullNameURLEncoded '活动工作簿End Sub本示例显示 Microsoft Excel 启动文件夹的完整路径。MsgBox Application.StartupPath本示例显示活动工作簿中每个工作表的名称。For Each ws In WorksheetsMsgBox ws.NameNext ws本示例关闭除正在运行本示例的工作簿以外的其他所有工作簿,并保存其更改内容。For Each w In WorkbooksIf w.Name && ThisWorkbook.Name Thenw.Close savechanges:=TrueEnd IfNext wActivate 事件激活一个工作簿、工作表、图表或嵌入图表时产生此事件。当激活工作表时,本示例对 A1:A10 区域进行排序。Private Sub Worksheet_Activate()Range("a1:a10").Sort Key1:=Range("a1"), Order:=xlAscendingEnd SubCalculate 事件对于 Worksheet 对象,在对工作表进行重新计算之后产生此事件每当工作表重新计算时,本示例就调整 A 列到 F 列的宽度。Private Sub Worksheet_Calculate()Columns("A:F").AutoFitEnd SubBeforeDoubleClick 事件应用于 Worksheet 对象的 Activate 方法。当双击某工作表时产生此事件,此事件先于默认的双击操作。Private Sub expression_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)expression 引用在类模块中带有事件声明的 Worksheet 类型对象的变量。Target 必需。双击发生时最靠近鼠标指针的单元格。Cancel 可选。当事件发生时为 False。如果事件过程将该参数设为 True,则该过程执行完之后将不进行默认的双击操作。BeforeRightClick 事件应用于 Worksheet 对象的 Activate 方法。当用鼠标右键单击某工作表时产生此事件,此事件先于默认的右键单击操作。Private Sub expression_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)expression 引用在类模块中带有事件声明的 Worksheet 类型对象的变量。Target 必需。右键单击发生时最靠近鼠标指针的单元格。Cancel 可选。当事件发生时为 False。如果该事件过程将本参数设为 True,则该过程执行结束之后不进行默认的右键单击操作。Change 事件当用户更改工作表中的单元格,或外部链接引起单元格的更改时产生此事件。Private Sub Worksheet_Change(ByVal Target As Range)Target 更改的区域。可以是多个单元格。说明重新计算引起的单元格更改不触发本事件。可使用 Calculate 事件俘获工作表重新计算操作。本示例将更改的单元格的颜色设为蓝色。Private Sub Worksheet_Change(ByVal Target as Range)Target.Font.ColorIndex = 5End SubDeactivate 事件图表、工作表或工作簿从活动状态转为非活动状态时产生此事件。Private Sub object_Deactivate()object Chart、Workbook 或者 Worksheet。有关对 Chart 对象使用事件的详细信息,请参阅 Chart 对象事件的用法。本示例当工作簿转为非活动状态时,对所有打开的窗口进行排列。Private Sub Workbook_Deactivate()Application.Windows.Arrange xlArrangeStyleTiledEnd SubFollowHyperlink 事件当单击工作表上的任意超链接时,发生此事件。对于应用程序级或工作簿级的事件,请参阅 SheetFollowHyperlink 事件。Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)Target Hyperlink 类型,必需。一个代表超链接目标位置的 Hyperlink 对象。本示例对在当前活动工作簿中访问过的所有链接保留一个列表或历史记录。Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)With UserForm1.ListBox1.AddItem Target.Address.ShowEnd WithEnd SubPivotTableUpdate 事件发生在工作簿中的数据透视表更新之后。Private Sub expression_PivotTableUpdate(ByVal Target As PivotTable)expression 引用在类模块中带有事件声明的 Worksheet 类型对象的变量。Target 必需。选定的数据透视表。本示例显示一则消息,说明数据透视表已经更新。本示例假定您已在类模块中声明了带有事件的 Worksheet 类型的对象。Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)MsgBox "The PivotTable connection has been updated."End SubSelectionChange 事件当工作表上的选定区域发生改变时,将产生本事件。Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)Target 新选定的区域。本示例滚动工作簿窗口,直至选定区域位于窗口的左上角。Private Sub Worksheet_SelectionChange(ByVal Target As Range)With ActiveWindow.ScrollRow = Target.Row.ScrollColumn = Target.ColumnEnd WithEnd Sub本示例显示活动工作簿中工作表 sheet1 上单元格 A1 中的值。MsgBox Worksheets("Sheet1").Range("A1").Value本示例显示活动工作簿中每个工作表的名称。For Each ws In WorksheetsMsgBox ws.NameNext ws本示例向活动工作簿添加新工作表,并设置该工作表的名称。Set newSheet = Worksheets.AddnewSheet.Name = "current Budget"本示例关闭工作簿 Book1.xls,但不提示用户保存所作更改。Book1.xls 中的所有更改都不会保存。Application.DisplayAlerts = FalseWorkbooks("BOOK1.XLS").CloseApplication.DisplayAlerts = True本示例设置保存文件时显示提示,要求用户输入汇总信息。Application.PromptForSummaryInfo = True本示例显示 Microsoft Excel 的完整路径。Private Sub aa()MsgBox "The path is " & Application.PathEnd Sub示例显示每一个可用加载宏的路径及文件名。For Each a In AddInsMsgBox a.FullNameNext aChDir 语句改变当前的目录或文件夹。ChDir path在 Power Macintosh 中,默认驱动器总是改为在 path 语句中指定的驱动器。完整路径指定由卷标名开始,相对路径由冒号 (:) 开始. ChDir 可以辨认路径中指定的别名:ChDir "MacDrive:Tmp" ' 在 Macintosh 中本示例显示当前路径分隔符。MsgBox "The path separator character is " & _Application.PathSeparatorMove 方法将一个指定的文件或文件夹从一个地方移动到另一个地方。语法object.Move destinationMove 方法语法有如下几部分:部分 描述object 必需的。始终是一个 File 或 Folder 对象的名字。destination 必需的。文件或文件夹要移动到的目标。不允许有通配符。CreateFolder 方法创建一个文件夹。语法object.CreateFolder(foldername)reateFolder 方法有如下几部分:部分 描述object 必需的。始终是一个 FileSystemObject 的名字。foldername 必需的。字符串表达式,它标识创建的文件夹。本示例使用 MkDir 语句来创建目录或文件夹。如果没有指定驱动器,新目录或文件夹将会建在当前驱动器中。MkDir "MYDIR" ' 建立新的目录或文件夹。Name 语句示例本示例使用 Name 语句来更改文件的名称。示例中假设所有使用到的目录或文件夹都已存在。 在 Macintosh 中,默认驱动器名称是 “HD” 并且路径部分由冒号取代反斜线隔开。Dim OldName, NewNameOldName = "OLDFILE": NewName = "NEWFILE" ' 定义文件名。Name OldName As NewName ' 更改文件名。OldName = "C:\MYDIR\OLDFILE": NewName = "C:\YOURDIR\NEWFILE"Name OldName As NewName ' 更改文件名,并移动文件。本示例显示当前默认文件路径。MsgBox "The current default file path is " & _Application.DefaultFilePath本示例设置替换启动文件夹。Application.AltStartupPath = "C:\EXCEL\MACROS"FolderExists 方法如果指定的文件夹存在返回 True,不存在返回 False。语法object.FolderExists(folderspec)本示例在单元格中启用编辑。Application.EditDirectlyInCell = TrueVBA 入门课程&Advanced Office 2000 Password Recovery 破解VBA的程序我学VBA时的两本书!《excle2000vba开发实例指南》晶辰工作室《excle2002函数应用秘笈》中国铁路出版社程序说明:几种用VBA在单元格输入数据的方法:Public Sub Writes()1-- 2 方法,最简单在 "[ ]" 中输入单元格名称。1 [A1] = 100 '在 A1 单元格输入100。2 [A2:A4] = 10 '在 A2:A4 单元格输入10。3-- 4 方法,采用 Range(" "), " " 中输入单元格名称。3 Range("B1") = 200 '在 B1 单元格输入200。4 Range("C1:C3") = 300 '在 C1:C3 单元格输入300。5-- 6 方法,采用 Cells(Row,Column),Row是单元格行数,Column是单元格栏数。5 Cells(1, 4) = 400 '在 D1 单元格输入400。6 Range(Cells(1, 5), Cells(5, 5)) = 50 '在 E1:E 5单元格输入50。End Sub你点选任何单元格,按 Selection 按钮,則则所点选的单元格均会被输入文字 "Test"。Public Sub Selection1()Selection.Value = "Test" '在任何你点选的单元格输入文字 "Test"。End SubVBALesson2 程序说明:几种如何把别的工作表 Sheet4 数据,读到这个工作表的方法:在被读取的单元格前加上工作表名称 Sheet4。Public Sub Writes()1-- 2 方法,最简单在被读取的 "[ ]" 前加上被读取的工作表名称 Sheet4。1 [A1] = Sheet4.[A1] '把Sheet4 A1 单元格的数据,读到 A1单元格。2 [A2:A4] = Sheet4.[B1] ''把 Shee4 工作表单元格 B1 数据,读到 A2:A4 单元格。3-- 4 方法,在被读取的工作表 Range(" ")的 Range 前加上被读取的工作表名称Sheet4。3 Range("B1") = Sheet4.Range("B1") ''把 Shee4工作表单元格 B1 数据,读到 B1 单元格。4 Range("C1:C3") = Sheet4.Range("C1") '把 Shee4 工作表单元格 C1 数据,读到 C1:C3 单元格。5-- 6 方法,在被读取的工作表 Cells(Row,Column),Cells 前加上被读取工作表名称 Sheet4。5 Cells(1, 4) = Sheet4.Cells(1, 4) '把 Shee4 工作表单元格 D1 数据,读到 D1 单元格。6 Range(Cells(1, 5), Cells(5, 5)) = Sheet4.Cells(1, 5) '把 Shee4 工作表单元格 E1 数据,读到 E1:E 5单元格。End Sub你点选任何单元格,按 Selection 按钮,则所点选的单元格均会被输入 Shee4 工作表单元格 F1 数据。Public Sub Selection1()Selection.Value = Sheet4.[F1] '把 Shee4 工作表单元格 F1 数据,读到任何你点选的单元格。End SubVBALesson3 程序说明:如何利用 Worksheet_SelectionChange 输入数据的方法。Private Sub Worksheet_SelectionChange(ByVal Target As Range)Target = 100End SubTarget 指的是你鼠标所选的单元格,Worksheet_SelectionChange() 事件的参数。可以是一个也可以是好几个单元格。Range 是 Excel 特有的变量形态,叫范围。Target As Rang 是把 Target 这个参数设定为 Range 变量形态。Target = 100 是把你点选的单元格输入数字100。VBALesson4 程序说明:如何利用 Worksheet_SelectionChange 在限定的单元格输入数据的方法。Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Row &= 2 And Target.Column = 2 ThenTarget = 100End IfEnd SubIf ... Then ... End If 这是我们学的这一个逻辑判断语句。Target.Row &= 2,指的是鼠标选定的单元格的行大于或等于 2。Target.Column = 2 ,指的是鼠标选定的单元格的栏等于 2。If Target.Row &= 2 And Target.Column = 2 Then 指的是只有在Target.Row &= 2及Target.Column = 2二个条件成立时。就是 (Target.Row &= 2) 为True及(Target.Column = 2)为True时,才执行下面的程序 Target=100,也就是 B 栏第二行及以下行用鼠标被点选时,才会被输入100,其它单元格则不被输入数据。VBALesson5 程序说明:比较 Worksheet_SelectionChange() 与用按钮 CommandButton1_Click() 来执行程序二者的方法与写法有何不同。Worksheet_SelectionChange()事件Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Row &= 2 And Target.Column = 2 ThenTarget = 100End IfEnd Sub按鈕 CommandButton1_Click()Private Sub CommandButton1_Click()If ActiveCell.Row &= 2 And ActiveCell.Column &= 3 ThenActiveCell = 100End IfEnd Sub二者执行方法最大的地方,在于 Worksheet_SelectionChange() 是自动的,你不用了解他是怎么完成工作的。按钮 CommandButton1_Click() 是人工的,比 SelectionChange()多一道手续,就是要去按那接钮,程序才会执行。SelectionChange() 有一个参数 Target 可用;CommandButton1_Click ()没有。所以我们要用 ActiveCell 内定函数来取代Target,ActiveCell 与 Target最大的不同点他只能指定一个单元格。就是你选取多个单元格也只有最上面的单元格会加上数据;用 Selection 取代 ActiveCell, 用法就跟 Target 一样了。VBALesson 6 程序说明:完整的 If...Then ┅ End 逻辑判断式。Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Row &= 2 And Target.Column = 2 ThenTarget = 200ElseIf Target.Row &= 2 And Target.Column = 3 ThenTarget = 300ElseIf Target.Row &= 2 And Target.Column = 2 ThenTarget = 400ElseTarget = 500End IfEnd Sub这是个完整的 If 逻辑判断式,意思是说,假如 If 後的判断式条件成立的话,就执行第二条程序,否则假如 ElseIf 後的判断式条件成立的话,就执行第四条程序,否则假如另一个 ElseIf 後的判断式条件成立的话,就执行第六条程序。Else 的意思是说,假如以上条件都不成立的话,就执行第八条程序。他的执行方式是假如 IF 的条件成立的话,就不执行其它ElseIf 及Else 的逻辑判断式,假如 If 後的条件不成立的话才会执行 ElseIf 或 Else 逻辑判断式。第二个 ElseIf後的条件因为与 IF 後的条件一样,所以这个判断式後面的 Target=400 将是永远无法执行到的程序。VBALesson 7 程序说明∶我们为什麽要用变数。Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim i , j As IntegerDim k As Rangei = Target.Rowj = Target.ColumnSet k = TargetIf i &= 2 And j = 2 Thenk = 200ElseIf i &= 2 And j = 3 Thenk = 300ElseIf i &= 2 And j = 4 Thenk = 400Elsek = 500End IfEnd Sub跟VBALesson 6比较,程序是不是明朗多了,在前课重复的用 Target.Row,Target.Column及Target来写程序是不是有一点烦。用变量的第一个好处大家马上感觉得出来,就是可以简化程序。使用变量前,你得先宣告变量。宣告变量的方法是在 "Dim " 后面写上变量 " i " As 后面接上变量的形态 "Integer"。Dim i , j As Integer 就是宣告 i 与 j 为整数变量,这是同时宣告二个变量 i 与 j 所以要在二个变量间加个 " , "号。Dim k As Range 是宣告 k 为范围资料形态,Range这是 Excel 特有的资料形态。i = Target.Row是把当前单元格的行数,指定给变量 i。j = Target.Column 是把当前单元格的栏数,指定给变量 j。Set k = Target 是把当前的单元格,指定给变量 k。用像 i 与 j 这样简单的变量,在程序的前面你可能还记得 i 或 j 代表着什厶。程序写长了,你可能忘记 i 或 j 代表着什厶。所以最好的方法是用比较有意义的代号,来为变量命名如 iRow 或 iCol 来取代 i 及 j 。VBALesson 8 程序说明∶体会一下Worksheet_Change()事件。Private Sub Worksheet_Change(ByVal Target As Range)Dim iRow, iCol As IntegeriRow = Target.RowiCol = Target.ColumnIf iRow &= 2 And iCol = 2 And Target && "" ThenApplication.EnableEvents = FalseCells(iRow, iCol + 1) = Cells(iRow, iCol) * 2Application.EnableEvents = TrueElseIf iRow &= 2 And iCol = 2 And Target = "" ThenCells(iRow, iCol + 1) = ""ElseCells(iRow, iCol + 1) = ""End IfEnd Sub前几个教程都是用Worksheet_SelectionChange 事件来举例子,大家应该能体会他是怎厶一回事了吧。这个教程就是要让你来体会什厶是Worksheet_Chang()事件。因为这二个事件在VBA都是非常有用的,所以一定要了解。简单的说,前者是你鼠标移动到那个单元格,就触发那个事件的执行。後者是要等到你点选的单元格,数?有了改变才会触发事件的执行。二者执行的时机一前一後。Target && "" 是代表限定当前的单元格要是有数?的,才会执行以下三行的程序。Cells(iRow, iCol + 1) = Cells(iRow, iCol) * 2,是你在 B 栏输入数?时,C 栏将可得到 B 栏二倍的数?。Target = "" 是限定当前的单元格要是没有数?的,才会执行以下一行的程序。Cells(iRow, iCol + 1) = "",是把 C 栏的数?清成空格。Application.EnableEvents = False与Application.EnableEvents = True,这是个成双的程序,当你用了前者记得在执行其他程序後要写上後面的程序。它的目的在抑制事件连锁执行。简单的说就是,在 B 字段所触发的事件,不愿在其它单元格再触发另一个Worksheet_Change()事件。VBALesson 9 程序说明∶体会一下Worksheet_Change()事件连锁反应。Private Sub Worksheet_Change(ByVal Target As Range)Dim iRow As IntegeriRow = Target.RowApplication.EnableEvents = FalseCells(iRow, 3) = Cells(iRow, 3) + Cells(iRow, 2)Application.EnableEvents = TrueEnd SubPrivate Sub Worksheet_Change(ByVal Target As Range)Dim iRow As IntegeriRow = Target.Row'Application.EnableEvents = FalseCells(iRow, 3) = Cells(iRow, 3) + Cells(iRow, 2)'Application.EnableEvents = TrueEnd Sub这个程序的目的是要在 B2 输入新的数?时,C2 会将 B2 输入的新数?加上 C2 原有的数?呈现在 C2 上。照上面有加上 Application.EnableEvents = False 程序执行当然没问题。现在你在 Application.EnableEvents = False 与 Application.EnableEvents = True 前加上「 '」看看。程序前加上「 '」的目的是要使「 '」之后的文字变成说明文字,程序执行时是会跳过说明文字,不执行说明文字的内容。程序前加上「 '」符号后,文字会变成绿色。执行第二个程序时,你将发现 C2 不会按你所要求的,呈现结果。这就是所谓的事件连锁反应。请问这个宏该如何写!我想运行一个宏,就能在当前工作表B3上填上一条公式;这条公式的结果是所有工作表上的B4单元格的和.请问这个宏该如何写.谢谢!Sub gg()Dim sh As Worksheet, shname$For Each sh In Worksheetsshname = sh.NameActiveSheet.Range("b3").value = ActiveSheet.Range("b3").value + Worksheets(shname).Range("b4")NextEnd SubVBA中怎样创建一个名为“table”的新工作表通过VBA编程,很容易添加新的工作表,但是新表的名字不知怎样控制,对于新创建的工作表,由于其名字并非特定,所以就不好使用所创建的新表了。不知各位有何高见。。。。Sheets.AddActiveSheet.Name = "table"请教:如何用VBA检索表1中A列与表2,3,4,5.....中A列相同的行并把后者整行拷贝到表1检索到的行中,谢谢!!!!To yxptwq∶用这程序试看看。Sub Copy1()Dim Row_dn1, Row_dnN, i, j, n As IntegerRow_dn1 = Sheet1.Range("A65536").End(xlUp).Rowk = 1: n = 1For Each wSheet In ActiveWorkbook.WorksheetsWith wSheetIf .Name && "Sheet1" ThenRow_dnN = .Range("A65536").End(xlUp).RowFor i = 2 To Row_dn1For j = 2 To Row_dnNIf .Cells(j, 1) = Sheet1.Cells(i, 1) Then.Rows(j & ":" & j).Copy Destination:=Sheet1.Rows(Row_dn1 + n & ":" & Row_dn1 + n)n = n + 1End IfNext jNext iEnd IfEnd WithNext wSheetEnd Sub如果要用VBA程式输入密码使用下列程式码Sub EnterNewPW()'程式说明:利用SendKey输入VBAProject密码'注意事项:执行本程式需要在Excel视窗,不能在VBE视窗Application.SendKeys "%{F11}", True 'Alt + F11 切换到VBA视窗Application.SendKeys "%T", True 'ALT + T 工具(繁体中文是(T))Application.SendKeys "e", True '工具(T)-VBproject属性(E)Application.SendKeys "^{TAB}", True 'TAB 键(切换到PAge2 保护页面)Application.SendKeys "{+}", True '选取Checkbox方块(锁定专案以供检视)'({+} 选取, {-} 取消选取)Application.SendKeys "{TAB}", True 'TAB 键(跳到第一次输入密码 TextboxmyPW = "chijanzen" '假设密码 chijanzenApplication.SendKeys myPW, True '输入密码Application.SendKeys "{TAB}", True 'TAB 键(跳到第二次输入密码 TextboxApplication.SendKeys myPW, True '输入密码Application.SendKeys "{ENTER}", True '按确定钮(预设值)Application.SendKeys "%{F11}", True '返回Excel视窗End Sub冒泡排序法:冒泡排序法之所以成为“冒泡排序”是因为值较小的或是较轻的元素浮到作为继续排序的一组数的顶部。Sub Macro1()Dim i As IntegerDim j As IntegerDim t as integerStatic number(1 To 10) As IntegerFor i = 1 To 10number(i) = inputbox“输入要排序的数:”Next iFor i = 10To 2 Step -1For j = 1 To i – 1‘下面进行位置交换If number(j) & number(j + 1) Thent = number(j + 1)number(j + 1) = number(j)number(j) = tEnd IfNext jNext iFor i = 1 To 20Print number(i)Next iEnd sub首先定义一个数组:通过循环录入10个整数,然后用一个二重循环测试前一个数是否大于后一个数。如果大于则交换两个数的下标,即交换两个数在数组中的位置,交换通过一个变量来进行。我先用传统的方法解决这个问题,经过比较,选用了较为简单的和高效的排序方法——“快速排序”,具体算法可参考数据结构等有关书籍。对所有数据排序后再合并相同数据,合并程序较为简便,我开始时采用了这种方法,但后来发现对于这些的数据,先合并后排序速度更快,因为有大量相同的数据。合并是采用“标记”算法,具体如下:(设数据已存放在sData()数组中 ,结果存到Queryp()数组,Amount是数据个数)'把相同元素置 0For i = 1 To AmountIf sData(i) && 0 ThenFor j = i + 1 To AmountIf sData(i) = sData(j) Then sData(j) = 0Next jEnd IfNext i'删除相同元素Queryp(1) = sData(1)k = 1For i = 2 To AmountIf Not (sData(i) = 0) Thenk = k + 1Queryp(k) = sData(i)End IfNext ikMax = kReDim Preserve Queryp(kMax)虽然这样使得运算速度有所高,但是仍然要进行大量的循环运算,占据了程序大部分的运算时间。于是我一直在寻觅一种更为高效的算法。功夫不负有心人,在仔细分析数据的特征,比较了多种方案之后,我终于找到了一种相当成功的算法,原来要3到4秒的运算缩短到仅需0.1到0.2秒。我遇到的数据具有以下特征:①相同数据很多,②最大、最小数之间相差不到3,③都是带两位小数的正数。针对数据的特征,我采用了以下算法:针对数据的特征,我采用了以下算法:步骤:1. 用一个循环找出整数和小数部分的最大、最小值。小数部分的最大、最小值乘以100转为整数。2. 定义一个二维数组,下标范围分别是整数和小数部分的最小值到最大值。3. 再用一个循环把所有源数据填入刚才定义的二维数组,填写规则是,源数据的整数和小数部分分别对应二维数组的两个下标。例如,&#"填到“A(13,51)"中。4. 最后顺向或逆向读取二维数组中的非零数据即可得到从小到大或从大到小排列的数据,而且不会含有重复数据。用VB 编写的程序如下:'****密集型数据处理****Dim i As Long, j As Long, k As Long, kMax As LongDim Queryp() As SingleReDim Queryp(Amount)Dim IntegerPart As Integer, DecimalPart As IntegerDim IPmax As Integer, IPmin As IntegerDim DPmax As Integer, DPmin As IntegerDim DiffDataArray()'读取数据ReadDataIPmax = 0: IPmin = 1000DPmax = 0: DPmin = 99For i = 1 To Amount' 找整数和小数部分的最大、最小值IntegerPart = Int(sData(i))DecimalPart = (sData(i) - IntegerPart) * 100If IntegerPart & IPmax ThenIPmax = IntegerPartElseIf IntegerPart & IPmin ThenIPmin = IntegerPartEnd IfIf DecimalPart & DPmax ThenDPmax = DecimalPartElseIf DecimalPart & DPmin ThenDPmin = DecimalPartEnd IfNext iReDim DiffDataArray(IPmin To IPmax, DPmin To DPmax)'填入数据For i = 1 To AmountIntegerPart = Int(sData(i))DecimalPart = (sData(i) - IntegerPart) * 100DiffDataArray(IntegerPart, DecimalPart) = sData(i)Next iNext i'提取数据k = 0For i = IPmax To IPmin Step -1For j = DPmax To DPmin Step -1If DiffDataArray(i, j) && 0 Thenk = k + 1Queryp(k) = DiffDataArray(i, j)End IfNext jNext ikMax = kReDim Preserve Queryp(kMax)该方法对于本人遇到的这种“密集型”数据最为有效,但是如果遇上“稀疏型”数据,例如最大、最小值相差几千,甚至上万的数据,就没什么优势了,而且会占用较大的内存。经过改进,我得到了处理稀疏型数据的高效算法。高效的前提条件同样是源数据具有大量相同数据。思路是在前一种方法的基础上增加一个单维数组,用来保存整数部分数据,保存过程中用插入法对其进行排序。因为有大量重复数据,要排序的数据量相对较少。当从二维数组中读取数据时,用单维数组代入二维数组的第一个下标,具体代码下:'****稀疏型数据处理****Dim i As Long, j As Long, k As Long, kMax As LongDim Queryp() As SingleReDim Queryp(Amount)Dim IntegerPart As Integer, DecimalPart As IntegerDim IPmax As Integer, IPmin As IntegerDim DPmax As Integer, DPmin As IntegerDim IPArray() As Integer, IPAamount As IntegerReDim IPArray(Amount)Dim DiffDataArray()'读取数据ReadDataIPmax = 0: IPmin = 1000DPmax = 0: DPmin = 99IPAamount = 0For i = 1 To Amount'获取整数和小数部分的最大最小值IntegerPart = Int(sData(i))DecimalPart = (sData(i) - IntegerPart) * 100If IntegerPart & IPmax ThenIPmax = IntegerPartElseIf IntegerPart & IPmin ThenIPmin = IntegerPartIPmin = IntegerPartEnd IfIf DecimalPart & DPmax ThenDPmax = DecimalPartElseIf DecimalPart & DPmin ThenDPmin = DecimalPartEnd If'对整数部分"IPArray()"进行插入法排序 (从大到小)For j = 1 To IPAamountIf IntegerPart & IPArray(j) ThenIPAamount = IPAamount + 1For k = IPAamount To j + 1 Step -1IPArray(k) = IPArray(k - 1)Next kIPArray(j) = IntegerPartExit ForElseIf IntegerPart = IPArray(j) ThenExit ForEnd IfNext jIf j & IPAamount ThenIPAamount = IPAamount + 1IPArray(IPAamount) = IntegerPartEnd IfNext iReDim DiffDataArray(IPmin To IPmax, DPmin To DPmax)'填入数据For i = 1 To AmountIntegerPart = Int(sData(i))DecimalPart = (sData(i) - IntegerPart) * 100DiffDataArray(IntegerPart, DecimalPart) = sData(i)Next i'提取数据k = 0For i = 1 To IPAamountFor j = DPmax To DPmin Step -1If DiffDataArray(IPArray(i), j) && 0 Thenk = k + 1Queryp(k) = DiffDataArray(IPArray(i), j)End IfNext jNext ikMax = kReDim Preserve Queryp(kMax)kReDim Preserve Queryp(kMax)具体采用哪种算法,要看数据的性质而定,以下是本人的一些实测数据,仅供参考。如果你有更好的方法,可不要忘记和朋友们分享哦。自动隐藏表格中无数据的行表1 是数据源,经常改变;表2 引用表1 中某列有数据的单元格(利用动态位址已实现。)由于表1 的改变,表2 的大小随之而变。问题:如何实现表2 中没有数据的行(有公式)自动隐藏?谢谢赐教!Sub abc()For i = 1 To 300If Cells(i, 1).value = "" Then Rows(i).Hidden = TrueNext iEnd Sub你写的语句可以解决隐藏的问题,可是如果我执行了它之后,再在表1中增加数据,表2不会自动显示有了数据的行。如何修改?将此宏设为自动运行(打开文件时)Sub abc()For i = 1 To 300If Cells(i, 1).value &&"" Then Rows(i).Hidden = falseNext iEnd Sub用VBA如何自动合并列的内容?用VBA如何自动合并列的内容?To hongjian :Sub MergeTest()For i = 3 To 30Cells(i, 3) = Cells(i, 1) & Chr(10) & Cells(i, 2)NextEnd Sub基于VB和EXCEL的报表设计及打印在现代管理信息系统的开发中,经常涉及到数据信息的分析、加工,最终还需把统计结果形成各种形式的报表提供给领导决策参考,或进行外部交流。在Visual Basic中制作报表,通常是用数据环境设计器(DataEnvironment Designer)与数据报表设计器(Data Report Designer),或者使用第三方产品来完成。但对于大多数习惯于Excel报表的用户而言,用以上方法生成的报表在格式和功能等方面往往不能满足他们的要求。由于Excel具有自己的对象库,在Visual Basic工程中可以加以引用,通过对Excel使用OLE自动化,可以创建一些外观整洁的报表,然后打印输出。这样实现了Visual Basi应用程序对Excel的控制。本文将针对一个具体实例,阐述基于VB和EXCEL的报表设计及打印过程。1)创建Excel对象Excel对象模型包括了128个不同的对象,从矩形、文本框等简单的对象到透视表,图表等复杂的对象。下面简单介绍一下其中最重要,也是用得最多的五个对象。(1)Application对象Application对象处于Excel对象层次结构的顶层,表示 Excel自身的运行环境。(2)Workbook对象Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。(3)Worksheet对象Worksheet对象包含于Workbook对象,表示一个Excel工作表。(4)Range对象Range对象包含于Worksheet对象,表示 Excel工作表中的一个或多个单元格。(5)Cells对象Cells对象包含于Worksheet对象,表示Excel工作表中的一个单元格。如果要启动一个Excel,使用Workbook和Worksheet对象,下面的代码启动了Excel并创建了一个新的包含一个工作表的工作薄:Dim zsbexcel As Excel.ApplicationSet zsbexcel = New Excel.Applicationzsbexcel.Visible = True如要Excel不可见,可使zsbexcel.Visible = Falsezsbexcel.SheetsInNewWorkbook = 1Set zsbworkbook = zsbexcel.Workbooks.Add2)设置单元格和区域值要设置一张工作表中每个单元格的值,可以使用Worksheet对象的Range属性或Cells属性。With zsbexcel.ActiveSheet.Cells(1, 2).value = "100".Cells(2, 2).value = "200".Cells(3, 2).value = "=SUM(B1:B2)".Range("A3:A9") = "中国人民解放军"End With要设置单元格或区域的字体、边框,可以利用Range对象或Cells对象的Borders属性和Font属性:With objexcel.ActiveSheet.Range("A2:K9").Borders  '边框设置.LineStyle = xlBorderLineStyleContinuous.Weight = xlThin.ColorIndex = 1End WithWith objexcel.ActiveSheet.Range("A3:K9").Font  '字体设置.Size = 14.Bold = True.Italic = True.ColorIndex = 3End With通过对Excel单元格和区域值的各种设置的深入了解,可以创建各种复杂、美观、满足需要的、具有自己特点的报表。3)预览及打印生成所需要的工作表后,就可以对EXCEL发出预览、打印指令了。zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait   '设置打印方向zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4   '设置打印纸的打下zsbexcel.Caption = "打印预览"        '设置预览窗口的标题zsbexcel.ActiveSheet.PrintPreview      '打印预览zsbexcel.ActiveSheet.PrintOut        '打印输出通过打印方向、打印纸张大小的设置,不断进行预览,直到满意为止,最终进行打印输出。为了在退出应用程序后EXCEL不提示用户是否保存已修改的文件,需使用如下语句:zsbexcel.DisplayAlerts = Falsezsbexcel.Quit    '退出EXCELzsbexcel.DisplayAlerts = True如此设计的报表打印是通过 EXCEL程序来后台实现的。对于使用者来说,根本看不到具体过程,只看到一张张漂亮的报表轻易地被打印出来了。4)具体实例下面给出一个具体实例,它在window98、Visual Basic 6.0、Microsoft Office97的环境下调试通过。在VB中启动一个新的Standard EXE工程,在“工程”菜单的“引用”选项下引用Excel Object Library;然后在Form中添加一个命令按钮cmdExcel;最后在窗体中输入如下代码:Dim zsbexcel As Excel.ApplicationPrivate Sub cmdExcel_Click()Set zsbexcel = New Excel.Applicationzsbexcel.Visible = Truezsbexcel.SheetsInNewWorkbook = 1Set zsbworkbook = zsbexcel.Workbooks.AddWith zsbexcel.ActiveSheet.Range("A2:C9").Borders   '边框设置.LineStyle = xlBorderLineStyleContinuous.Weight = xlThin.ColorIndex = 1End WithWith zsbexcel.ActiveSheet.Range("A3:C9").Font  '字体设置.Size = 14.Bold = True.Italic = True.ColorIndex = 3End Withzsbexcel.ActiveSheet.Rows.HorizontalAlignment =xlVAlignCenter   '水平居中zsbexcel.ActiveSheet.Rows.VerticalAlignment =xlVAlignCenter    '垂直居中With zsbexcel.ActiveSheet.Cells(1, 2).value = "100".Cells(2, 2).value = "200".Cells(3, 2).value = "=SUM(B1:B2)".Cells(1, 3).value = "中国人民解放军".Range("A3:A9") = "50"End Withzsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait    'xlLandscapezsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4zsbexcel.ActiveSheet.PrintOutzsbexcel.DisplayAlerts = Falsezsbexcel.Quitzsbexcel.DisplayAlerts = TrueSet zsbexcel = Nothing提高EXCEL中VBA的效率方法1:尽量使用VBA原有的属性、方法和Worksheet函数由于Excel对象多达百多个,对象的属性、方法、事件多不胜数,对于初学者来说可能对它们不全部了解,这就产生了编程者经常编写与Excel对象的属性、方法相同功能的VBA代码段,而这些代码段的运行效率显然与Excel对象的属性、方法完成任务的速度相差甚大。例如用Range的属性CurrentRegion来返回 Range 对象,该对象代表当前区。(当前区指以任意空白行及空白列的组合为边界的区域)。同样功能的VBA代码需数十行。因此编程前应尽可能多地了解Excel对象的属性、方法。充分利用Worksheet函数是提高程序运行速度的极度有效的方法。如求平均工资的例子:For Each c In Worksheet(1).Range(&#00″)Totalvalue = Totalvalue + c.valueNextAveragevalue = Totalvalue / Worksheet(1).Range(&#00″).Rows.Count而下面代码程序比上面例子快得多:Averagevalue=Application.WorksheetFunction.Average(Worksheets(1).Range(&#00″))其它函数如Count,Counta,Countif,Match,Lookup等等,都能代替相同功能的VBA程序代码,提高程序的运行速度。方法2:尽量减少使用对象引用,尤其在循环中每一个Excel对象的属性、方法的调用都需要通过OLE接口的一个或多个调用,这些OLE调用都是需要时间的,减少使用对象引用能加快VBA代码的运行。例如1.使用With语句。Workbooks(1).Sheets(1).Range(&#00″).Font.Name=″Pay″Workbooks(1).Sheets(1).Range(&#00″).Font.FontStyle=″Bold″ ...则以下语句比上面的快With Workbooks(1).Sheets(1).Range(&#00″).Font.Name = ″Pay″.FontStyle = ″Bold″...End With2.使用对象变量。如果你发现一个对象引用被多次使用,则你可以将此对象用Set 设置为对象变量,以减少对对象的访问。如:Workbooks(1).Sheets(1).Range(+).value = 100Workbooks(1).Sheets(1).Range(+).value = 200则以下代码比上面的要快:Set MySheet = Workbooks(1).Sheets(1)MySheet.Range(+).value = 100MySheet.Range(+).value = 2003.在循环中要尽量减少对象的访问。For k = 1 To 1000Sheets(″Sheet1″).SelectCells(k,1).value = Cells(1,1).valueNext k则以下代码比上面的要快:Set Thevalue = Cells(1,1).valueSheets(″Sheet1″).SelectFor k = 1 To 1000Cells(k,1).value = ThevalueNext k方法3:减少对象的激活和选择如果你的通过录制宏来学习VBA的,则你的VBA程序里一定充满了对象的激活和选择,例如Workbooks(XXX).Activate、Sheets(XXX).Select、Range(XXX).Select等,但事实上大多数情况下这些操作不是必需的。例如Sheets(″Sheet3″).SelectRange(+).value = 100Range(+).value = 200可改为:With Sheets(″Sheet3″).Range(+).value = 100.Range(+).value = 200End With方法4:关闭屏幕更新如果你的VBA程序前面三条做得比较差,则关闭屏幕更新是提高VBA程序运行速度的最有效的方法,缩短运行时间2/3左右。关闭屏幕更新的方法:Application.ScreenUpdate = False请不要忘记VBA程序运行结束时再将该值设回来:Application.ScreenUpdate = True以上是提高VBA运行效率的比较有效的几种方法本示例重复最近用户界面命令。本示例必须放在宏的第一行。Application.Repeat下例中,变量 counter 代替了行号。此过程将在单元格区域 C1:C20 中循环,将所有绝对值小于 0.01 的数字都设置为 0(零)。Sub RoundToZero1()For Counter = 1 To 20Set curCell = Worksheets("Sheet1").Cells(Counter, 3)If Abs(curCell.Value) & 0.01 Then curCell.Value = 0Next CounterEnd Sub述过程在单元格区域 A1:D10 中循环,将所有绝对值小于 0.01 的数字都设置为 0(零)。Sub RoundToZero2()For Each c In Worksheets("Sheet1").Range("A1:D10").CellsIf Abs(c.Value) & 0.01 Then c.Value = 0NextEnd Sub下述过程在工作表上运行时,将在活动单元格周围的区域内循环,将所有绝对值小于 0.01 的数字都设置为 0(零)。Sub RoundToZero3()For Each c In ActiveCell.CurrentRegion.CellsIf Abs(c.Value) & 0.01 Then c.Value = 0NextEnd Sub下述过程在工作的空行写入数据Sub 输入()x = 3 '从第3行开始Do While Not (IsEmpty(Cells(x, 2).Value)) '判断第2列的最后一行(即空行的上一行)x = x + 1 '在最后一行加一行即为空行Loop'以下为写入数据Cells(x, 1) = Sheets("sheet1").Cells(1, 3)Cells(x, 2) = Sheets("sheet1").Cells(2, 3)Cells(x, 3) = Sheets("sheet1").Cells(3, 3)Cells(x, 4) = Sheets("sheet1").Cells(4, 3)Sheets("sheet1").SelectCells(2, 3) = Cells(2, 3) + 1 '每写一行自动加入序列号Sheets("sheet2").SelectEnd SubSub 每日结帐()' 录入发生额 Macro' 30 记录的宏 Application.ScreenUpdating = False '关闭屏幕显示If Application.InputBox("请输入密码:") = 1234 Then '此行与倒数3-5行设置密码Dim Msg, Style, Title, X, MyString '设置变量Msg = "!!!结帐后不能恢复,结帐吗?" ' 定义信息。Style = vbYesNo + vbCritical + vbDefaultButton2 ' 定义按钮。Title = "本日结帐!" ' 定义标题。X = MsgBox(Msg, Style, Title)If X = vbYes Then ' 用户按下“是”。CloseCall 备份Call 重算所有表Sheets("日报表").SelectActiveSheet.UnprotectSelection.AutoFilter Field:=1 '全部显示Sheets("余额表").SelectActiveSheet.UnprotectSelection.AutoFilter Field:=1 '全部显示Range("e6:g183,i6:k183").CopySheets("日报表").SelectRange("n6").SelectSelection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _xlNone, SkipBlanks:=False, Transpose:=FalseActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _, AllowSorting:=True, AllowFiltering:=True[A2].CopySheets("银行帐").SelectRange("F2").SelectSelection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=FalseActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _, AllowSorting:=True, AllowFiltering:=TrueApplication.CutCopyMode = FalseEnd IfElse: MsgBox "密码错误,即将退出!" '此行与第2行共同设置密码End IfApplication.ScreenUpdating = True '打开屏幕显示End SubSub 月末结帐()Application.ScreenUpdating = FalseIf Application.InputBox("请输入密码:") = 1234 Then '此行与倒数3-5行设置密码'以下三行为消息框Dim Msg, Style, Title, X, MyStringMsg = "!!!结帐后不能恢复,结帐吗?" ' 定义信息。Style = vbYesNo + vbCritical + vbDefaultButton2 ' 定义按钮。Title = "月末结帐!" ' 定义标题。X = MsgBox(Msg, Style, Title)If X = vbYes Then ' 用户按下“是”。CloseCall 备份Call 重算所有表Sheets("余额表").Select[L6:L183].CopySheets("日报表").SelectRange("M6").SelectSelection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=FalseRange("N6").Select[N6:S183] = ""Sheets("银行帐").Select[A7:u3000] = ""[K5].CopyRange("K6").SelectSelection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=FalseApplication.CutCopyMode = FalseRange("A1").SelectEnd IfElse: MsgBox "密码错误,即将退出!" '此行与第2行共同设置密码End IfApplication.ScreenUpdating = TrueEnd SubSub 打日报表()Application.ScreenUpdating = FalseSheets("日报表").SelectCall 重算所有表ActiveSheet.Unprotect Password:=641112 '撤消工作表保护并取消密码Selection.AutoFilter Field:=1, Criteria1:="1.00 "'自动筛选'以下10行弹出窗口输入打印信息Dim myPrintNum As IntegerDim myPrompt, myTitle As StringmyPrompt = "请输入要打印的份数"myTitle = "打印选取范围"myPrintNum = Application.InputBox(myPrompt, myTitle, 4, , , , , 1)If myPrintNum && 0 Then' Application.ActivePrinter = "&LaserJet 5000 PCL 6 在 Ne00:" '指定打印机ActiveWindow.SelectedSheets.PrintOut Copies:=myPrintNum, Collate:=True '设置打印信息,其中Copies:=myPrint为打印份数ElseMsgBox "请输入要打印的份数"End IfActiveSheet.ShowAllData '全部显示ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码Sheets("封面").SelectApplication.ScreenUpdating = TrueEnd SubSub 打印余额()Application.ScreenUpdating = FalseSheets("余额表").SelectCall 重算所有表ActiveSheet.Unprotect Password:=641112 '撤消工作表保护并取消密码ActiveWindow.ScrollColumn = 10Selection.AutoFilter Field:=1, Criteria1:="&&"'以下10行弹出窗口输入打印信息Dim myPrintNum As IntegerDim myPrompt, myTitle As StringmyPrompt = "请输入要打印的份数"myTitle = "打印选取范围"myPrintNum = Application.InputBox(myPrompt, myTitle, 4, , , , , 1)If myPrintNum && 0 Then' Application.ActivePrinter = "&LaserJet 5000 PCL 6 在 Ne00:" ' '指定打印机ActiveWindow.SelectedSheets.PrintOut Copies:=myPrintNum, Collate:=True '设置打印信息,其中Copies:=myPrint为打印份数ElseMsgBox "请输入要打印的份数"End IfActiveSheet.ShowAllData '全部显示ActiveSheet.Protect Password:=641112 ' 保护工作表并设置密码Sheets("封面").SelectApplication.ScreenUpdating = TrueEnd SubSub 备份()Dim y '变量声明-需保存工作表的路径和名称[M1] = ActiveWorkbook.FullName '单元格M1=当前工作簿的路径和名称y = cells(1, 14) 'Y=单元格N1的值,即计算后的需保存工作簿的路径和名称Worksheets("封面").UsedRange.Columns("M:N").Calculate '计算指定区域ActiveWorkbook.SaveCopyAs y '备份到指定路么YEnd SubSub 重算活动表()With Application.Calculation = xlManual.MaxChange = 0.001End WithActiveWorkbook.PrecisionAsDisplayed = TrueActiveWindow.DisplayZeros = TrueActiveSheet.CalculateEnd SubSub 重算指定表()Attribute 重算指定表.VB_ProcData.VB_Invoke_Func = "z\n14"Worksheets("银行帐").CalculateWorksheets("日报表").CalculateEnd Sub单元格数据改变引起计算激活过程Private Sub Worksheet_Change(ByVal Target As Range)Dim irow, icol As Integerirow = Target.Row '变量行irowicol = Target.Column '变量列icolIf irow & 6 And icol = 3 And cells(irow, 3) &= cells(irow - 1, 3) Then '&大于6行,并且第3列,当本行 3列&2行3列Application.EnableEvents = Falsecells(irow, 2) = cells(irow - 1, 2) '本行 2 列=上一行2列Application.EnableEvents = TrueElseIf irow & 6 And icol = 3 And cells(irow, 3) & cells(irow - 1, 3) Then '&大于6行,并且第3列,当本行 3列&2行3列Application.EnableEvents = Falsecells(irow, 2) = cells(irow - 1, 2) + 1 '本行 2 列=上行2列+1Application.EnableEvents = TrueElseIf (icol = 3 Or icol = 4 Or icol = 6 Or icol = 8 Or icol = 9 Or icol = 10 Or icol = 12 Or icol = 13) And irow & 6 Then 'And Target && ""Application.EnableEvents = Falsecells(irow, 5) = "=单位名称"cells(irow, 7) = "=摘要"cells(irow, 11) = "=余额"Range(cells(irow, 14), cells(irow, 16)) = "=预内外收支NOP"cells(irow, 17) = "=审核Q"cells(irow, 18) = "=对帐U"Range(cells(irow, 19), cells(irow, 20)) = "=内转收支XY"cells(irow, 21) = "=政采Z"Application.EnableEvents = TrueEnd IfEnd Sub'计算当前工作表路径及名称的函数,可作为单元格公式,也可写入宏=CELL("FILENAME")'改变Excel界面标题的宏Private Sub Workbook_Open()Application.Caption = "吃过了"End Sub'自动刷新单元格A1内显示的日期\时间的宏Sub mytime()Range("a1") = Now()Application.OnTime Now + TimeValue("00:00:01"), "mytime"End Sub'用单元格A1的内容作为文件名保存当前工作簿的宏Sub b()ActiveWorkbook.SaveCopyAs Range("A1") + ".xls"End Sub'激活窗体的宏,此宏写入有窗体的工作表内Private Sub CommandButton1_Click() '点数据录入按钮控件激活窗体Load UserForm3 '激活窗体UserForm3.StartUpPosition = 3 '激活窗体UserForm3.Show '激活窗体End Sub'以下为窗体中点击各按钮运行的宏,写入窗体内Public pos As Integer '声明变量pos'战友确定按钮语句Private Sub CommandButton1_Click()
此文由 考试与招生资讯网整理和发布,内容全部来源于网络,如有侵权请联系管理员删除
问:Sheet1中A1--E10范围内,以C1+D1+E1,C2+D2+E2........C10+D10+E10方式...
答:B1公式: =INT(LARGE(MMULT(Sheet1!C$1:E$10+ROW($1:$10)/100,{1;1;1}),ROW(A1))) 数组公式,需要按CTRL+SHIFT+回车,完成公式,下拉5行; ... 问:该公式错在哪里呢?为什么不能显示星期数呢?
答:B2单元格是“指标”,而其它表中并没有“指标”,所以出错。 事实上,星期几可以在E2输入:=TEXT(E1,"aaaa"),右拉填充。 问:A B C D E F 日期操作员产品编号工序数量单价 6-*10张三d001打扣300 6-*...
答:感谢bluelaser兄弟的精彩公式,这两天忙忘了上来回复了,不好意思! 评论(1) |...=OFFSET(Sheet2!$D$2,MATCH(C2&D2,Sheet2!$A$1:$A$1000&Sheet2!$C$1... 答:工具-选项-重新计算 答:不懂你要做什么 你学习一下我以前的关于OFFSET函数的一个回答 /question/1125804.html?fr=uc_push&push=keyword&oldq=1&entry=qb_uhome_keyword&hideOtherAnswer=true
考试与招生资讯网|ICP备案号:浙ICP备号-1
声明:本站内容全部来源于网络,并不代表本网观点或证实其内容的真实性本网不对信息的真实性和有效性负法律责任,希望访问者慎重考虑,风险由用户自己承担,如有侵权请联系管理员删除。}

我要回帖

更多关于 闲鱼卖家不发货怎么办 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信