为什么我的宏会更改 Excel 中所有货币格式的单元格?

问题描述 投票:0回答:1

我正在编写一个宏来循环遍历特定目录中的一些 Excel 文件,以更新每个文件中的一些值。要更新的值位于工作表上,每个文件中的名称都相同。我尝试更新的工作表在每个文件中都受到保护。我的问题是,当我更新这些文件(我只需取消保护它)并保存更改时,我已格式化为“货币”或“会计”且包含公式的所有单元格(在整个工作簿中)将被格式化为“风俗'。谁能帮我解决这个问题吗?

编辑:如果我在关闭文件(由宏打开)之前停止宏,然后手动保存更新的文件,则当我再次打开它时,所有格式化的单元格都具有正确的格式。

这是我尝试过的最简单的代码:

Sub moveBill()

Dim ws As Worksheet
Dim rng As Range
Dim objFs As Object
Dim objFolder As Object
Dim file As Object
Dim folder As String
Dim fileCount As Integer
Dim pw As String

pw = "1234"

folder = "C:\Excel-test"

Set objFs = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFs.GetFolder(folder)

fileCount = 0
    
' Loop through all the files in the folder.
For Each file In objFolder.Files
    If Left(file.Name, 12) <> "FINAL REPORT" Then
        Dim src As Workbook         ' The source workbook.
        
        Set src = Workbooks.Open(file.Path, True)
        Set ws = src.Worksheets("Fakturaunderlag")
        Set rng = ws.Range("E1")

        fileCount = fileCount + 1
        ws.Unprotect pw
        rng.value = 1
        MsgBox "Go to next file"
        src.Close (True)
        Set src = Nothing
    End If
Next

MsgBox fileCount & " files have been updated"

End Sub

这是在我运行代码之前:

这是我运行代码后的结果:

这是更新我的文件后出现的“自定义”格式:

excel vba format currency
1个回答
0
投票

而不是这样做:

src.Close (True)

尝试:

Application.DisplayAlerts = False
src.SaveAs src.Path + "/" + src.Name, Local:=True
Application.DisplayAlerts = True

本质上你需要 Local 为 True,这就是 Notus_Panda 之前提到的。但是,它需要在保存工作簿时完成,并且不能使用 Workbook.Save() 进行设置,只能使用 SaveAs() 进行设置。因此,除非有其他选择,否则您必须使用 SaveAs() 并默默地覆盖现有工作簿(如果您想模拟 Save()),因此需要使用 Application.DisplayAlerts。

原始答案来自这里

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.