Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 261|回复: 1

数值化Excel表格中的公式,VBA代码

[复制链接]

57

主题

86

帖子

417

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
417
发表于 2025-4-23 01:08:42 | 显示全部楼层 |阅读模式

Sub 数值化Excel()
    Dim ws As Worksheet
    Dim selectedSheets As Collection
    Dim sheetName As Variant
    Dim savePath As String
    Dim fd As FileDialog
    Dim result As Integer
    Dim i As Integer
    Dim tempWorkbook As Workbook
    Dim tempSheet As Worksheet
   
    ' 创建一个集合来存储用户选择的工作表
    Set selectedSheets = New Collection
   
    ' 弹出对话框,列出所有工作表,让用户选择
    For Each ws In ThisWorkbook.Worksheets
        If MsgBox("是否将工作表 " & ws.Name & " 中的公式转换为数值并另存?", vbQuestion + vbYesNo) = vbYes Then
            selectedSheets.Add ws
        End If
    Next ws
   
    ' 如果用户没有选择任何工作表,则退出宏
    If selectedSheets.Count = 0 Then
        MsgBox "未选择任何工作表,操作已取消!", vbExclamation
        Exit Sub
    End If
   
    ' 弹出文件保存对话框,让用户选择保存路径
    Set fd = Application.FileDialog(msoFileDialogSaveAs)
    With fd
        .AllowMultiSelect = False ' 不允许多选
        .Title = "请选择保存路径并输入文件名" ' 对话框标题
        .InitialFileName = "另存为数值.xlsx" ' 默认文件名
        result = .Show ' 显示对话框
        If result = -1 Then ' 如果用户点击了“保存”
            savePath = .SelectedItems(1) ' 获取完整路径
        Else
            MsgBox "未选择保存路径,操作已取消!", vbExclamation
            Exit Sub
        End If
    End With
   
    ' 创建一个新工作簿
    Set tempWorkbook = Application.Workbooks.Add
   
    ' 遍历用户选择的工作表,将公式转换为值并复制到新工作簿
    Application.ScreenUpdating = False
    For i = 1 To selectedSheets.Count
        Set ws = selectedSheets(i)
        ws.Copy After:=tempWorkbook.Sheets(tempWorkbook.Sheets.Count)
        ' 将公式转换为值
        tempWorkbook.Sheets(tempWorkbook.Sheets.Count).UsedRange.Value = tempWorkbook.Sheets(tempWorkbook.Sheets.Count).UsedRange.Value
    Next i
    Application.ScreenUpdating = True
   
    ' 删除新工作簿中的默认工作表(如果有多于一张工作表)
    Application.DisplayAlerts = False
    If tempWorkbook.Sheets.Count > 1 Then
        tempWorkbook.Sheets(1).Delete ' 删除第一个默认工作表
    End If
    Application.DisplayAlerts = True
   
    ' 保存新工作簿为 .xlsx 格式
    tempWorkbook.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook
    tempWorkbook.Close SaveChanges:=False
   
    MsgBox "所选工作表已转换为数值,并保存到指定路径:" & vbCrLf & savePath, vbInformation
End Sub
回复

使用道具 举报

57

主题

86

帖子

417

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
417
 楼主| 发表于 2025-4-23 01:46:33 | 显示全部楼层
将以上代码拷贝后,在Excel表格中以宏的方式运行。实测了十个表,每个表2300行数据可以输出结果。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|中移星光 照耀未来 ( 18229825658 )

GMT+8, 2025-5-24 04:18 , Processed in 0.019431 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表