Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将单词Winner插入O列的子项_Vba_Excel - Fatal编程技术网

Vba 将单词Winner插入O列的子项

Vba 将单词Winner插入O列的子项,vba,excel,Vba,Excel,当用户从下拉列表中选择单词Jackpot时,尝试将单词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 <>

当用户从下拉列表中选择单词Jackpot时,尝试将单词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
Private子工作表\u selection更改(ByVal目标作为范围)
对于x=6到88
如果单元格(x,14).Value=“Jackpot”,则
单元格(x,15)。Value=“Winnner”
ElseIf细胞(x,14)。那么值为“高”
单元格(x,15)。Value=“”
如果结束
下一个x
端接头
我遇到的问题是,当用户使用任何文本填充O列时,该过程不应覆盖文本条目

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

如果使用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

偏移量是错误的,但一开始我用它去了其他地方。。。。应该很容易从那里找到您要查找的事件宏,而不是事件宏

只要工作表上的任何值发生更改(但不是通过公式),就会触发工作表更改。因此,如果要使用Sub更改O列中的值,则需要在进行更改时暂时挂起事件处理,否则工作表更改可能会自行运行

当工作表上的更改触发工作表更改时,您需要确定目标(接收更改的单元格)是否在您关注的单元格范围内。这是通过以下步骤完成的。在下面的示例中,目标中的一个或多个单元格必须位于第6行和第88行之间的N列中。如果有一个或多个单元格,则使用a循环通过满足条件的每个单元格

每个匹配的单元格都按顺序检查其值。该方法可以轻松处理多种可能的结果

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

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
选项显式
私有子工作表_更改(ByVal目标作为范围)
暗x等长
如果不相交(目标,列(14),范围(“6:88”))则为零
错误转到bm_安全出口
Application.EnableEvents=False
作为射程
对于Intersect中的每一项胜利(目标、第(14)列、范围(“6:88”))
选择案例LCase(win.Value2)
案例“头奖”

win.Offset(0,1)=“Winnner”工作表\u SelectionChange表示每次单击工作表中的任意位置时,宏运行以及所有要替换的内容。为了让宏不改变用户改变的值,你必须用一些东西来标识该值,例如,如果该单元格不是空的,并且它不是什么东西,那么这意味着不需要有人在技术上改变偏移量,我只是比必要的时候更喜欢。您可以直接声明单元格值。答案解释得很好!