无法让我的代码执行特殊粘贴
Unable to get my code to execute paste special
我有一个小的 VBA 代码可以从一个 sheet 复制一行并粘贴到另一个,它适用于粘贴但不适用于特殊粘贴,因为我只想粘贴值而不仅仅是粘贴。
这是我的代码,非常基础。请注意,将 pastespecial 更改为粘贴代码可以正常工作。
谢谢你的帮助
Private Sub CommandButton1_Click()
a = Worksheets("Inventory List Costing Review").Cells(Rows.Count, 1).End(xlUp).Row
For i = 10 To a
If Worksheets("Inventory List Costing Review").Cells(i, 19).Value = "Completed" Then
Worksheets("Inventory List Costing Review").Rows(i).Copy
Worksheets("Completed by Sales").Activate
b = Worksheets("Completed by Sales").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Completed by Sales").Cells(b + 1, 1).Select
ActiveSheet.PasteSpecial Paste:=xlPasteValues, operation:=xlNone
Worksheets("Inventory List Costing Review").Activate
End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Inventory List Costing Review").Cells(1, 1).Select
End Sub
以下应该有效(清理了沿途的一些混乱)。
尽管如果您只是从单元格复制数据,将值直接分配给目标单元格而不是 copy-pasting.
会更快
Private Sub CommandButton1_Click()
With Worksheets("Inventory List Costing Review")
a = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 10 To a
If .Cells(i, 19).Value = "Completed" Then
.Rows(i).Copy
b = Worksheets("Completed by Sales").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Completed by Sales").Cells(b + 1, 1).PasteSpecial Paste:=xlPasteValues, operation:=xlNone
End If
Next
Application.CutCopyMode = False
.Cells(1, 1).Select
End With
End Sub
PasteSpecial xlPasteValues
与赋值
快速修复
如果你坚持使用PasteSpecial
,在IF
子句中你可以使用:
Worksheets("Inventory List Costing Review").Rows(i).Copy
b = Worksheets("Completed by Sales").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Completed by Sales").Cells(b + 1, 1).PasteSpecial Paste:=xlPasteValues
但更好(更有效)的方法是:
b = Worksheets("Completed by Sales").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Completed by Sales").Rows(b + 1).Value = _
Worksheets("Inventory List Costing Review").Rows(i).Value
当 Application.CutCopyMode = False
和 ... Cells(1, 1).Select
不再需要时。
改进
- 如果你使用
Option Explicit
,它会'force'你限定所有变量(a
,b
)。
- 如果您另外限定工作簿和工作sheet,代码将变得非常可读。
- 由于代码可以从任何 sheet 上的命令按钮 运行,您可以给它一个合适的名称并将其放入 标准模块 .然后你可以很容易地在命令按钮的点击事件代码中调用它(位于sheet模块)。
标准模块Module1
Option Explicit
Sub updateSales()
Dim wb As Workbook
Set wb = ThisWorkbook ' The workbook containing this code.
Dim src As Worksheet
Set src = wb.Worksheets("Inventory List Costing Review")
Dim tgt As Worksheet
Set tgt = wb.Worksheets("Completed by Sales")
Dim a As Long
Dim b As Long
a = src.Cells(src.Rows.Count, 1).End(xlUp).Row
For i = 10 To a
If src.Cells(i, 19).Value = "Completed" Then
b = tgt.Cells(tgt.Rows.Count, 1).End(xlUp).Row
tgt.Rows(b + 1).Value = src.Rows(i).Value
End If
Next
End Sub
Sheet 模块例如Inventory List Costing Review
and/or Completed by Sales
Option Explicit
Private Sub CommandButton1_Click()
updateSales
End Sub
我有一个小的 VBA 代码可以从一个 sheet 复制一行并粘贴到另一个,它适用于粘贴但不适用于特殊粘贴,因为我只想粘贴值而不仅仅是粘贴。
这是我的代码,非常基础。请注意,将 pastespecial 更改为粘贴代码可以正常工作。
谢谢你的帮助
Private Sub CommandButton1_Click()
a = Worksheets("Inventory List Costing Review").Cells(Rows.Count, 1).End(xlUp).Row
For i = 10 To a
If Worksheets("Inventory List Costing Review").Cells(i, 19).Value = "Completed" Then
Worksheets("Inventory List Costing Review").Rows(i).Copy
Worksheets("Completed by Sales").Activate
b = Worksheets("Completed by Sales").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Completed by Sales").Cells(b + 1, 1).Select
ActiveSheet.PasteSpecial Paste:=xlPasteValues, operation:=xlNone
Worksheets("Inventory List Costing Review").Activate
End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Inventory List Costing Review").Cells(1, 1).Select
End Sub
以下应该有效(清理了沿途的一些混乱)。 尽管如果您只是从单元格复制数据,将值直接分配给目标单元格而不是 copy-pasting.
会更快Private Sub CommandButton1_Click()
With Worksheets("Inventory List Costing Review")
a = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 10 To a
If .Cells(i, 19).Value = "Completed" Then
.Rows(i).Copy
b = Worksheets("Completed by Sales").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Completed by Sales").Cells(b + 1, 1).PasteSpecial Paste:=xlPasteValues, operation:=xlNone
End If
Next
Application.CutCopyMode = False
.Cells(1, 1).Select
End With
End Sub
PasteSpecial xlPasteValues
与赋值
快速修复
如果你坚持使用PasteSpecial
,在IF
子句中你可以使用:
Worksheets("Inventory List Costing Review").Rows(i).Copy
b = Worksheets("Completed by Sales").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Completed by Sales").Cells(b + 1, 1).PasteSpecial Paste:=xlPasteValues
但更好(更有效)的方法是:
b = Worksheets("Completed by Sales").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Completed by Sales").Rows(b + 1).Value = _
Worksheets("Inventory List Costing Review").Rows(i).Value
当 Application.CutCopyMode = False
和 ... Cells(1, 1).Select
不再需要时。
改进
- 如果你使用
Option Explicit
,它会'force'你限定所有变量(a
,b
)。 - 如果您另外限定工作簿和工作sheet,代码将变得非常可读。
- 由于代码可以从任何 sheet 上的命令按钮 运行,您可以给它一个合适的名称并将其放入 标准模块 .然后你可以很容易地在命令按钮的点击事件代码中调用它(位于sheet模块)。
标准模块Module1
Option Explicit
Sub updateSales()
Dim wb As Workbook
Set wb = ThisWorkbook ' The workbook containing this code.
Dim src As Worksheet
Set src = wb.Worksheets("Inventory List Costing Review")
Dim tgt As Worksheet
Set tgt = wb.Worksheets("Completed by Sales")
Dim a As Long
Dim b As Long
a = src.Cells(src.Rows.Count, 1).End(xlUp).Row
For i = 10 To a
If src.Cells(i, 19).Value = "Completed" Then
b = tgt.Cells(tgt.Rows.Count, 1).End(xlUp).Row
tgt.Rows(b + 1).Value = src.Rows(i).Value
End If
Next
End Sub
Sheet 模块例如Inventory List Costing Review
and/or Completed by Sales
Option Explicit
Private Sub CommandButton1_Click()
updateSales
End Sub