Utilizando el Objetivo de Reconocer a un Celular Ubicación

Me encuentro con este problema una cantidad justa y estoy curioso por saber si alguien me puede decir por qué o cómo puedo escribir un poco más limpio.

A continuación es mi código y no funciona.

If Target.Row = rTime.Offset(0, 1).Row Then
    If Target.Column = rTime.Offset(0, 1).Column Then
        cboStatus.Activate
    End If
End If

¿Cómo es que yo no puede escribir así?

If Target = rTime.Offset(0, 1) Then
    cboStatus.Activate
End If

Si el objetivo ya es un intervalo, entonces ¿por qué necesito para especificar la fila y columna individual? Que el segundo código no funciona y he probado muchas variaciones de la misma. Incluso he intentado algo como If Target.Range = range(“C4”) Then o If Target.Range = cells(4, 3) Then, pero ninguno de los trabajado bien. He intentado muchas variaciones de cosas similares. Aunque, no quiero usar un rango específico como A4, ya que quería usar el rTime como lo es en el ejemplo, pero yo sólo estaba tratando de averiguarlo.

Nada parece funcionar, aparte de la especificación de la persona de la fila y columna de cada momento. Por favor alguien puede explicar esto a mí? También, hay una mejor manera de escribir esto de lo que lo hice en el primer ejemplo, el que hace el trabajo?

Gracias por algo que alivie mi confusión.

InformationsquelleAutor Chris | 2013-11-11

2 Kommentare

  1. 4

    La propiedad predeterminada de un objeto range es .Value así que cuando usted dice If Target = rTime.Offset(0, 1), siempre se comparan los valores en ese intervalo en lugar de la dirección de los rangos.

    Una manera ya está demostrado por L42. Aquí hay otra manera de usar Intersect

    If Not Intersect(Target, rtime.Offset(0, 1)) Is Nothing Then cboStatus.Activate

    EDITAR

    Cuando dices Target.Column y Target.Row, siempre obtendrá la primera columna y la primera fila de la celda en la que van, incluso si Target tiene varias celdas. Para evitar este uso a continuación para asegurarse de que usted tiene el deseado Target. Tu código va a dar resultados inesperados, incluso si no es de una sola célula en Target. Por ejemplo, dicen que el valor de la celda B1 es igual a cualquier otro de la célula que en el momento en que se target. Así que si la Celda B1 = «Sid» y la Celda F1 = «Sid» y seleccionar la celda F1, a continuación, usted obtendrá el «Hola Mundo» cuadro de mensaje.

    Para xl2003, puede utilizar una comprobación adicional

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim rtime As Range
    
        Set rtime = Range("A1")
    
        If Target.Cells.Count > 1 Then
            MsgBox "you have chosen more than one cell"
            Exit Sub
        End If
    
        If Not Intersect(Target, rtime.Offset(0, 1)) Is Nothing Then
            MsgBox "Hello World"
        End If
    End Sub

    Para xl2007+, reemplazar Target.Cells.Count con Target.Cells.CountLarge

    Para L42

    Su método es correcto, pero entonces usted también tendrá que poner verificación para obtener los resultados correctos.

    • sid he descubierto que la comparación sólo funciona si los objetos se sostiene sola célula? si es un rango, por ejemplo. Range("A1:A2") entonces no va a funcionar, ya que, como se dijo, propiedad predeterminada es Value y múltiples valores no se puede comparar todas al mismo tiempo? es mi entendimiento correcto?
    • Creo que voy a añadir una cosa más para evitar la confusión… Un momento… actualizando el post.
    • Gracias a ambos por lo tanto, no está seguro de a quién dar el crédito, ya que ambos eran de gran ayuda. Desde Sid poner más información, voy a dar el crédito a él, pero me marca tanto de ustedes. Esto explica mucho, y se dio cuenta de que he estado haciendo mal durante mucho tiempo ahora. Parece que tengo un par de hojas de cálculo para ir a través y correcta, aunque ellos hacen el trabajo.
  2. 2

    intente esto:

    Edit1: Para cubrir Chis’ preocupación

    If Target.Address = rtime.Offset(0,1).Address(,,,True) then cboStatus.Activate

    no se puede comparar objetos, las propiedades? No estoy seguro, sin embargo.

    • + 1 Si usted necesita para obtener la .Address
    • Realmente debería usar .Address(, , , TRUE) sólo en caso de que rtime no está en el mismo libro y hoja como Target
    • De acuerdo. Editado mi respuesta para ti 😀 aunque un poco tarde.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea