VBA求助:合并Sheet1与Sheet3数据至记事本仅显示Sheet3数据
解决VBA合并Sheet1和Sheet3数据到记事本仅显示Sheet3的问题
嘿,我一眼就看出问题出在哪了!你单独运行每个工作表的导出脚本时正常,但合在一起只显示Sheet3的数据,核心原因是文件写入模式用错了——如果每次都用Open 路径 For Output打开文件,第二次打开会直接覆盖掉第一次写入的内容,最后自然只剩Sheet3的数据啦。
下面给你两种靠谱的解决思路,附带修改后的代码示例:
思路1:先把所有数据收集到同一个字符串,再一次性写入
这种方法更高效,先把Sheet1和Sheet3的内容都拼接成一个大字符串,最后只写入一次文件,就不会有覆盖问题了:
Sub CombineSheetsToTxt() Dim strAll As String Dim ws As Worksheet Dim rng As Range Dim cell As Range ' 收集Sheet1的数据 Set ws = ThisWorkbook.Worksheets("Sheet1") Set rng = ws.UsedRange For Each cell In rng strAll = strAll & cell.Value & vbTab ' 用制表符分隔,可换成你需要的分隔符 Next cell strAll = strAll & vbCrLf ' 工作表之间加换行 ' 收集Sheet3的数据 Set ws = ThisWorkbook.Worksheets("Sheet3") Set rng = ws.UsedRange For Each cell In rng strAll = strAll & cell.Value & vbTab Next cell ' 写入记事本 Dim filePath As String filePath = "C:\你的文件路径\合并数据.txt" ' 替换成你要保存的路径 Open filePath For Output As #1 Print #1, strAll Close #1 MsgBox "合并完成!" End Sub
思路2:第一次写入用Output创建文件,第二次用Append追加内容
如果想保留你原来分工作表处理的逻辑,只需要修改文件打开的模式:
Sub CombineSheetsToTxt_Append() Dim str As String Dim filePath As String Dim ws As Worksheet Dim rng As Range Dim cell As Range filePath = "C:\你的文件路径\合并数据.txt" ' 替换成你的路径 ' 处理Sheet1,用Output创建/覆盖文件(第一次写入) Set ws = ThisWorkbook.Sheets("Sheet1") str = "" Set rng = ws.UsedRange For Each cell In rng str = str & cell.Value & vbTab Next cell Open filePath For Output As #1 Print #1, str Close #1 ' 处理Sheet3,用Append追加内容(不会覆盖原有数据) Set ws = ThisWorkbook.Sheets("Sheet3") str = "" Set rng = ws.UsedRange For Each cell In rng str = str & cell.Value & vbTab Next cell Open filePath For Append As #1 Print #1, vbCrLf & str ' 加个换行分隔两个工作表的数据 Close #1 MsgBox "合并完成!" End Sub
关键知识点解释
Open ... For Output:会创建新文件,如果文件已存在则完全覆盖原有内容,适合第一次写入。Open ... For Append:打开已存在的文件,把新内容追加到文件末尾,不会覆盖原有内容,适合后续的追加操作。
你可以根据自己原来的代码逻辑选择其中一种方法,把你原来处理单个工作表的代码替换到示例里对应的位置就可以啦!
内容的提问来源于stack exchange,提问作者user6314105
相关产品推荐
相关产品推荐

