0

我有一本工作簿,我试图在其中跟踪库存和销售的自行车。我有当前库存、1 月销售额、2 月销售额、3 月销售额、...、12 月销售额、2013 年总销售额的工作表。

在当前库存中,我有 A2 中的自行车制造商、B2 中的自行车型号、C2 中的自行车类型、D2 中的价格、E2 中的序列号、F2 中的销售日期和 G2 中的销售日期。在 G 列中,我有一个表单控件复选框。

我想要做的是当我单击复选框时,自行车及其所有信息都会被复制并粘贴到正确的工作表中(例如,如果它在 2013 年 8 月 13 日出售,它会被分类到 8 月销售工作表和 2013 年总计销售工作表)以及 2013 年总销售工作表。此外,我希望检查的行将颜色从黑色变为绿色。在此先感谢您的帮助!

4

2 回答 2

0

首先考虑使用常规 Cell 而不是 Checkbox(更简单更好)然后尝试下面的代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim checkedMark As String
Dim currentRow As Integer, lastRow As Integer
checkedMark = "X"

If Target.Rows.Count <> 1 Then
    Exit Sub
End If
If TypeName(Target.Value) <> "String()" Then
    Exit Sub
End If
If UCase(Target.Value) <> checkedMark Then
    Exit Sub
End If
If Target.Columns <> 7 Then
    Exit Sub
End If


currentRow = Target.Row

Range(Cells(currentRow, 1), Cells(currentRow, 7)).Copy

With Sheets(BD_SHEET)
    lastRow = .Range("A100000").End(xlUp).Row
    Cells(lastRow + 1, 1).PasteSpecial xlPasteValues
End With

With Cells(currentRow, 1).Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = 5296274
    .TintAndShade = 0
    .PatternTintAndShade = 0
End With
End Sub
于 2013-08-02T20:24:25.883 回答
0

确保您的复选框没有交叉到两个不同的行。一旦你确定了它,那么我会做这样的事情:

  1. 为所有复选框分配相同的宏。
  2. 在宏中,我将添加以下代码:

    Dim shp As Shape
    Dim rng As Range
    Dim currentRowNumber As Long
    
    Set shp = ActiveSheet.Shapes(Application.Caller)
    Set rng = shp.BottomRightCell
    currentRowNumber = rng.Row
    
    MsgBox "Currently, you are working on Row no " & currentRowNumber
    

获得行号后,您可以轻松找到值并相应地编写代码。

希望这可以帮助!

谢谢,V

于 2013-08-02T20:08:28.027 回答