【问题标题】:If statement that only performs action when selection is within a specific column如果仅在选择在特定列中执行操作的语句
【发布时间】:2019-04-29 11:29:48
【问题描述】:

我正在尝试完成此宏,该宏将打开另一个工作簿,将选定的单元格复制并粘贴到另一个工作簿中。只有在选择列中时才执行此操作,只有在选择包含数据时才执行此操作。

如果选择包含数据部分很简单,但是我如何声明如果选择不在 A 列内,那么 MsgBox("Please select data")

if语句到此为止,还需要上面直接提到的部分。

'Warns if no QN#s are selected
If Selection = "" Then
MsgBox ("Please Select Your QN#s Before Running This Macro")
Exit Sub
End If

【问题讨论】:

  • 选择的是单个单元格吗?
  • 选择可以是多个单元格。我弄清楚了我质疑的部分,但是现在我实际上在识别多项选择是否为空(“”)时遇到了问题。有没有办法让它认识到这一事实,以便如果有人突出显示 A 列中的多个空白单元格,它将运行 msgbox?
  • 仅在选择具有数据 i>时才有意思?选择可以跨越多列 - 那么,您需要严格的一列还是允许有多列,但必须与列 A 有交集?

标签: excel vba


【解决方案1】:

这似乎适用于识别单元格是否在某个列中。

If Not Intersect(Selection, Range("A:A")) Is Nothing Then
'Proceed
Else
MsgBox ("Please Select Your QN#s Before Running This Macro")
Exit Sub
End If

【讨论】:

    【解决方案2】:

    为什么不使用 Worksheet_SelectionChange?

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
        If Target.Column <> 1 Then
            MsgBox "Please Select Your QN#s Before Running This Macro", vbOKOnly, "Data Selection"
        Else
            RunMacro
        End If
    
    End Sub
    

    【讨论】:

      【解决方案3】:

      使用这种代码模式。这只是处理选择而不是检测更改。

      Dim a As Integer
      Dim b As Integer
      Dim c As String
      a = Selection.Row
      b = Selection.Rows.Count - 1
      c = "A" & a & ":" & "A" & a + b
      If ((Selection.Column = 1) And (WorksheetFunction.CountA(Range(c)) > 0)) Then
      
      MsgBox "ready to go"
      
      End If
      

      在上面的代码中,将考虑带有数据的隐藏行。 合并的单元格被认为是一个有值的单元格,其他的都是空白的(例如:当您合并 A2:​​A5 时,您有 3 个空白单元格)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-05
        相关资源
        最近更新 更多