我想根据一列中的值将单元格中的单元格复制到另一张中。问题是我想复制值而不是公式,但我无法使用Destination命令来处理Pastespecial。到目前为止,我有:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
Dim i, LastRow
LastRow = Range("A" & Rows.Count).End(xlUp).Row
Sheets("Available").Cells.ClearContents
For Each c In Range("A1:A" & LastRow)
If UCase(c.Offset(0, 1).Value) = "Not Sold" Then
Range("A" & c.Row & ":" & "G" & c.Row).Copy _
Destination:=Sheets("Available").Range("A" & Rows.Count) _
.End(xlUp).Offset(1)
End If
Next c
Target.Offset(1).Select
End Sub
我还想用值复制单元格上方的一些单元格,并将其添加到复制到新工作表的行的右侧。
任何帮助都会非常感激。
答案 0 :(得分:0)
首先让我指出一些我认为不起作用的事情,或者是一个好主意。
每次使用If UCase(c.Offset(0, 1).Value) = "Not Sold"
都会失败,因为您要转换为大写然后进行比较。你想要If Ucase(c.Offset(0, 1).Value) = "NOT SOLD"
其次,您将i
和LastRow
设置为Variants
,而不是Integers
,我认为这是您想要的。技术上不是问题,但我不喜欢未知的变量。你似乎也没有使用i
,除非我忽略了什么。
最后,为了准确找到最后一行,我会使用
lastRow = Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).row
这是找到我所知道的最后一行的最可靠方法,实际上是found right here on stack.
现在,对于实际的代码本身,这是我的建议。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean)
Dim i, LastRow as Integer
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = ActiveSheet
Set ws2 = Sheets("Available")
i = 1
LastRow = ws1.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
ws2.Cells.ClearContents
For Each c In Range(Cells(1,2), Cells(LastRow, 2))
If UCase(c.Value) = "NOT SOLD" Then
ws2.Range(ws2.Cells(i, 1), ws2.Cells(i, 7)).Value = ws1.Range( _
ws1.Cells(c.Row, 1), ws1.Cells(c.Row, 7)).Value
i = i + 1
End If
Next c
Target.Offset(1).Select
End Sub