【问题标题】:Checkbox that copies and pastes selected rows into different sheet将所选行复制并粘贴到不同工作表中的复选框
【发布时间】:2015-10-23 21:50:02
【问题描述】:

我试图找出如何通过单击复选框将三行从一张纸复制到另一张纸。我正在使用来自here 的代码:

Private Sub CheckBox1_Click()
Dim SrcRange As Range, TrgRange As Range

   Set SrcRange = Worksheets("Data Sheet").[B1]
   Set TrgRange = Worksheets("Sheet1").[C1]

   If CheckBox1 Then
       TrgRange = SrcRange
   Else
       TrgRange = ""
   End If
End Sub

这是我目前用于此过程的代码:

Private Sub CheckBox1_Click()
Dim SrcRange As Range, TrgRange As Range

   Set SrcRange = Worksheets("Data Sheet").Range("A1:E1")
   Set TrgRange = Worksheets("Sheet1").Range("A1:E1")

   Set SrcRange = Worksheets("Data Sheet").Range("A2:E2")
   Set TrgRange = Worksheets("Sheet1").Range("A2:E2")

   Set SrcRange = Worksheets("Data Sheet").Range("A3:E3")
   Set TrgRange = Worksheets("Sheet1").Range("A3:E3")

   If CheckBox1 Then
       TrgRange = SrcRange
   Else
       TrgRange = ""
   End If
End Sub

使用此代码时不会提供任何错误,但是不会将任何数据复制并粘贴到所选工作表中。

【问题讨论】:

  • 谢谢戴夫!非常感谢您的快速响应,祝您周末愉快。
  • 我假设戴夫的回答有效,这很好。我很难让CheckBox1 对任何事情进行评估。我查看了link,发现我可以使用ActiveSheet.Shapes("Check Box 1").OLEFormat.Object.Value = 1 作为解决方法。
  • 其实戴夫,有没有办法在同一个子框中选择多个特定的行?
  • 是的,例如,在我的回答中Worksheets("Data Sheet").Range("A1:E3") 影响三行。范围从 A1 到 E3。
  • 对 Alex 感到抱歉,是的,这是您和 coder 我都提供的答案。有用。谢谢!

标签: excel vba checkbox


【解决方案1】:

使用下面的子

 Sub CheckBox1_Click()

   Dim SrcRange As Range
   Dim TrgRange As Range

    If CheckBox1 = 1 Then
        Set SrcRange = Worksheets("Data Sheet").Range("A1:E3")
        Set TrgRange = Worksheets("Sheet1").Range("A1:E3")

        SrcRange.Copy
        TrgRange.PasteSpecial _
        Paste:=xlPasteValues

    End If

End Sub

【讨论】:

    【解决方案2】:

    我想你想用:

    If CheckBox1 Then
        TrgRange = SrcRange.Value
    Else
        TrgRange = ""
    End If
    

    但我不确定为什么在进入这部分代码之前要更改范围三遍,我相信这将成为另一个问题...

    【讨论】:

    • 我试图选择三个不同的行,并注意到执行时只提供了最后一行
    【解决方案3】:

    您的问题是您为 TrgRange 变量分配了另一个 Range 变量,而不是 Range 变量中的值。 SrcRange 对您选择的范围的引用。 尝试这样的方法来复制值:

    TrgRange.Copy
    SrcRange.Paste
    

    【讨论】:

      【解决方案4】:

      看起来您错过了原始解决方案的关键部分。

      本质上,原来的解决方案是:

      'TrgRange = SrcRange 
      Worksheets("Sheet1").[C1] = Worksheets("Data Sheet").[B1]
      

      在你的情况下会转化为:

      'trailing .Value is required for Ranges
      Worksheets("Sheet1").Range("A1:E1") = Worksheets("Data Sheet").Range("A1:E1").Value
      Worksheets("Sheet1").Range("A2:E2") = Worksheets("Data Sheet").Range("A2:E2").Value
      Worksheets("Sheet1").Range("A3:E3") = Worksheets("Data Sheet").Range("A3:E3").Value
      

      可以简化为:

      Worksheets("Sheet1").Range("A1:E3") = Worksheets("Data Sheet").Range("A1:E3").Value
      

      【讨论】:

      • 感谢您的分解。确实有助于清理代码。
      猜你喜欢
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 2019-09-21
      • 2015-04-28
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多