前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >VBA代码:将整个工作簿中的所有公式转换为值

VBA代码:将整个工作簿中的所有公式转换为值

作者头像
fanjy
发布于 2023-10-10 02:05:35
发布于 2023-10-10 02:05:35
1.7K00
代码可运行
举报
文章被收录于专栏:完美Excel完美Excel
运行总次数:0
代码可运行

标签:VBA

这是不是将工作簿中的每个公式转换为值的最快、最有效的方法,请大家评判。

有趣的是,不管工作簿中有多少张表,它都是用一个操作来处理的。通常情况下,都是试图通过遍历工作表来做到这一点,然而并没有那么有效。

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub FormulaToValues()
 Worksheets.Select
 Cells.Select
 Selection.Copy
 Selection.PasteSpecial Paste:=xlPasteValues
 ActiveSheet.Select
 Application.CutCopyMode = False
End Sub

如果工作簿中有隐藏的工作表,则上面的代码不起作用。可使用下面的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub ConvertAllFormulaToValues()
 Dim OldSelection As Range
 Dim HiddenSheets() As Boolean
 Dim Goahead As Integer
 Dim n As Integer
 Dim i As Integer
 Goahead = MsgBox("这将不可逆地将工作簿中的所有公式转换为值。继续吗?",vbOKCancel, "仅确认转换为值")
 If Goahead = vbOK Then
   Application.ScreenUpdating = False
   Application.Calculation = xlCalculationManual
   n = Sheets.Count
   ReDim HiddenSheets(1 To n) As Boolean
 
   For i = 1 To n
     If Sheets(i).Visible = False Then HiddenSheets(i) = True
     Sheets(i).Visible = True
   Next
 
   Set OldSelection = Selection.Cells
   Worksheets.Select
   Cells.Select
   Selection.Copy
   Selection.PasteSpecial Paste:=xlPasteValues
 
   Cells(OldSelection.Row, OldSelection.Column).Select
   Sheets(OldSelection.Worksheet.Name).Select
 
   Application.CutCopyMode = False
 
   For i = 1 To n
     Sheets(i).Visible = Not HiddenSheets(i)
   Next
 
   Application.ScreenUpdating = True
   Application.Calculation = xlCalculationAutomatic
 End If
End Sub

其实,还可以使用更简单的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub ConvertAllFormulaToValues()
 Dim sh As Worksheet
 Dim HidShts As New Collection
 
 For Each sh In ActiveWorkbook.Worksheets
   If Not sh.Visible Then
     HidShts.Add sh
     sh.Visible = xlSheetVisible
   End If
 Next sh
 
 Worksheets.Select
 Cells.Select
 Selection.Copy
 Selection.PasteSpecial Paste:=xlPasteValues
 ActiveSheet.Select
 Application.CutCopyMode = False
 
 For Each sh In HidShts
   sh.Visible = xlSheetHidden
 Next sh
End Sub

这是通常使用的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub ConvertAllValues()
  Dim wSh As Worksheet
  For Each wSh In ActiveWorkbook.Worksheets
    With wSh.UsedRange
      .Copy
      .PasteSpecial xlPasteValues
    End With
  Next wSh
 
  Application.CutCopyMode = False
End Sub

还有其他的方法,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub rangeToValues()
 Dim r As Range
 Dim varR As Variant
 Dim calcState As Long
 
 Set r = Selection
 With Application
   .ScreenUpdating = False
   .EnableEvents = False
   calcState = .Calculation
   .Calculation = xlCalculationManual
 End With
 
 varR = r.Value2
 r = varR
 
 With Application
   .ScreenUpdating = True
   .EnableEvents = True
   .Calculation = calcState
 End With
End Sub

还有更好的代码吗?

注:本文代码整理自ozgrid.com,供有兴趣的朋友探讨。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
VBA实用小程序:核查并标记公式是否被正确复制
下面的代码将复制活动工作表,然后标记公式,使用阴影显示已复制哪些以及从何处复制。它从左到右、从上到下进行核查。
fanjy
2023/02/14
5060
VBA实用小程序:核查并标记公式是否被正确复制
ExcelVBA筛选法按分类条件拆分一个工作表为多个工作簿
对上次的文章进行优化 ==========代码如下===== Sub 筛选拆分() Dim d As Object, sht As Worksheet, arr, brr, r, kr, i&, j&, k&, x& Dim Rng As Range, Rg As Range, tRow&, tCol& Dim wb As Object, mysht As Worksheet Set d = CreateObject("scripting.dictionary") 'se
哆哆Excel
2022/10/31
3.7K1
ExcelVBA拆分之一簿一表_to_一簿多表使用演示
哆哆Excel
2023/09/09
2730
Excel应用实践10:合并多个工作簿中的数据
我有超过50个具有相同格式的Excel文件,它们的列标题相同,并且都放置在同一文件夹,有什么快速的方法将它们合并到一个单独的Excel文件的一个工作表中?
fanjy
2019/07/19
2.4K0
ExcelVBA拆分之一簿一表_to_一簿多表
哆哆Excel
2023/09/09
2590
ExcelVBA拆分之一簿一表_to_一簿多表
VBA汇总一个文件多工作表到一个表
VBA汇总一个文件多工作表到一个表 . 今天在工作中,同事传来一个excel文件中有很多个工作表,要我汇总,每个表的标题是一样的,虽然一个一个复制、粘贴是可以做到的,但时间很长,所以把以前学习一个代码,拿来用一下,代码找了很久才找到,想想还是把他放在这里好一点,以后查找方便 . 把多个工作表的内容汇总到一个“汇总”表中 Sub sheets_to_one() Dim mysht As Worksheet, rng As Range, sht As Worksheet Dim
哆哆Excel
2022/10/31
5750
EXCEL VBA语句集300
        定制模块行为 (1) Option Explicit ‘强制对模块内所有变量进行声明 Option Private Module ‘标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示  Option Compare Text ‘字符串不区分大小写  Option Base 1 ‘指定数组的第一个下标为1 (2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler ‘当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 ‘恢复正常的错误提示 (5) Application.DisplayAlerts=False ‘在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False ‘关闭屏幕刷新 Application.ScreenUpdating=True ‘打开屏幕刷新 (7) Application.Enable.CancelKey=xlDisabled ‘禁用Ctrl+Break中止宏运行的功能  工作簿 (8) Workbooks.Add() ‘创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate ‘激活名为book1的工作簿 (10) ThisWorkbook.Save ‘保存工作簿 (11) ThisWorkbook.close ‘关闭当前工作簿 (12) ActiveWorkbook.Sheets.Count ‘获取活动工作薄中工作表数 (13) ActiveWorkbook.name ‘返回活动工作薄的名称 (14) ThisWorkbook.Name ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称 (15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小 (16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化  工作表 (18) ActiveSheet.UsedRange.Rows.Count ‘当前工作表中已使用的行数 (19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum (21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ‘添加一个新工作表在第一工作表前 (22) ActiveSheet.Move After:=ActiveWorkbook. _ Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作表移至工作表的最后 (23) Worksheets(Array(“sheet1”,”sheet2”)).Select ‘同时选择工作表1和工作表2 (24) Sheets(“sheet1”).Delete或 Sheets(1).Delete ‘删除工作表1 (25) ActiveWorkbook.Sheets(i).Name ‘获取工作表i的名称 (26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines ‘切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮 (27) ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings ‘切换工作表中的行列边框显示 (28) ActiveSheet.UsedRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式 (29) Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接 (30) ActiveSheet.PageSetup.Orientation=xlLandscape 或ActiveSheet.PageSetup.Orientation=2 ‘将页面设置更改为横向 (31) ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName ‘在页面设置的表尾中输入文件路径 ActiveSheet.PageSetup.Le
Tony老师
2020/03/05
2.1K0
VBA拆分工作簿示例
如下图1所示,列B中有一系列重复数据,想要将每个重复的数据所在的行放到一个新工作簿并以该数据作为工作簿名。例如,列B中为7890的所有行复制到一个新工作簿并命名为7890.xlsx。
fanjy
2024/06/19
1700
VBA拆分工作簿示例
VBA: 提高 VBA 宏性能的 8 个技巧
文章背景: 作为VBA新手,在运行自己编写的代码时,可能会遇到VBA运行缓慢的问题。可以采取以下8个措施来提高运行效率。
Exploring
2022/12/18
4K0
VBA:  提高 VBA 宏性能的 8 个技巧
使用VBA将工作簿中所有的数据转换成值
通常,工作簿中会包含很多工作表,而工作表中的数据有些是单纯的数值,而有些是公式的结果。如果我们想要将工作簿中所有的数据都转换为值,也就是说,公式转换为其结果值,如何快速实现呢?
fanjy
2022/11/16
1.5K0
ExcelVBA从工作簿中查询多个姓名并复制出整行数据
工作中用的代码 Sub ExcelVBA从工作簿中查询多个姓名并复制出整行数据() Dim outFile As String, inFile As String Dim outWb As Workbook, mysht As Worksheet, tempsht As Worksheet, t_arr(1 To 30) Dim SearchRange As Range Dim LastRow As Integer, arr, FindStr As String, i
哆哆Excel
2022/10/31
1.7K0
VBA实用小程序:将Excel中的内容输入到Word
将Excel数据输入到Word文档并不难,但这会破坏书签,如果你在对Word文档进行了大量修改后发现想要重新从Excel中输入数据,那可能会令人沮丧。我想要一个可以根据需要经常重复的将Excel数据输入到Word,这意味着在复制完成后要重新创建书签。
fanjy
2023/02/14
2.3K0
Excel应用实践15:合并多个工作表
有时候,我们需要将工作簿中的所有工作表的数据合并到一个工作表中。如果工作表数量很少,可以直接手工使用复制粘贴操作,然而,如果工作表很多并且工作表中的数据量很大,手工复制既繁琐又容易出错漏。
fanjy
2019/07/19
1.2K0
在Excel中自定义上下文菜单(上)
上下文菜单(也称为快捷菜单)是在一些随用户交互之后出现的菜单,通常是鼠标右键单击操作。在Microsoft Office中,上下文菜单提供了一组在应用程序的当前状态或上下文中可用的有限选项。通常,可用的选择是与选定对象(如单元格或列)相关的操作。
fanjy
2022/11/16
2.9K0
在Excel中自定义上下文菜单(上)
一起学Excel专业开发16:使用表驱动的方法管理工作表用户接口
在工作表中存储需要完成的任务,代码从工作表中读取这些任务并执行,从而完成相应的操作,这就是表驱动方法。
fanjy
2019/10/22
9800
一起学Excel专业开发16:使用表驱动的方法管理工作表用户接口
ExcelVBA请按班别拆分为工作簿(筛选复制法)
请按班别拆分为工作簿 Sub 筛选拆分() Dim d As Object, sht As Worksheet, arr,brr, r, kr, i&, j&, k&, x& Dim Rng As Range, Rg As Range, tRow&,tCol&, aCol&, pd&, Cll As Range Dim wb As Object, mysht As Worksheet Set d =CreateObject("scripting.dictionary") '
哆哆Excel
2022/10/31
4630
ExcelVBA条件查找多文件并由整行复制到模板再存为新工作簿
【解决问题】在工作中我常要做的事:在几个文件中,查找某人的数据,并复制出来,到一个新的文件中。
哆哆Excel
2022/10/31
1.1K0
VBA: 将多个工作簿的第一张工作表合并到一个工作簿中
文章背景: 在工作中,有时需要将多个工作簿进行合并,比如将多份原始数据附在报告之后。一般的操作方法是打开两个工作簿(目标工作簿和待转移的工作簿),然后选中需要移动的工作表,右键单击以后选择“移动或复制”。接下来在新的对话框里面进行设置。
Exploring
2022/09/20
6.4K0
VBA:  将多个工作簿的第一张工作表合并到一个工作簿中
ExcelVBA拆分_一簿一表_to_多簿一表
哆哆Excel
2023/09/09
2680
ExcelVBA拆分_一簿一表_to_多簿一表
ExcelVBA汇总-多簿一表_to_一簿一表
哆哆Excel
2023/09/09
3060
ExcelVBA汇总-多簿一表_to_一簿一表
相关推荐
VBA实用小程序:核查并标记公式是否被正确复制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验