我有一个非常基本的知识和VBA但是由于使用其他编程语言进行编码,我想一想,如果我可以使用vba-excel中的特定列名复制粘贴数据。我到目前为止使用下面的代码但是想要克服,因为我经常陷入困境。
ThisWorkbook.Worksheets("Sheets2").Activate
lastrow = Worksheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row + 1
Range("B2:B" & lastrow).Copy Worksheets("Sheet1").Range("a65536").End(xlUp).Offset(1, 2)
Range("A2:A" & lastrow).Copy Worksheets("Sheet1").Range("a65536").End(xlUp).Offset(1, 1)
Application.CutCopyMode = False
这会将Sheet2中的A和B列复制到Sheet1中的B和C列。我现在可以做一些像
这样的事情Sheet2.colname.copy Sheet1.colname.offset
我很好奇,感谢任何帮助。感谢。
答案 0 :(得分:2)
我经常在复杂的代码中引用Const
所指的列,因此我可以通过' name'来引用它们。
Const ItemNumCol = 1
Const DescCol = 2
Const CostCol = 3
etc...
它不是自动的,但通过在全球范围内声明它们,它可以最大限度地减少重新排列列的痛苦,并且可以防止我每两分钟重新回到电子表格中。
使用示例
Dim ws1 as Worksheet
Dim ws2 as Worksheet
Set ws1 = ThisWorkbook.Worksheets("Sheets1")
Set ws2 = ThisWorkbook.Worksheets("Sheets2")
LastRow = ws2.UsedRange.Rows.Count + 1
ws.range(cells(2,DescCol),cells(LastRow,DescCol).copy ws1.range(ws1.UsedRange.Rows.Count + 1, DescCol)
你可能需要翻转" Row,Col" Cells()
中的引用,我永远不会记得它们走哪条路,但VBE IDE中的IntelliSense会告诉你。
答案 1 :(得分:1)
事实上,如果你只想使用名字,你就不能这样做,也许在表格中(选择你的专栏并添加一个数组)但不确定......
使用这样的东西:
Sheet2.colname.copy Sheet1.colname.offset
你可以使用:
Sheet2.columns(index).copy Sheet1.columns(index).offset
索引是从1开始的数字,您可以使用简单的For结构找到它,然后将结果注入副本说明中! ;)
这是一种方法:
Sub MasterCopy()
Copy_Columns 0, 0
End Sub
这是一个例程,它将帮助您使用下面的函数(如果您只想在一个例程中将它们联合起来,则可以重用参数)
Sub Copy_Columns(ByVal HorizontalOffset As Integer, ByVal VerticalOffset As Integer)
Dim ColCopy As Integer
Dim ColPaste As Integer
ColCopy = GetColName("SheetCopy", "ColToCopy")
ColPaste = GetColName("SheetPaste", "ColToPaste")
Sheets("SheetCopy").Columns(ColCopy).Copy Sheets("SheetPaste").Columns(ColPaste).Offset(VerticalOffset, HorizontalOffset)
End Sub
因此,您可以在任何地方使用该功能在特定工作表中按名称查找列
Public Function GetColName(ByVal SheetName As String, ByVal ColName As String)
For j = 1 To Sheets(SheetName).Cells(1, 1).End(xlToRight).Column
If LCase(Sheets(SheetName).Cells(1, j)) <> LCase(Column_Name) Then
Else
GetColName = j
Exit For
End If
Next j
If IsEmpty(GetColName) Then GetColName = 0
End Function
享受! ;)