如果我忘了来时的路 2022-11-26 14:09 采纳率: 100%
浏览 40
已结题

VBA怎么把工作簿A中的第N列,复制到工作簿B中的第N列。

问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图
我的解答思路和尝试过的方法
我想要达到的结果 VBA怎么把工作簿A中的第N列,复制到工作簿B中的第N列。
  • 写回答

3条回答 默认 最新

  • Check_Const 2022-11-27 13:16
    关注

    好像需求描述还有些二义,例如是整列覆盖?还是在目标表对应列最后一行追加?
    是两个独立表格文件两个“工作簿”?
    还是可以理解为同一个文件(工作簿)中的两个不同“工作表”?
    有没有需指定“工作表”中Sheet?

    假设两个独立EXCEL表格文件(工作簿)的工作表均为Sheet1
    可以参考如下代码(在MS Office Excel测试通过)按实际需求进一步调整

    1. Sub copy_AToB()
    2. Dim Wbook1 As Workbook, Wbook2 As Workbook
    3. Dim path_A, path_B
    4. Dim ABookName, BBookName '假设两个独立表格文件
    5. Dim aCol As Integer, bCol As Integer
    6. Application.ScreenUpdating = False '暂停刷新
    7. path_A = "D:\"
    8. ABookName = "checkA.xlsx" 'A表格文件名称
    9. path_B = "E:\"
    10. BBookName = "checkB.xlsx" 'B表格文件名称
    11. aCol = 3 'A表格的源列号 按需求灵活调整
    12. bCol = 6 'B表格的目标列号
    13. If ABookName = BBookName Then
    14. MsgBox "两个文件名称不能相同", vbInformation, "提示"
    15. Exit Sub ‘若不符合逻辑则退出
    16. End If
    17. ABookName = path_A & ABookName '加路径组合
    18. BBookName = path_B & BBookName
    19. If Dir(ABookName, 16) = vbNullString Then '检查文件是否存在
    20. MsgBox "未找到 " & ABookName, vbInformation, "提示"
    21. Exit Sub
    22. End If
    23. If Dir(BBookName, 16) = vbNullString Then
    24. MsgBox "未找到 " & BBookName, vbInformation, "提示"
    25. Exit Sub
    26. End If
    27. '文件存在的条件为 Not Dir(ABookName, 16) = vbNullString
    28. Set Wbook1 = Workbooks.Open(ABookName) '打开A文件
    29. Set Wbook2 = Workbooks.Open(BBookName) '打开B文件
    30. Wbook1.Sheets(1).Activate
    31. ActiveSheet.Columns(aCol).Copy '复制列
    32. Wbook2.Sheets(1).Activate
    33. ActiveSheet.Columns(bCol).PasteSpecial '拷贝至目标列
    34. '清空剪贴板,避免关闭文件命令时弹出提示类似“在剪贴板上有大量信息。是否保留其内容,以便此后粘贴到其他程序中?”
    35. Application.CutCopyMode = False '清空
    36. Wbook1.Close '关闭A文件
    37. Wbook2.Save '保存B文件
    38. 'Wbook2.SaveAs Filename:="E:\checkB_New.xlsx" '此句测试另存为新文件
    39. Wbook2.Close '关闭B文件
    40. MsgBox "从" & ABookName & "拷贝至" & BBookName & "完成", vbInformation, "提示"
    41. Application.ScreenUpdating = True
    42. End Sub

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    1人已打赏

    1.在目标表对应列最后一行追加
    2.是两个独立表格文件两个“工作簿”
    3.有需指定“工作表”中Sheet1
    4.将A工作簿中的sheet1新增数据n列,添加到B工作簿的i列。其中n和i是变量。
    5.简单来说就是把A工作簿下的sheet1表格新增的一列数据追加到B工作簿下的sheet1表格。
    6在目标表格追加
    7.并且AB工作簿下的sheet表列数不同,需要读取两个表的已有列数,从而进行追加

    回复
    Check_Const 2022-11-28 15:10

    更新列末尾追加方式

    1. Sub copy_AToB()
    2. '假设两个独立表格文件,源表复制列内容后,在目标列后面粘贴
    3. Dim Wbook1 As Workbook, Wbook2 As Workbook
    4. Dim path_A, path_B '测试路径
    5. Dim ABookName, BBookName '测试文件名称
    6. Dim aCol As Integer, bCol As Integer '列号
    7. Dim i As Integer '行数
    8. Dim j As Integer '列数
    9. Dim k As Integer '搜索某列最后一个非空单元格行号
    10. Application.ScreenUpdating = False '暂停刷新
    11. 'Application.DisplayAlerts = False '使不弹出询问 是否替换目标单元格内容
    12. path_A = "D:\"
    13. ABookName = "checkA.xlsx" 'A表格文件名称
    14. path_B = "E:\"
    15. BBookName = "checkB.xlsx" 'B表格文件名称
    16. aCol = 3 'A表格的源列号 按需求灵活调整
    17. bCol = 6 'B表格的目标列号
    18. If ABookName = BBookName Then
    19. MsgBox "两个文件名称不能相同", vbInformation, "提示"
    20. Exit Sub
    21. End If
    22. ABookName = path_A & ABookName '加路径组合
    23. BBookName = path_B & BBookName
    24. If Dir(ABookName, 16) = vbNullString Then '检查文件是否存在
    25. MsgBox "未找到 " & ABookName, vbInformation, "提示"
    26. Exit Sub
    27. End If
    28. If Dir(BBookName, 16) = vbNullString Then
    29. MsgBox "未找到 " & BBookName, vbInformation, "提示"
    30. Exit Sub
    31. End If
    32. '文件存在的条件为 Not Dir(ABookName, 16) = vbNullString
    33. Set Wbook1 = Workbooks.Open(ABookName) '打开A文件
    34. Wbook1.Sheets(1).Activate
    35. '取行数
    36. i = Wbook1.Sheets(1).UsedRange.Cells(Sheets(1).UsedRange.Rows.Count, 1).Row
    37. '取列数
    38. j = Wbook1.Sheets(1).UsedRange.Cells(1, Sheets(1).UsedRange.Columns.Count).Column
    39. If i = 1 And IsEmpty(Cells(1, aCol).Value) Then
    40. MsgBox BBookName & " 第1行第" & aCol & "列没有数据", vbExclamation, "提示"
    41. Wbook1.Close '关闭A文件
    42. Exit Sub
    43. End If
    44. 'ActiveSheet.Columns(aCol).Copy '整列复制,这方式粘贴至目标表可整列覆盖,较少用
    45. k = ActiveSheet.Cells(Rows.Count, aCol).End(xlUp).Row '源表对应列最后一个非空单格行号
    46. 'Cells(Rows.Count, 1) 表示找第1列最后一个非空单格
    47. 'End(xlUp) 表示向上搜索,可写为End(3)
    48. '复制源表对应列第1行至最后行的内容
    49. '若第一行为列名称不复制,则调整行号为2开始,即下方“Cells(1, aCol)”改为“Cells(2, aCol)”
    50. With Worksheets(1)
    51. .Range(.Cells(1, aCol), .Cells(k, aCol)).Copy
    52. End With
    53. Set Wbook2 = Workbooks.Open(BBookName) '打开B文件
    54. Wbook2.Sheets(1).Activate
    55. 'ActiveSheet.Columns(bCol).PasteSpecial '拷贝至目标列 整列覆盖方式较少用
    56. k = ActiveSheet.Cells(Rows.Count, bCol).End(xlUp).Row '目标工作表对应列最后一个非空单格行号
    57. If (k = 1 And Not IsEmpty(Cells(1, bCol).Value)) Or k > 1 Then
    58. '若返回非空单元格行号为“1”,且对应列第1个单元格不为空
    59. '或者非空单元格行号大于“1”
    60. k = k + 1 '调整将要粘贴的起始空行号+1
    61. End If
    62. ActiveSheet.Cells(k, bCol).PasteSpecial '对应目标列非空单元格的下一行单元格位置粘贴
    63. '清空剪贴板,避免关闭文件命令时弹出提示类似“在剪贴板上有大量信息。是否保留其内容,以便此后粘贴到其他程序中?”
    64. Application.CutCopyMode = False '清空
    65. Wbook1.Close '关闭A文件
    66. Wbook2.Save '保存B文件
    67. 'Wbook2.SaveAs Filename:="E:\checkB_New.xlsx" '此句测试另存为新文件
    68. Wbook2.Close '关闭B文件
    69. MsgBox "将 " & ABookName & " (源表共" & i & "行" & j & "列)的第" & aCol & "列拷贝至 " & BBookName & " 第" & bCol & "列完成", vbInformation, "提示"
    70. Application.ScreenUpdating = True
    71. End Sub

    回复
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 12月5日
  • 已采纳回答 11月28日
  • 创建了问题 11月26日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部