【问题标题】:Format Data Type of Selected Cells in a Loop格式化循环中选定单元格的数据类型
【发布时间】:2022-01-17 03:33:04
【问题描述】:

我正在尝试使用 VBA 更改所选单元格的数据类型,但我当前的代码不起作用。我正在遍历一个目录中的多个 Excel 文件,但似乎当前代码要么没有打开工作簿,要么最后保存了更改。

我想打开每个 Excel 文件,更改两个选定单元格的数据类型,然后保存更改。 这是我现在拥有的代码:

Sub Formatting()
Dim MyFolder As String, MyFile As String


MyFolder = "C:\Users\Documents\Files"
Application.ScreenUpdating = False

MyFile = Dir(MyFolder)

Do While MyFile <> ""
    Workbooks.Open fileName:=MyFolder & "\" & MyFile

    Range("G4").NumberFormat = "0.00"
    Range("E4").NumberFormat = "m/d/yyyy"

    Workbooks(MyFile).Save
    MyFile = Dir
Loop

Application.ScreenUpdating = True

End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    将工作簿对象保存到一个变量中,然后将其与ActiveSheet.Range 一起使用。

    Dim wb As Workbook
    Do While MyFile <> ""
    
        Debug.Print MyFolder & "\" & MyFile
    
        Set wb = Workbooks.Open(FileName:=MyFolder & "\" & MyFile)
        wb.Activesheet.Range("G4").NumberFormat = "0.00"
        wb.Activesheet.Range("E4").NumberFormat = "m/d/yyyy"
        wb.Close SaveChanges:=True
        MyFile = Dir
    Loop
    

    注意:如果有多个工作表,则无论哪个处于活动状态,都会获得更改。如果有更好的方法来识别工作表,请使用它而不是 ActiveSheet。

    【讨论】:

    • 谢谢,代码本身不会引发错误消息,但仍然没有进行任何更改。文件名包含英语字母以外的一些外国字母,我想知道这可能是循环无法识别目录中每个文件的原因。
    • 你确定这是对的吗? MyFolder = "C:\Users\Documents\Files" - 缺少用户名,除非您的用户名是 Documents
    • 我添加了一个调试行,所以它会在即时窗口中显示文档名称。如果它从不显示任何内容,那么它甚至没有使用循环,因为MyFile 已经是一个空字符串。
    • 目录名正确。我删除了我的用户名以排除私人信息。我的代码中有正确的目录路径。我包括了调试行,但它不起作用。似乎 VBA 无法正常工作。它不会引发任何错误,但也不会进行任何更改。
    • 当您说“它不起作用”时,您的意思是“没有任何东西打印到即时窗口”吗?我仍然说这是您的MyFolder 的问题。如果您将C:\Users\Documents\Files 粘贴到您的Windows 资源管理器中,您想要的文件是否会出现?使用您的 Windows 资源管理器找到该文件夹​​,然后从其顶部复制完整路径。
    猜你喜欢
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    相关资源
    最近更新 更多