Excel 如果表格范围中的单元格值等于;新";复制整行并将其作为值粘贴到第1页的下一个空单元格中
我试着做一件基本的事情,但做不好 我想计算表列(OldNew)中表2(新花名册)上的单元格的值“New”。如果有值,复制整行并将其添加到第1页(当前花名册)的表(当前花名册)中 以下是我正在使用的代码:Excel 如果表格范围中的单元格值等于;新";复制整行并将其作为值粘贴到第1页的下一个空单元格中,excel,vba,if-statement,copy,copy-paste,Excel,Vba,If Statement,Copy,Copy Paste,我试着做一件基本的事情,但做不好 我想计算表列(OldNew)中表2(新花名册)上的单元格的值“New”。如果有值,复制整行并将其添加到第1页(当前花名册)的表(当前花名册)中 以下是我正在使用的代码: For Each c In wb.Names("OldNew").RefersToRange.Cells If c.Value Like "New" Then On Error Resume Next Set Sou
For Each c In wb.Names("OldNew").RefersToRange.Cells
If c.Value Like "New" Then
On Error Resume Next
Set SourceTable = Worksheets("New Roster").ListObjects("NewRoster").DataBodyRange
Set DestinationTable = Worksheets("Current Roster").ListObjects("CurrentRoster").ListRows.Add
SourceTable.Copy
DestinationTable.Range.PasteSpecial xlPasteValues
End If
Next
这无休止地循环,不做我想做的事
以下是上下文的完整代码:
子表数据()
作为ListObject的Dim tbl
暗淡单元格作为范围
变暗rng As范围
将RangeName设置为字符串
将CellName设置为字符串
将wb作为工作簿,c作为范围,m
将ws1设置为工作表
变暗lr为长
作为ListObject的Dim lo
暗源表
暗淡的命运表
工作表(“新名册”)。激活
范围(“A1”)。选择
从一个表复制到另一个表
- 删除重复的声明和引用
- 只有当两个表的列数相同,并且表
的列标题为newfloster
时,这才有效OldNew
- 它是一个独立的版本,所以您可以按原样进行测试。稍后,您只需删除添加的行
- 如果要允许不区分大小写(允许新建、新建),可以在
函数中添加Instr
作为第四个参数vbTextCompare
- 忘记错误时的
。大约:它通常(专门)在一(几)行上使用,并通过错误转到0上的继续下一步
或一些错误处理“结束”,例如
如果出错,则
,其中将再次包含错误转到0上的
或其他
错误转到0上的
语句。还有很多。您应该确切地知道为什么要使用它
Sub copyFromTableToTable()
Dim wb As Workbook
Set wb = ThisWorkbook
With wb.Worksheets("New Roster").ListObjects("NewRoster")
Dim c As Range
Dim dest As Range
Dim hRow As Long
hRow = .HeaderRowRange.Row
For Each c In .ListColumns("OldNew").DataBodyRange
If InStr(1, c.Value, "New") > 0 Then
With wb.Worksheets("Current Roster").ListObjects("CurrentRoster")
' This doesn't work.
'Set dest = .ListRows.Add
.ListRows.Add
With .DataBodyRange
Set dest = .Rows(.Rows.Count)
End With
End With
dest.Value = .DataBodyRange.Rows(c.Row - hRow).Value
End If
Next c
End With
End Sub
使用
Range.AutoFilter
可能更容易。如何解释找不到的值?没有“新”。。。?
Sub copyFromTableToTable()
Dim wb As Workbook
Set wb = ThisWorkbook
With wb.Worksheets("New Roster").ListObjects("NewRoster")
Dim c As Range
Dim dest As Range
Dim hRow As Long
hRow = .HeaderRowRange.Row
For Each c In .ListColumns("OldNew").DataBodyRange
If InStr(1, c.Value, "New") > 0 Then
With wb.Worksheets("Current Roster").ListObjects("CurrentRoster")
' This doesn't work.
'Set dest = .ListRows.Add
.ListRows.Add
With .DataBodyRange
Set dest = .Rows(.Rows.Count)
End With
End With
dest.Value = .DataBodyRange.Rows(c.Row - hRow).Value
End If
Next c
End With
End Sub