Imprimir página | Cerrar ventana

Comparar valor celda Excel con campo Access.

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84711
Fecha de impresión: 26/Marzo/2026 a las 22:25


Tema: Comparar valor celda Excel con campo Access.
Publicado por: fredy8alc
Asunto: Comparar valor celda Excel con campo Access.
Fecha de publicación: 19/Septiembre/2019 a las 16:14
Buenas tardes.
De nuevo recurro a este foro para ver si alguien me puede echar una mano a resolver un problema que no soy capaz de saber porque ocurre.
Tengo el siguiente código:
--------------------------------------------------------------
Dim txtSelectedName As String
Dim xlsApp As Object
Dim xlsBook As Object
Dim H As String
Dim Cambio As Integer
Dim Descritos As String
Cambio = 0
Descritos = ""
H = "TOMA DE DATOS"
txtSelectedName = Me.Ruta

    Set xlsApp = CreateObject("Excel.Application") 'Crea una instancia de la aplicación Excel
    Set xlsBook = xlsApp.Workbooks.Open(txtSelectedName)

If xlsBook.Worksheets(H).Range("J6:J6") = Null Or xlsBook.Worksheets(H).Range("J6:J6") = "" Then
Me.Oferta_J6 = "---"
        ElseIf xlsBook.Worksheets(H).Range("J6:J6") <> Me.Oferta_J6 Then
        Me.Oferta_J6 = xlsBook.Worksheets(H).Range("J6:J6")
        Cambio = Cambio + 1
        Descritos = Descritos & "Oferta" & vbCrLf
End If
    
If xlsBook.Worksheets(H).Range("M6:M6") = Null Or xlsBook.Worksheets(H).Range("M6:M6") = "" Then
Me.Pedido_M6 = "---"
        ElseIf xlsBook.Worksheets(H).Range("M6:M6") <> Me.Pedido_M6 Then
        Me.Pedido_M6 = xlsBook.Worksheets(H).Range("M6:M6")
        Cambio = Cambio + 1
        Descritos = Descritos & "Pedido" & vbCrLf
End If


xlsBook.Close 'Cierra el libro
Set xlsBook = Nothing 'Destruye el objeto
xlsApp.Quit 'Cierra la aplicación
Set xlsApp = Nothing 'Destruye el objeto
    

MsgBox "Se han modificado: " & Cambio & " Campos." & vbCrLf & Descritos, vbInformation, "Aviso"
-------------------------------------------------------------------

Es algo tan simple como abrir una hoja Excel y comparar el valor de la celda J6 y M6 con los campos del formulario activo Oferta_J6 y Pedido_M6.

Si las celdas están vacías asigna el valor "---" al campo y si las celdas tienen datos los compara con los campos y si son diferente inserta el valor de la celda en el campo.

Al final me dice cuantos campos se han modificado (Cambio) y que campos se han modificado (Descritos).

Bueno pues aquí viene el problema.
SIEMPRE me dice que se han modificado los dos campos.
Los valores de la celda Excel y el campo Access son los mismos, pero SIEMPRE me dice que se han modificado dos campos.

El mismo proceso se hace con otros campos y otras celdas y funciona correctamente pero estos dos no. Y no me explico porqué.

Alguien me puede dar una idea de porqué sucede esto?
MUCHAS GRACIAS.






Respuestas:
Publicado por: lbauluz
Fecha de publicación: 19/Septiembre/2019 a las 19:53
Hombre, si lo que quiere es 
"Es algo tan simple como abrir una hoja Excel y comparar el valor de la celda J6 y M6 ..."

Hay que cambiar
If xlsBook.Worksheets(H).Range("J6:J6") = Null Or xlsBook.Worksheets(H).Range("J6:J6") = "" Then

por
If (xlsBook.Worksheets(H).Range("J6").value = "" AND xlsBook.Worksheets(H).Range("M6").value = "") then


Luis


-------------
El Búho es un pajarraco


Publicado por: fredy8alc
Fecha de publicación: 21/Septiembre/2019 a las 10:15
Luis:
Gracias por la respuesta.
El problema no está aquí
If xlsBook.Worksheets(H).Range("J6:J6") = Null Or xlsBook.Worksheets(H).Range("J6:J6") = "" Then
Me.Oferta_J6 = "---"
        ....
End If

Esta pare funciona correctamente con .Value y sin .Value

El problema esta en:

        ElseIf xlsBook.Worksheets(H).Range("J6:J6") <> Me.Oferta_J6 Then
        Me.Oferta_J6 = xlsBook.Worksheets(H).Range("J6:J6")
 
Compara los valores del la celda J6 con el campo Oferta_J6 y si son diferentes iguala los valores.
Bueno pues, SIEMPRE son diferente.
A pesar de, teóricamente, haber igualado los valores,cuando se vuelve a ejecutar el código, SIEMPRE, los valores la celda y del campo son diferentes. Siempre se ejecuta esta parte del bloque ElseIf.

No sé si me he explicado bien.
Gracias.


Publicado por: fredy8alc
Fecha de publicación: 21/Septiembre/2019 a las 10:37
Vale.

Creo haber descubierto porqué ocurre esto, solo con estas dos celdas.

Resulta que las dos celdas de la hoja Excel tienen una condición de "validación".
El valor introducido tiene que tener un número de caracteres igual a 10.
Aunque los valores son los mismo en el Excel que en el campo de Access cuando le quito a la celda de Excel esa condición de validació, el programa funciona correctamente si le pongo la condición, no funciona.

Elguien me puede decir como solventar este problema ya que la celda tinene que tener, obligatoriamente, esa condición para que nadie pueda introducir un valor no válido.

Muchas gracias.


Publicado por: jilo
Fecha de publicación: 21/Septiembre/2019 a las 12:10
Intenta usando la propiedad Text del rango, osea

xlsBook.Worksheets(H).Range("J6").Text <>


-------------
Espero te sirva !!!!!!
Iñaki


Publicado por: fredy8alc
Fecha de publicación: 21/Septiembre/2019 a las 13:09
Solucionado.
Muchas gracias Jilo.
Con el .Text si que funciona.

Muchas gracias.

Podemos cerrar el tema.



Imprimir página | Cerrar ventana