如何取消选择以前在VBA Excel中选择的范围

如何取消选择以前在VBA Excel中选择的范围,vba,excel,Vba,Excel,我创建了一个组合框,允许修改选定范围内某些单元格的内容。在组合框中做出选择后,我想取消选择之前选择的范围。我试了好几次,但都没成功。最后,我尝试在子组合框1\u Change()结束之前调用另一个子组合框,但它也不起作用。有什么建议吗 Private Sub ComboBox1_Change() Dim operatore As String Dim op1 As String Dim op2 As String Dim trovato As Integer

我创建了一个组合框,允许修改选定范围内某些单元格的内容。在组合框中做出选择后,我想取消选择之前选择的范围。我试了好几次,但都没成功。最后,我尝试在
子组合框1\u Change()
结束之前调用另一个子组合框,但它也不起作用。有什么建议吗

Private Sub ComboBox1_Change()
    Dim operatore As String
    Dim op1 As String
    Dim op2 As String
    Dim trovato As Integer
    Dim rng As Range
    Set rng = Selection
    operatore = ComboBox1.Value
    op1 = Left(operatore, 3)
    op2 = Right(operatore, 3)
    trovato = 0

    If rng Is Nothing Then
        MsgBox "Non hai selezionato nessun range di celle!"
        Exit Sub
    End If
    For Each cell In rng
        If (trovato = 2) Then
            Exit For

        ElseIf StrComp(cell.Value, op1) = 0 Then
            trovato = trovato + 1
        End If
    Next cell

    If (trovato < 2) Then
        MsgBox "Operatori non trovati nella selezione!"
        Exit Sub
    Else
        Select Case operatore
            Case "Op1<-->Op2"
                For Each cell In Selection
                    If cell.Value = "Op1" Then
                        cell.Value = "Op2"
                    ElseIf cell.Value = "Op2" Then
                        cell.Value = "Op1"
                    End If
                Next cell
                MsgBox "Scambiato Op1 con Op2"
                Set rng = Nothing
            Case "Op1<-->Op3"
                For Each cell In Selection
                    If cell.Value = "Op1" Then
                        cell.Value = "Op3"
                    ElseIf cell.Value = "Op3" Then
                        cell.Value = "Op1"
                    End If
                Next cell
                MsgBox "Scambiato Op1 con Op3"

        End Select
    End If
    unselect rng
End Sub

Public Sub unselect(dataRange As Range)
    Set dataRange = Nothing
End Sub 
Private子组合框1_Change()
作为字符串的暗淡运算符
Dim op1作为字符串
Dim op2作为字符串
Dim trovato作为整数
变暗rng As范围
设置rng=选择
operatore=ComboBox1.Value
op1=左(操作员,3)
op2=右侧(操作员,3)
trovato=0
如果rng不算什么,那么
MsgBox“非海塞莱兹奥纳森山脉迪塞勒!”
出口接头
如果结束
对于rng中的每个单元
如果(trovato=2),则
退出
ElseIf StrComp(cell.Value,op1)=0然后
特罗瓦托=特罗瓦托+1
如果结束
下一个细胞
如果(trovato<2),则
MsgBox“非trovati nella selezione运营商!”
出口接头
其他的
选择案例操作员
案例“Op1Op2”
对于选择中的每个单元格
如果cell.Value=“Op1”,则
cell.Value=“Op2”
ElseIf cell.Value=“Op2”然后
cell.Value=“Op1”
如果结束
下一个细胞
MsgBox“Scambiato Op1 con Op2”
设置rng=无
案例“Op1Op3”
对于选择中的每个单元格
如果cell.Value=“Op1”,则
cell.Value=“Op3”
ElseIf cell.Value=“Op3”然后
cell.Value=“Op1”
如果结束
下一个细胞
MsgBox“Scambiato Op1 con Op3”
结束选择
如果结束
取消选择rng
端接头
公共子取消选择(数据范围作为范围)
设置数据范围=无
端接头

考虑使用布尔值作为存储状态,然后简单地使用If来控制您的方法

或者,在将状态保存到变量之前,如

sTemp = Application.Selection.Address

'after all manipulations, restore selection
Application.Range(sTemp).Select

'also, reset copying mode
Application.CutCopyMode = False

只需选择其他内容。我希望避免选择其他内容,因为这可能会对未来的开发造成其他意外故障。您无法取消选择您希望的方式。必须始终选择某些内容:单元格、范围、对象,如文本框等。只需选择另一个不重要的单元格,如A1或任何其他无内容的单元格。是的,你们说得对。非常感谢。