【问题标题】:Pasting into last column of table粘贴到表格的最后一列
【发布时间】:2018-01-22 16:12:30
【问题描述】:

我一直在创建 VBA 代码来帮助我使用我使用的工作表,但我被困在某个点上。

代码查看当前工作表上的表格,在表格末尾添加一个新列,然后我让它复制工作表中的第一列(因为它具有格式和一些计算单元格)。这是我的编码完成的地方。理想情况下,我希望它获取复制的单元格并将它们粘贴到表格的新结束列中。

这是我目前所拥有的:

    Sub AddNewColumn()
  Application.ScreenUpdating = False
    Dim oSh As Worksheet
    Set oSh = ActiveSheet
    With oSh.ListObjects("Labour")
.ListColumns.Add
Range("Labour[[#All],[Column16]]").Select
    Selection.Copy

End With
  Application.ScreenUpdating = True
End Sub

(Labour 是当前表的名称)。 如果我能让它工作得很好,但我想我会遇到另一个问题。该表位于模板工作表上并包含在其中我有一个命令按钮来创建模板的副本(用于不同的任务)。然后,这将更改表的名称(Labour1 然后 Labour2 等,因为创建了新的工作表)。我如何让代码在新工作表上工作,因为我现在拥有的代码只是想链接回原始表(工党)。

【问题讨论】:

  • 如果这是您的实际缩进,您迟早可能会遇到错误。 VBA 编辑器具有用于控制缩进的工具。为什么不使用它们?
  • 嗨,约翰,注意到并更改了我的代码。非常感谢

标签: vba excel


【解决方案1】:

您实际上不需要将值从第一列复制到新创建的列,只需使用公式即可。我修改了你的代码:

Sub AddNewColumn()
  Application.ScreenUpdating = False
    Dim oSh As Worksheet
    Dim oList As ListObject
    Dim str As String

    Set oSh = ActiveSheet
    Set oList = oSh.ListObjects("Labour")

    With oList
            .ListColumns.Add
            str = .ListColumns(1).Name
            .ListColumns(.ListColumns.Count).DataBodyRange.FormulaR1C1 = "=[@[" & str & "]]"
    End With
End Sub

如果您需要实际值,而不是公式,您可以复制并粘贴特殊的最后一列。在结束之前添加:

With .ListColumns(.ListColumns.Count).DataBodyRange
    .Copy
    .PasteSpecial xlPasteValues
End With

这是您第一个问题的答案。不幸的是,我无法理解第二个。另外,我觉得你应该分开问。

【讨论】:

  • 您提供的代码确实将列插入到末尾,但它使用对第 1 列的引用填充列(它实际上并没有给我任何计算字段)。它帮助了我,所以我会尝试添加它,希望让它做我想做的事。非常感谢您的帮助
【解决方案2】:

好的,我已经调整了您的代码@MarcinSzaleniec,它似乎可以正常工作。

    Sub AddNewColumn()
    Application.ScreenUpdating = False
    Dim oSh As Worksheet
    Dim oList As ListObject
    Dim str As String

    Set oSh = ActiveSheet
    Set oList = oSh.ListObjects("Labour")

    With oList
            .ListColumns.Add
            str = .ListColumns(1).Name
            Range("Labour[[#All],[Column16]]").Select
            Selection.Copy
            .ListColumns(.ListColumns.Count).DataBodyRange.PasteSpecial xlPasteAll
    Application.ScreenUpdating = True
    End With
    End Sub

我需要的原因:

   Range("Labour[[#All],[Column16]]").Select
   Selection.Copy

是因为它是一个隐藏的列,并且空白位为空白,公式位为公式。

非常感谢大家的帮助。现在在这里问我问题的第二部分。

【讨论】:

    猜你喜欢
    • 2018-03-27
    • 2020-12-27
    • 1970-01-01
    • 2022-08-16
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多