我有一个xlsx电子表格,里面有一堆包含数据或公式的工作表。 假设工作表 1 有数据,工作表 2 有引用工作表 1 中数据的公式。 当工作表1使用新数据(来自SAS程序)更新时,我正在尝试执行以下操作:
- 仅将 sheet2 转换为值(即删除后面的公式)
- 删除工作表1
- 保存文件
我需要通过电子表格自动执行此操作,并在更新时自动运行宏/程序。
到目前为止,这是我得到的(粘贴值而不是公式):
Sub Sample()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("tab2")
ws.UsedRange.Value = ws.UsedRange.Value
End Sub
我真的不熟悉 VBA。
您只能在 Sheet2 中获得值。
您想删除 Sheet1(应该有一个弹出窗口来检查您是否真的要删除工作表......我们将在您之前将其关闭,然后在之后重新打开):
Application.DisplayAlerts = False
Sheets("Sheet1").Delete
Application.DisplayAlerts = True
然后到 .另存为(提示输入要另存为的文件名)
ThisWorkbook.SaveAs Filename:=fName
试试这个:
Sub Sample()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("tab2")
ws.UsedRange.Value = ws.UsedRange.Value
Application.DisplayAlerts = False
Sheets("sheet1").Delete
Application.DisplayAlerts = True
ActiveWorkbook.Save
End Sub
为什么不直接提出两张纸的想法,然后推断我在问题中得到的答案。
使用公式更新单元格,但作为值
尝试使用
Range("A1:P10").Select
With Selection
.Value = .Value
End With
这会将所选范围内的每个公式转换为其值。 只是不要尝试使用Cells.Select
. 当我尝试它时,我遇到了与内存相关的错误。 如果您的电子表格大小不一,请先计算底部单元格。
Sub Convert()
' Table Bottom
Dim TB As Long
' Set Table Bottom Variable
TB = Range("A65000").End(xlUp).Row 'finds bottom row
' Change Formulas in Range to Values
Range("A1:P" & TB).Select
With Selection
.Value = .Value
End With
End Sub
有时我必须根据电子表格更改用于查找底行的列,但这是一般的想法。
我认为如果您将其放在拉取更新的代码的末尾,或者如果您在更新完成后单独运行它,这将完成您最终尝试做的事情。 您的目标似乎不是拥有两个不同的电子表格。 只有一个只有值的电子表格。