【问题标题】:Copying a cell value based on a checkbox checked根据选中的复选框复制单元格值
【发布时间】:2014-03-20 13:26:16
【问题描述】:

这是我用来将数据从 travelrequest 表上的表单复制到 travellog 表的代码:

    Sub Submit()

         Dim refTable As Variant, trans As Variant
         refTable = Array("B = L5", "C = C5", "D=G5", "E=C10", "F=C9", "G=I9", "H=I10",      "I=C13", "J=C14", "K=C15", "L=C16", "M=C17", "N=C18", "O=I13", "P=I14", "Q=I15", "R=I16", "S=I17", "W=H20")

 Dim Row As Long
    Row = Worksheets("TravelLog").UsedRange.Rows.Count + 1
    For Each trans In refTable
        Dim Dest As String, Field As String
        Dest = Trim(Left(trans, InStr(1, trans, "=") - 1)) & Row
        Field = Trim(Right(trans, Len(trans) - InStr(1, trans, "=")))
        Worksheets("TravelLog").Range(Dest).Value = Worksheets("TravelRequest").Range(Field).Value
    Next

End Sub

现在我有 3 个表示“是”的单元格和 3 个表示“否”的单元格,每个单元格旁边都有一个 activeX 复选框。

当用户填写表单时,我也希望能够复制复选框结果,所以如果用户选择是、否、是,那么我希望它们进入下一张表上的 3 个单独的单元格。

因此,就像上面的代码一样,需要将其信息复制到一个新行中。

新的更新代码运行良好!

Sub Submit()

Dim refTable As Variant, trans As Variant
refTable = Array("B = L5", "C = C5", "D=G5", "E=C10", "F=C9", "G=I9", "H=I10", "I=C13", "J=C14", "K=C15", "L=C16", "M=C17", "N=C18", "O=I13", "P=I14", "Q=I15", "R=I16", "S=I17", "W=H20")
Dim Row As Long
Row = Worksheets("TravelLog").UsedRange.Rows.Count + 1

For Each trans In refTable
    Dim Dest As String, Field As String
    Dest = Trim(Left(trans, InStr(1, trans, "=") - 1)) & Row
    Field = Trim(Right(trans, Len(trans) - InStr(1, trans, "=")))
    Worksheets("TravelLog").Range(Dest).Value = Worksheets("TravelRequest").Range(Field).Value
Next

If Worksheets("TravelRequest").CheckBox1.Value Then
    Worksheets("TravelLog").Range("T" & Row).Value = "Yes"
Else
    Worksheets("TravelLog").Range("T" & Row).Value = "No"
End If

If Worksheets("TravelRequest").CheckBox2.Value Then
    Worksheets("TravelLog").Range("U" & Row).Value = "Yes"
Else
    Worksheets("TravelLog").Range("U" & Row).Value = "No"
End If

If Worksheets("TravelRequest").CheckBox3.Value Then
    Worksheets("TravelLog").Range("V" & Row).Value = "Yes"
Else
    Worksheets("TravelLog").Range("V" & Row).Value = "No"
End If

End Sub

【问题讨论】:

  • 您实际上不需要发布修改后的代码。

标签: vba excel


【解决方案1】:

每个复选框将自动命名为CheckBox#,其中# 是创建它的编号。如果您在“开发人员”选项卡中打开设计模式,然后单击复选框。它会告诉您编辑栏左侧的复选框的名称。您也可以在此处更改名称。

之后,您可以通过在 For 循环之前或之后立即执行此操作来确定它是否被检查。

Worksheets("TravelLog").Range("T" & Row).Value = Worksheets("TravelRequest").DrewsCheckBox.Value

如果选中,则T 列中的单元格将显示True,如果未选中它将显示False。如果您希望它在 TravelLog 表上显示除 TrueFalse 以外的其他内容,那么您可以这样做

If Worksheets("TravelRequest").DrewsCheckBox.Value Then
    Worksheets("TravelLog").Range("T" & Row).Value = "Yes"
Else
    Worksheets("TravelLog").Range("T" & Row).Value = "No"
End If

【讨论】:

  • 如果我有 3 个复选框,我需要创建 3 个这样的代码吗?
  • @user3438974 是的,将T 替换为您希望它转到的列,将DrewsCheckBox 替换为您要比较的复选框的名称。
  • 我把你的代码放在 FOR 语句之前和之后,两次尝试都说需要对象 - 调试 If CheckBox1.Value Then
  • 改用If Worksheets("TravelRequest").CheckBox1.Value Then
  • 是的,有效!我更新了上面的代码,以便人们可以使用它。
猜你喜欢
  • 1970-01-01
  • 2020-03-13
  • 2017-01-28
  • 2016-03-03
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 2013-03-09
  • 2021-02-21
相关资源
最近更新 更多