我一直在创建一个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
(人工是当前表的名称)。 如果我能让这个工作变得很棒,那么我想我会遇到另一个问题。该表位于模板工作表上并包含在其中我有一个命令按钮来创建模板的副本(用于不同的任务)。这将改变表的名称(Labour1然后Labour2等,因为创建了新的工作表)。我如何让代码在新工作表上工作,因为我现在的代码只想链接回原始表(Labor)。
答案 0 :(得分: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 :(得分:0)
好的,我已经调整了你的代码@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
是由于它是一个隐藏在路上的列,并且空白位为空,公式位为公式。
非常感谢大家的帮助。现在在这里问我问题的第二部分。