ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用代码将当前文件下的除当前文件外的全部excel文档内容仅保留格式和值?

如何用代码将当前文件下的除当前文件外的全部excel文档内容仅保留格式和值?

作者:绿色风 分类: 时间:2022-08-17 浏览:144
楼主
kevinchengcw
Q: 如何用代码将当前文件下的除当前文件外的全部excel文档内容仅保留格式和值?
A: 当前文件下的除当前文件外的全部excel文档内容仅保留格式和值的最快方法是创建一个当前文件的副本,仅复制格式及单元格值到副本中,并删除原本(当然也可以是改名备份),将副本重命名为原本的名字,涉及到下列知识点:
1. 获取文件列表的方法(含全部子文件夹)。
2. 循环读取文件并写入副本。
3. 相关信息的清理。

本例示例代码如下:
  1. Sub test()
  2. Dim FN As String
  3. Dim Wb, Wb2 As Workbook
  4. Dim Ws As Worksheet
  5. Dim Rng As Range
  6. Dim Na As Name
  7. Dim N As Integer
  8. Dim Obj
  9. Application.ScreenUpdating = False  '关闭屏幕刷新
  10. Obj = CreateObject("WSCript.shell").Run("cmd.exe /c dir """ & ThisWorkbook.Path & "\*.xls*"" /s/a/b>""" & ThisWorkbook.Path & "\list.txt""", 0, True)  '引用脚本运行命令行程序取得当前目录下所有excel文件名,而且等到运行结束后再继续执行vba代码
  11. Set Obj = CreateObject("Scripting.FileSystemObject").OpenTextFile(ThisWorkbook.Path & "\list.txt", 1)  '利用FSO打开记录当前目录下excel文件的文本文档
  12. FN = ""  '初始化文件名字符串变量为空
  13. Do Until Obj.AtEndOfStream  '循环读取文本文件内容直到末尾
  14.     FN = Obj.readline  '读取一行文本并赋值给文件名变量
  15.     If FN <> "" And FN <> ThisWorkbook.FullName Then  '如果文件名不为空且不是当前文件名(注意是全路径的)
  16.         Set Wb = Workbooks.Open(FN)  '则打开该文档(源文档)
  17.         N = Wb.Worksheets.Count  '取得该文档的工作表数
  18.         Application.SheetsInNewWorkbook = N  '设定新建excel的工作表数其相同
  19.         Set Wb2 = Workbooks.Add  '新建一个excel文档(新文档)
  20.         Wb.Activate  '激活源文档(有时不激活就操作会出错)
  21.         For N = 1 To Wb.Worksheets.Count  '循环源文档各工作表
  22.             Application.CutCopyMode = True  '打开复制粘贴模式
  23.             Wb.Worksheets(N).Activate  '激活源文档当前工作表
  24.             Wb.Worksheets(N).Unprotect  '取消工作表保护
  25.             Wb.Worksheets(N).Cells.Copy  '复制当前工作表全部单元格内容
  26.             Wb2.Activate  '激活新文档
  27.             Wb2.Worksheets(N).Activate  '激活新文档中对应的工作表
  28.             Wb2.Worksheets(N).Cells.Select  '选定全部单元格(这样操作多数系统不会出问题)
  29.             Wb2.Worksheets(N).Paste  '粘贴从源文档中复制的内容
  30.             For Each Rng In Wb2.Worksheets(N).UsedRange  '再循环新文档当前工作表中已使用范围中的各个单元格
  31.                 If Rng.Value = "" Then   '如果单元格的值为空则
  32.                     Rng = ""
  33.                 Else   '否则等于单元格的值(清除公式,链接等)
  34.                     Rng = Rng.Value
  35.                 End If
  36.             Next Rng
  37.             Application.CutCopyMode = False  '关闭复制粘贴模式(这样可以清空剪贴板,避免提示有大量数据存放于剪贴板)
  38.         Next N
  39.         Wb.Close False  '关闭源文档
  40.         Kill FN  '删除源文档,如果不想删除这里可以更改成改名
  41.         Wb2.SaveAs FN  '将新文档存为源文档的名
  42.         Wb2.Close  '关闭新文档
  43.     End If
  44. Loop
  45. Obj.Close   '关闭文本文件
  46. Set Obj = Nothing  '清空项目
  47. Kill ThisWorkbook.Path & "\list.txt"  '删除列表文件
  48. Application.SheetsInNewWorkbook = 3  '恢复新建文件中工作表数量
  49. Application.CutCopyMode = True  '恢复复制粘贴模式
  50. Application.DisplayAlerts = True  '打开警告信息
  51. Application.ScreenUpdating = True  '打开屏幕刷新
  52. End Sub


附示例文件。
注:将示例文件放入要处理的文件夹内,打开文件,启用宏后点击处理按钮即可。
处理程序.rar
2楼
wnianzhong
谢谢分享,学习了!
3楼
Lucy_Luk
C:\Users\user\Desktop\QQ截图20130906103322.jpg
運行出錯,說數字只能1-250之間,如何修改,tks~
4楼
icenotcool


免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap