将单词“获胜者”插入 O 列的 Sub



当用户从下拉列表中选择"大奖"一词时,尝试将单词"Winner"插入"O列

"
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    For x = 6 To 88
        If Cells(x, 14).Value = "Jackpot" Then
            Cells(x, 15).Value = "Winnner"
        ElseIf Cells(x, 14).Value <> "High" Then 
            Cells(x, 15).Value = " "
        End If
    Next x
End Sub

我遇到的问题是,当用户用任何文本填充 O 列时,该过程不应覆盖文本条目。

我不知道如何编写一个VBA代码,使文本条目保持不变,并且不让过程覆盖它。

您要

查找的事件宏是Worksheet_Change,而不是Worksheet_SelectionChange事件宏。

每当工作表上的任何值更改(但不是由公式更改)时,都会触发Worksheet_Change,因此,如果要使用 Sub 更改 O 列中的值,则需要在进行更改时暂时暂停事件处理,否则Worksheet_Change可能会尝试在其自身上运行。

当工作表上的更改触发Worksheet_Change时,您需要确定目标(接收更改的一个或多个单元格)是否在您关注的单元格范围内。这是使用相交方法完成的。在下文中,Target 中的一个或多个单元格必须位于第 6 行和第 88 行之间的第 N 列中。如果有一个或多个,则每个...Next 语句用于遍历满足条件的每个单元格。

每个匹配的单元格都按顺序检查其值。"选择案例"语句可轻松处理多种可能的结果。

将上面讨论的所有要点放在一起,您应该最终得到如下所示的代码。

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim x As Long
    If Not Intersect(Target, Columns(14), Range("6:88")) Is Nothing Then
        On Error GoTo bm_Safe_Exit
        Application.EnableEvents = False
        Dim win As Range
        For Each win In Intersect(Target, Columns(14), Range("6:88"))
            Select Case LCase(win.Value2)
                Case "jackpot"
                    win.Offset(0, 1) = "Winnner"  '<~~ ?? spelling...??
                Case "high"
                    ' do nothing...?
                Case Else
                    win.Offset(0, 1).ClearContents
            End Select
        Next win
    End If
bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

我添加了选项代码表顶部的显式语句¹。这将要求您在使用变量之前声明变量。

我看到 N6:N88 填充了数据验证下拉列表。


¹ 在 VBE 的工具中设置需要变量声明 ► 选项 ► 编辑器属性页将放置选项每个新创建的代码表顶部的显式语句。这将避免愚蠢的编码错误,如拼写错误,并影响您在变量中使用正确的变量类型声明。不带声明的动态创建的变量都是变体/对象类型。使用选项显式是被广泛认为是"最佳实践"。

如果您使用 activeX 控件组合列表,则可以为其分配一个将在"更新"上运行的宏

检查这个

 Private Sub ComboBox1_Change()
     If ComboBox1.Value = "JackPot" Then
         Range("o1").Offset(0, 1).Value = "Winner"
     End If
 End Sub

 Private Sub ComboBox1_DropButtonClick()
      With Me.ComboBox1
          .AddItem "JackPot"
          .AddItem "high"
      End With
 End Sub

偏移是错误的,但我一开始带着它去了其他地方......应该很容易让你在那里找出表格

最新更新