如果公式未知,Excel显示保存时的值,而不是#NAME

68bkxrlz  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(108)

我们使用的会计软件有一个Excel插件,允许我们从他们的数据库中提取数据。他们这样做的方法是添加我们可以在Excel中使用的特殊公式,例如:
包含特殊公式的Excel:

现在的问题是,当在另一个没有安装此插件的设备上打开这样准备的Excel工作表时,值不再可读:Excel无法识别该公式,因此显示#NAME错误。
作为一种解决方案,我们目前将创建的每个Excel保存两次:一次是公式,一次是我们粘贴所有工作表"作为值"的地方。当然,这是一个繁琐的过程。
我在想:

  • 有没有什么方法可以让Excel按照上次保存工作表时的状态显示值?例如,如果您与某个数据库建立了数据连接,而其他人后来打开了该文件,但该文件无法访问该数据库,则Excel也可以按照上次连接时的状态显示值。只是这似乎不适用于公式?
  • 如果这是不可能的,有没有一些简单的VBA,我们可以链接到一个按钮在功能区,保存一个副本的当前工作簿(与所有工作表)与值只,所以没有公式?那么它仍然是一个手动过程,以点击该按钮,但至少我们不必复制粘贴为值工作表每张工作表了...

谢谢你的建议!

jucafojl

jucafojl1#

不确定这是否能和用户定义的函数一起工作......可能在高级选项中禁用“更新到其他文档的链接”。很确定它不会工作。
关于你的第二个问题,我可以想到两种方法。
或者遍历每个工作表,复制 * 所有 * 单元格并将值粘贴回去:

Sub PlaceValues()

    Dim wrkBk As Workbook
    Set wrkBk = ThisWorkbook 'This is the file containing the code.
                             'You could change it to look at some other open workbook.
    
    Dim wrksht As Worksheet
    For Each wrksht In wrkBk.Worksheets
        With wrksht
            .Cells.Copy
            .Cells.PasteSpecial Paste:=xlPasteValues
        End With
    Next wrksht
    
End Sub

一个更有针对性的办法是取代具体的公式。
这里的一个缺点是替换SUM公式也会替换SUMIF,因为它包含文本SUM。

Public Sub Test()

    ReplaceFormula "FIN_G_EN"
    ReplaceFormula "SUM"

End Sub

Public Sub ReplaceFormula(FormulaText As String)

    Dim wrkBk As Workbook
    Set wrkBk = ThisWorkbook
    
    Dim wrksht As Worksheet
    For Each wrksht In wrkBk.Worksheets
        Dim rFound As Range
        With wrksht.Cells
            Set rFound = .Find(What:=FormulaText, _
                               LookIn:=xlFormulas, _
                               LookAt:=xlPart, _
                               MatchCase:=True)
            If Not rFound Is Nothing Then
                Do
                    rFound.Value = rFound.Value
                    Set rFound = .FindNext(rFound)
                Loop While Not rFound Is Nothing
            End If
        End With
    
    Next wrksht

End Sub

相关问题