精华内容
下载资源
问答
  • 作者:iamlaosong 为了提高VBA程序运行速度,我们一般会关闭...当返回自动计算模式时,系统自动把所有的公式计算一遍,即使返回自动计算模式,文件保存时,系统也会自动计算所有公式,如果想计算,可以关闭这个功

    作者:iamlaosong

    为了提高VBA程序运行速度,我们一般会关闭屏幕更新,停止自动计算,如下:

    Application.ScreenUpdating = False

    Application.Calculation = xlManual

    当返回自动计算模式时,系统自动把所有的公式计算一遍,即使不返回自动计算模式,关闭并保存文件时,系统也会自动计算所有公式,当公式复杂,数据量大时,关闭工作簿就会比较慢,如果不想计算,可以关闭这个功能:

    Application.CalculateBeforeSave = False

    虽然关闭这个功能可以提高关闭速度,但重新打开这个文件时,系统仍然会重新计算一遍,以便保证数据的一致性。


    展开全文
  • VBA关闭工作簿和退出Excel

    万次阅读 2013-07-12 10:01:54
    要用VBA关闭工作簿,用Workbook.Close 方法即可,而要退出Excel,则用Application.Quit 方法。下面是一些代码示例:  关闭活动工作簿,如果工作簿有更改,提示是否保存:  Sub CloseWorkbook()  ...
    要用VBA来关闭工作簿,用Workbook.Close 方法即可,而要退出Excel,则用Application.Quit 方法。下面是一些代码示例: 
    

        关闭活动工作簿,如果工作簿有更改,提示是否保存:

        Sub CloseWorkbook()
        ActiveWorkbook.Close
        End Sub

        如果要避免出现提示,可添加“SaveChanges”参数,如直接保存并关闭工作簿:

        Sub ClostAndSaveWorkbook()
        ActiveWorkbook.Close Savechanges:=True
        End Sub

        将上述代码中的“True”改为“False”,则直接关闭工作簿而不保存。

        关闭所有打开的工作簿,并提示是否保存:

        Sub CloseAllWorkbooks()
        On Error Resume Next
        Workbooks.Close
        End Sub

        退出Excel,并提示对有更改的工作簿进行保存:

        Sub QuitExcel()
        Application.Quit
        End Sub

        保存活动工作簿并退出Excel:

        Sub SaveActiveWorkAndQuit()
        ActiveWorkbook.Save
        Application.Quit
        End Sub

        下面的代码在退出Excel时都不会提示是否保存工作簿。

        保存所有打开的工作簿并退出Excel:

        Sub SaveAllAndQuit()
        For Each wbk In Workbooks
        wbk.Save
        Next
        Application.Quit
        End Sub

        退出Excel,所有的改动都不保存:

        Sub QutiAndNoAlerts()
        Application.DisplayAlerts = False
        Application.Quit
        End Sub

     

    展开全文
  • Sub Test()  Dim wb As Workbook  Set wb = Workbooks.Add(xlWBATWorksheet)  Set sht = wb.Worksheets("Sheet1")  wb.Close SaveChanges:=False Sub

    Sub Test()

      Dim wb As Workbook

      Set wb = Workbooks.Add(xlWBATWorksheet)

      Set sht = wb.Worksheets("Sheet1")

      wb.Close SaveChanges:=False

    Sub 

    展开全文
  • VBA单元格、工作表工作簿

    千次阅读 2019-04-30 23:08:35
    详解VBA单元格、工作表工作簿各种表示、方法,注意事项。

    VBA单元格、工作表、工作簿


    一、单元格

    注意:

    1. 单元格不仅包括值,还包括格式等信息,虽然很多时候结果是等同的,为避免出错,如果只想引用单元格的值,使用.value方法,尤其在使用字典时,比如:dic(range(“a1”).value) = range(“b1”).value;赋值:range(“a1”).value = 100
    2. 直接输入单元格,表示的是当前激活工作表的单元格,如果想表示非激活工作表单元格,需要在单元格前面加上工作表对象,比如sheets(“sheet_name”).range(“a1”);这里工作表也是一样的,默认为激活工作簿下的工作表,如需表示其他工作簿工作表,需要在前面加上工作簿对象;未避免出错,一般我们都会设置工作簿对象,逐级引用下面的单元格对象。比如:
      set wb = thisworkbook
      with wb.worksheets("sheet_name")
      	.range("a1").value = "a1"
      	.cells(2,1).value = "a2"
      	[a3].value = "a3"
      end with
      

    1. range表示

    1.1 单个单元格:

    range("a1")
    '或者
    range("ab200")
    

    1.2. 范围:

    1.2.1. 指定范围

    '如果指向同一个工作表,这三个是等价的,表示a1:b10范围
    range("a1:b10")
    range("a1","b10")
    range(range("a1"),range("b10"))
    

    1.2.2. 行或者列

    '行表示:
    range("a1").entirerow	
    range("1:1")		
    range("2:2,5:5")
    rows(1)	
    rows("1:1")
    '列表示:
    range("a:a")		
    columns("a:a")	
    columns(1)	
    range("a1").entirecolumn
    

    1.2.3. 当前区域和使用区域

    sheet1.usedrange	'使用区域
    sheet1.range("a1").currentregion		'单元格a1所在连续区域
    

    1.2.4. 交集和合集

    intersect(range("a1:a10"),range("2:3"))		'该交集结果:range("a2:a3")
    rg = range("a1")
    rng = range("a2")
    set rng = union(rng,rg)		'union单元格取并集,该并集结果:range("a1:a2");注意:对象要使用set赋值。
    

    1.2.5 向range传入excel单元格自定义名称

    '还可以向range传入excel单元格自定义名称
    '是的,可以向多个单元格赋值同一个数值
    range("input") = 1
    

    运行效果如下图:
    在这里插入图片描述
    1.2.6 定位

    range("a1:b10").specialcells(xlCellTypeBlanks)		'定位空白单元格
    sheets(sheet_name).specialcells(xlcelltypevisible)		'定位可见单元格
    

    specialcells更多参数请参考VBA帮助手册。

    其中,entirerow和entirecolumn,currentregion,union,specialcells同样适用于[]和cells表示使用,下面不再重复赘述。

    2. 其他表示方法

    2.1 cells单个单元格

    '都表示a1单元格
    cells(1,1)
    cells(1,"a")
    '下面这种表示,range("a2:b6")一共有10个单元格,如果想cells传入一个数值,表示从左上到右下的位置,下面表示为range("a4")单元格
    range("a2:b6").cells(5)
    '表示range("a5")单元格
    rang("a2:b6").cells(4,1)
    ''Range("a2:b6")只有10个单元格,cells传入参数实际是从单元格左上角开始计算的。可以忽略区域大小
    Range("a2:b6").Cells(12) = "第12个单元格"		
    

    range使用cells方法效果如图:
    在这里插入图片描述
    2.2 []表示方法

    [a1]	'range("a1")
    [a1:b10]	'range("a1:b10")
    

    2.3 活动单元格
    ActiveCell,如果在select选中单元格情况下,也可以使用selection
    active也适用于工作表,工作表,图表等,表示活动对象。比如活动sheet:activesheet

    3. end方法

    • 等同于excel中“ctrl”+方向键定位。range(“b3”).end(xlup) 向上定位:range(“b1”)
      end可以传入参数’上’:‘xlup’,‘下’:‘xldown’,‘左’:‘xltoleft’,‘右’:‘xltoright’
      也可以传入数字1,2,3,4分别代表上下左右。
      注意:end只能在连续单元格跳转到最后一个单元格,range(“b10”).end(xlup),如果b5单元格为空,只会跳转到b6单元格,跟excel一样的。

    4. 格式

    4.1 判断单元格是否包含批注

    If Range("A1").Comment Is Nothing Then
    '插入"hello"批注:
    ActiveCell.AddComment ("Hello") 
    

    4.2 单元格是否为公式单元格

    if range("a1").hasformula = True then		
    

    这点可以结合公式填充语句filldown(excel鼠标公式单元格右下角双击公式填充)一起使用,先判断单元格是否为公式单元格,再调用filldown。如下代码:

    Sub formula_filldown()
    	dim i ,max_row,max_col as long
    	max_col = activesheet.[a1].end(xltoright).column
    	max_row = activesheet.usedrange.rows.count
    	'假设第一行是标题,第二行是内容
    	for i = 1 to max_col
    		'判断第二行单元格是否包含公式,有公式自动填充
    		if cells(2,i).hasformula then range(cells(2,i),cells(max_row,i)).filldown
    	next
    End Sub
    

    4.3 是否为合并单元格

    range("a1").mergecells = true
    '合并单元格
    range("a1:b1").merge
    

    4.4 格式刷&选择性粘贴

    格式刷

    sub paste_formats()
       Range("a6:at6").Copy
       Range("a7:at7").PasteSpecial Paste:=xlPasteFormats
    end sub
    

    选择性粘贴为值

    With ActiveSheet.UsedRange
        .Copy
        .PasteSpecial Paste:=xlPasteValues
        '复制后要清空剪切板,不然再操作复制,会出错。
        Application.CutCopyMode = False		
    End With
    

    5. 排序

    key表示排序字段,第一个有值的单元格,非标题。order排序方法,升序:xlAscending,降序:xlDescending;可以设置多个排序字段,key-order依次写就可以了。

    Sub sort()
    Range("a2:b12").sort key1:=Range("a2"), order1:=xlDescending, _
    key2:=Range("b2"), order2:=xlAscending
    End Sub
    

    6. 筛选

    Sheet1.UsedRange.AutoFilter field(筛选的列),criteria1(筛选条件,可以使用比较运算符),operator(第二筛选条件),visibledropdown(是否显示箭头True:显示)
    范围也可以指定为数组array,比如:
    range(“a1”).currentregion.autofilter field:=3,criteria1:=array(…)
    示例图片:
    筛选示例图片

    Sub aa()
    '筛选地区-广东
    Sheet1.UsedRange.AutoFilter field:=1, Criteria1:="广东"
    '筛选水果-苹果
    Sheet1.UsedRange.AutoFilter field:=2, Criteria1:="苹果"
    '筛选销量-大于1
    Sheet1.UsedRange.AutoFilter field:=3, Criteria1:=">1"
    End Sub
    

    结果如下图:
    筛选后的图片

    7. 隐藏行或列

    '隐藏CERange("C:C,E:E").EntireColumn.Hidden = True
    
    '取消行列隐藏
    Cells.EntireColumn.Hidden = False 
    Cells.EntireRow.Hidden = False
    

    8. 删除与插入

    'clear是清除内容与格式
    
    '清除工作表中的内容。
    cells.clear
    
    '或者也可以这样
    sheet1.usedrange.clear	
    
    '如果你只想清楚单元格内容的话,使用.clearcontents方法
    sheet1.range("a1:b100").clearcontents
    
    '删除行
    Worksheets("Sheet1").Rows(3).Delete	'删除第三行
    
    '插入行
    Worksheets("Sheet1").Rows(3).Insert
    
    '插入列
    Columns("b").Insert
    

    9. 自动调整列宽

    Range("a1:h1").EntireColumn.AutoFit
    

    10. 单元格范围与偏移使用

    适用于单元格对象

    '使用resize表示单元格范围
    '如果只传入一个参数的话,表示以单元格为起点到向下第10个单元格的连续单元格区域。这里相当于range("a1:a10")
    Range("a1").Resize(10).Value = 1
    '传入两个参数,第一个以单元格为起点的区域单元格行数,第二个参数以单元格为起点的区域单元格列数
    Range("b1").Resize(2, 3).Value = 2
    
    'offset是偏移量,类似excel的offset函数,第一个参数上下(负正)偏移,第二个参数左右(负正)偏移,如果前面是一个单元格对象,参数是可以传入负数的。
    Range("b4").Offset(2).Value = 3
    Range("b4").Offset(2, 2).Value = 4
    Range("b4:c5").Offset(3, 2).Value = 5
    Range("c9").Offset(1, -1).Value = 6
    

    使用效果图下图:
    在这里插入图片描述


    二、工作表-工作簿

    1. 工作表&工作簿表示

    1.1 工作表表示
    如下图片选中,工作表一共有三种表示。

    1. 使用工作表隐式名字:sheet3
    2. 使用工作表显示名字:sheets(“工作表显示名字”),通常情况下,显示名字跟隐式名字是一样的,如果是一样的,也可以这么表示:sheets(“sheet3”)
    3. 使用索引:sheets(1) 根据工作表在excel中从左到右的位置,该工作表为第一个。
    4. 当然也可以使用活动工作表:activesheet,active跟单元格,工作簿等是一样适用的。
    5. 使用父对象:range("a1").parent
      1.2 工作簿表示
      1. 这个工作簿:thisworkbook,写代码所在工作簿
      2. 活动工作簿:activeworkbook
      3. 使用索引:workbooks(1) 同工作表
      4. 使用工作簿名字:workbooks(“工作簿名字”)
      5. 使用父对象:range("a1").parent.parent

    1.3 工作簿设置对象
    一般我们会为工作簿设置对象,方便引用,如果存在多个对象,这样就不会混乱。
    set wb = workbooks.open(“需要打开工作簿完整路径”)

    2. 常用语句

    2.1 工作表

    2.1.1 新建工作表

    ThisWorkbook.Sheets.Add Before:=Worksheets(1)
    activesheet.name = "新建工作表命名"
    

    或者可以直接这样:

    Sheets.Add.Name = "新建工作表命名"
    

    2.1.2. 取消筛选
    如果工作当前有筛选的话,取消筛选。

    If Sheets("明细").AutoFilterMode = True Then Sheets("明细").AutoFilterMode = False
    

    2.1.3. 工作表隐藏
    如果你不想某些工作表展示的话,可以这么操作,当visible参数为2时(深度隐藏),工作表鼠标右击操作是无法显示工作簿的; (-1:显示;0:隐藏;2:深度隐藏)

    '深度隐藏sheet1工作表
    sheet1.visible = -2
    

    2.1.4. 删除工作表

    sheet1.detete	删除工作表
    

    2.1.5. 取消当前工作表所有的超链接

    Cells.Hyperlinks.DeleteCells.Hyperlinks.Delete
    

    2.1.6 工作表复制(复制到原工作簿或新工作簿)

    Sub sheet_copy_to_new_workbook()
    Dim new_wb As Workbook
    Dim st
    dim i as Byte
    With ThisWorkbook
    '复制工作表,如果没有指定after(位置)参数,就会自动创建一个新的工作簿,复制工作表到新创建的工作簿
        .Sheets(1).copy
        '设置新创建工作簿对象
        Set new_wb = ActiveWorkbook
        For i = 2 To .Sheets.Count
            .Sheets(i).copy new_wb
            '如果是下面这样写的话,是在原来工作簿上复制工作表,复制的工作表位置放在最后面。
            '.Sheets(i).copy after:=worksheets(sheets.count)
            .Sheets(i).copy after:=new_wb.Sheets(new_wb.Sheets.Count)
            '也可以给复制的工作表重新命名
            ActiveSheet.Name = i
        Next
    End With
    '保存新工作簿到指定路径,命名为“new_workbook.xlsx”
    wb.SaveAs "d:/桌面/new_workbook.xlsx"
    '这里其实是复制了当前工作簿(复制工作表示例),如果不想做其他修改,比如修改表名等信息,也可以使用文件复制语法:FileCopy+Name实现文件复制及重命名
    '语法如下:
    FileCopy "f:\initial.xlsx", "e:\copy_file.xlsx"
    Name "e:\copy_file.xlsx" As "e:\new_name.xlsx"
    End Sub
    

    2.2 工作簿

    2.2.1 打开工作簿,并指定对象

    set wb = workbooks.open("d:/Desktop/test.xlsm")		
    '打开带密码的工作簿,password为工作簿密码
    workbooks.Open Filename:="D:\桌面\代码储藏.xlsm", Password:="1234"
    

    2.2.2 新建工作簿另存

    Set wb = Workbooks.Add
    '复制这个工作簿“通报”工作表的内容到新工作簿工作表
    ThisWorkbook.Sheets("通报").[a1].CurrentRegion.Copy wb.Worksheets("Sheet1").[a1]
    '工作簿另存为
    wb.saveas "d:/Desktop/新工作簿名字.xlsx"
    '关闭工作簿,并且保存,如果后面的参数为False,如果没有事先保存的话,则会丢失修改数据。
    wb.close True
    

    2.2.3 保存工作簿

    thisworkbook.save
    '或者也可以这样
    thisworkbook.saved = true
    

    2.2.4 工作簿的名字

    thisworkbook.name
    '工作簿带路径完整的名字
    thisworkbook.fullname
    

    2.2.5 删除工作簿

    'kill + fullname,使用kill方法也可以删除其他文件,后面带完整路径。
    kill "d:\Desktop\wb_delete.xlsx"
    
    展开全文
  • 1 工作簿workbook 常用的事件 1.1 常用事件 workbook_open() workbook_WindowActivate() workbook_Windowresize() workbook_sheetchange() workbook_sheetselectionchange() workbook_beforesave() ...
  • 1、关闭文件时如果文件做了修改,系统会提示保存,用下列语句就不会提示了: ThisWorkbook.Close savechanges:=False False表示不保存修改,如果改为True,则保存修改。类似的: ActiveWindow.Closesavechanges:...
  • EXcelVBA另存工作簿之后删除按钮及宏代码
  • Workbooks 对象 Microsoft Excel 应用程序中当前打开的所有 Workbook 对象的集合。 说明 ...下例关闭所有打开的工作簿。 Workbooks.Close 使用 Add 方法可创建一个新空工作簿并将它添加到...
  • Excel 文件操作 一、概述 本质就是操作 workbook window 文件窗口 一个 excel 文件对应一个 workbook,打开后对应一个...是否存在:输出为 0 就是存在 Debug.Print Len(Dir("d:\test.xlsx")) 是否打开 Dim...
  • 使用情景:如题,将一个包含多工作表工作簿拆分为单工作表工作簿文件 原始文件描述:【旺旺大礼包.xlsx】中有三个工作表,分别是旺仔牛奶、旺旺仙贝、旺旺小小酥 操作流程: 打开旺旺大礼包.xlsx——在菜单栏...
  • VBA在Excel中的应用用VBA将同一工作簿中不同工作表拆成独立文件问题描述1.在“开发工具”选项卡中选择”Visual Basic”2.插入模块运行结果可能存在的问题 用VBA将同一工作簿中不同工作表拆成独立文件 问题描述 有一...
  • Workbooks是所有工作簿对象组成的集合,而Wrokbook对象是Workbooks集合的一个成员。 1.引用集合中的工作簿 利用工作簿名引用工作...通过代码获得指定工作簿的名称、保存的路径等文件信息,示例代码如下。 Sub WbMsg...
  • VBA 创建一个工作簿

    2021-04-08 09:53:59
    一、代码 Sub test() Dim wb As Workbook, sht As Worksheet '定义一个... Set wb = Workbooks.Add '新建一个工作簿 Set sht = wb.Worksheets(1) With sht .Name = "另存工资表" '修改第一张工作表的标签名称 .R
  • 复制指定目录下excel工作簿中同名工作表,该代码将在相同目录下创建汇总工作簿,各工作簿中同名工作表将被分别复制到汇总工作簿的不同表中(汇总工作簿中各工作表以分工作簿名命名)。 所有要汇总的工作簿在同一个...
  • Sub 合并当前目录下所有工作簿的全部工作表() Dim MyPath, MyName, AWbName '第一行注释,声明变量 Dim Wb As Workbook, WbN As String Dim G As Long Dim Num As Long Dim BOX As String Application....
  • VBA-新建工作簿

    2020-02-26 12:09:43
    这节内容介绍如何应用VBA自动创建工作簿,并修改部分内容后保存关闭。和创建工作表类似,创建工作簿仍然使用add方法。下面是一个较为完整的创建例子: Sub addnewbook() Dim i As Integer Dim shtname As Variant ...
  • Workbooks工作簿对象 For Each 循环 第一块内容:For Each循环 Sub test1() Dim ge As Range'把变量ge定义为Range(rng)类型,单元格变量/区域变量 For Each ge In Range("A1:A10")'在单元格区域A1:A10范围内,...
  • 一个excel文件就是一个excel工作簿例如abc.xls,一个工作簿中包含1个到若干个工作表例如sheet1,也就是说工作簿是由工作表组成的。 下面我们就来了解一下工作簿的操作 打开工作簿 Application.displayAlerts=...
  • Sub CloseAllWB() Dim wb As Workbook If Workbooks.Count > 1 Then  For Each wb In Workbooks  If wb.Name  wb.Close True  End If  Next End If End Sub
  • 工作簿对象(Workbook)的SaveCopyAs方法 SaveCopyAs方法和SaveAs方法的区别 示例: 在许多时候,希望能够为工作簿创建一个备份,以防误操作而丢失数据。如何为当前工作簿自动备份一个副本至指定目录,并以日期和...
  • EXCEL VBA创建sheet/工作簿

    万次阅读 2019-05-29 11:02:34
    1.需要创建以地市命名的系列sheet,但想手动创建改名。 代码实现如下: Sub SheetAdd() Dim i As Long '定义一个长整型变量 Sheets.Add After:=Sheets(Sheets.Count), Count:=Sheets(1).Range("A" &...
  • 背景:一般情况下,打开Excel的文件类型为.xlsx,编写VBA代码后,关闭Excel,再次打开Excel后,代码消失 解决办法:更换文件类型,启用宏编辑 1.直接ctl+s保存VBA代码,弹出提示 2.根据弹框提示选择“否” 3.将...
  • VBA工作簿操控备忘

    2017-06-22 22:38:08
    CreateFolder Method ...Required........Required....1、工作簿创建和保存: ...2、工作簿打开: ...'打开指定工作簿 ...Sub 关闭指定工作簿保存() Workbooks("Workbook").Close savechanges:=True End Sub
  • True '保存修改并关闭工作簿 End If Next End Sub Rem 判断已打开的工作簿文件后缀名 Function FileExt ( FileName As String ) As String On Error Resume Next If ...
  • 学习资源:《Excel VBA从入门到进阶》第10集 by蓝色幻想一、Excel工作表的分类Excel工作表有两大类,一类是我们平常用的工作表(worksheet),另一类是图表、宏表等。这两类的统称是sheets。在工作表的标签页上右击—...
  • 如图所示,在“数据库.xlsx”工作簿中存有“销售数据”,在相同目录下的工作簿 希望能够将该工作簿中该工作表中的数据读入以便进行下一步操作。该如何用VBA完成? 销售经理 区域 销售数量 张万斌 崇州...
  • '因为自己昨天想不通,在路上想了一会儿,...'这个vba代码是后处理的代码,加载阶段未接触上进行修正 Dim wb As Workbook str = Dir("C:\Users\DELL\Desktop\保存\*.*") ' ActiveWindow.WindowState = xlNormal ...
  • VBA 禁止保存

    2015-09-06 11:20:00
    禁止保存 在workbook事件中 Private Sub Workbook_BeforeClose(Cancel As Boolean) Me.Saved = TrueEnd Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Cancel = True...
  • 如果是将当前工作簿所有工作表的公式转换为数值,需要使用到VBA代码。 Sub FunctionTransValue_Sheets() Dim sht As Worksheet For Each sht In Worksheets '遍历工作表 sht.UsedRange.Value = sht.UsedRange....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,498
精华内容 999
关键字:

vba关闭工作簿不保存