Excel VBA如何复制文件名到单元格、删除扩展名且保留原有格式
问题根本原因
Excel会自动将内容为纯数字的单元格识别为数值格式,自动抹除前导零,该问题和删除扩展名的操作本身无关,是单元格格式自动适配导致的。
解决方案
方案1:最小改动适配原有代码
仅需在你现有代码前加一行设置目标单元格为文本格式即可,不需要修改原有逻辑:
rngFile.NumberFormat = "@" ' 设置单元格为文本格式 rngFile.Value = wbkSrc.Name rngFile.Replace What:=".xlsx", Replacement:="", LookAt:=xlPart
方案2:更稳妥的通用写法
直接调用FileSystemObject的GetBaseName方法自动提取不含扩展名的文件名,不需要硬写替换规则,兼容.xls/.xlsx/.xlsm等多种Excel格式,避免文件名本身包含.xlsx字符时出现误替换:
Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") rngFile.NumberFormat = "@" rngFile.Value = fso.GetBaseName(wbkSrc.Name) Set fso = Nothing
方案3:不修改单元格格式的实现
如果后续需要保留该列的格式灵活性,可以在赋值时在内容前加半角单引号,Excel会自动将内容识别为文本保留前导零,且单引号不会在单元格中显示:
rngFile.Value = "'" & Replace(wbkSrc.Name, ".xlsx", "")
内容的提问来源于stack exchange,提问作者talayan
相关产品推荐
相关产品推荐

