Todo se publica por Israel Cassales
-
¡Vaya! Eso sí es un problema. Te puedo recomendar las opciones que conozco aunque ninguna es garantía de que lo soluciones, sería intentar. Usa la función “Abrir y reparar” de Excel Sube el archivo a Google Drive y ábrelo con Google Sheets. A veces puede abrir archivos que Excel no puede. Cambia la extensión como .xlsx o .xls y luego ábrelo nuevamente en Excel Existen herramientas como Stellar Repair for Excel que en ocasiones ayudan a reparar archivos dañados ¡Suerte!
-
Hola, Ando en el móvil lo que me complica ver los libros que usted adjunto. De acuerdo al desarrollo de su consulta lo que puedo recomendarle es cerrar todos los objetos cuando no se estén utilizando. Por ejemplo después de cerrar el libro, puede liberar la memoria asignada al objeto usando: Set wb = Nothing Por si fuera un tema de memoria intente usted desactivar los complementos de Excel que no esté utilizando, ya que pueden consumir memoria innecesariamente.
-
Hola, Es importante saber que versión de SAP utiliza para poder recibir una ayuda mejor estructurada, su error por lo regular es por que hay un problema con la forma en que está intentando acceder al motor de scripting de SAP Le recomiendo: Verifique que el scripting de SAP esté habilitado: Tiene que estar habilitado tanto en el servidor como en el cliente, revise desde la configuración de SAP GUI. Revise que las referencias estén correctamente configuradas: En el VBA, Herramientas > Referencias y revise que las referencias a las bibliotecas necesarias de SAP estén seleccionadas. Debería tener algo como “SAP GUI Scripting API” marcado. Si después de eso sigue teniendo problemas, revise la documentación de SAP GUI Scripting o amplié la búsqueda de ayuda en foros de SAP Por otro lado, hay formas de hacer esto en SAP. Puede usar el scripting directamente dentro del entorno de SAP para automatizar tareas repetitivas. Similar a lo que esta intentando hacer con Excel, pero dentro de SAP. Un ejemplo del escript: If Not IsObject(application) Then Set SapGuiAuto = GetObject("SAPGUI") Set application = SapGuiAuto.GetScriptingEngine End If If Not IsObject(connection) Then Set connection = application.Children(0) End If If Not IsObject(session) Then Set session = connection.Children(0) End If session.findById("wnd[0]").maximize session.findById("wnd[0]/tbar[0]/okcd").text = "ME21N" session.findById("wnd[0]").sendVKey 0 ' Añada aquí el resto de las acciones que desea automatizar Si necesita que el script interactúe con datos de un archivo Excel, puede actualizar el script para leer datos. Así sería un ejemplo de cómo hacerlo: Dim objExcel, objWorkbook, objSheet Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Open("C:\ruta\del\archivo.xlsx") Set objSheet = objWorkbook.Sheets(1) Dim i i = 2 ' Asumiendo que los datos empiezan en la fila 2 Do While objSheet.Cells(i, 1).Value <> "" ' Use los datos de Excel en tu script session.findById("wnd[0]/usr/ctxtEBAN-BANFN").text = objSheet.Cells(i, 1).Value i = i + 1 Loop objWorkbook.Close objExcel.Quit
-
Por la descripción se me ocurren un par de cosas que recomendarte, una podría ser la configuración de la región, así que en donde no se "abre" bien revisa que el separador de listas sea una coma. La otra no mencionas como lo mandas llamar pero se puede deducir que haces doble clic, así que igualmente en la que no abre bien prueba importar "manualmente" el .csv
-
Lo lamento @joseppp La columna A está vacía y eso no me permitió entender en plenitud tu consulta, parece que al poner en C15 el número que llamas ID lo debe buscar en el rango de DATOS, al poner las letras A B C estás identificando en que fila esta ese mismo número pero hasta ahí, no supe interpretar que quieres devolver de A:A Para una posible ayuda deducir no es buena idea, se agradece el libro pero le externo las dudas que a mí me presentó. también podría esperar la ayuda de algún Maestro o miembro avanzado de la comunidad que lo interprete diferente.
-
CONTAR SI CON VARIOS ARGUMENTOS
tema contestó a Israel Cassales en Pablo Espinosa Fórmulas y funciones
Saludos totales, Bueno con los elementos que aporta y considerando la falta de un libro de ejemplo podría resolver su necesidad con SUMAR.SI.CONJUNTO() Fe de erratas: Dice: SUMAR.SI.CONJUNTO() Debe decir: CONTAR.SI.CONJUNTO() -
Saludos totales, Maestro @JasallBcn yo participaría variando en dos cosas, buscaría hasta la ultima fila con datos para hacer la eliminación de abajo hacia arriba, porque creo que si eliminas las filas de arriba hacia abajo, habría la posibilidad de saltarte algunas filas, porque las filas se reordenan cada vez que eliminas una ¿Qué opina? Sub BORRAR_COBRADAS() Dim i As Long Dim lastRow As Long lastRow = Cells(Rows.Count, "L").End(xlUp).Row For i = lastRow To 2 Step -1 ' Recorre de abajo hacia arriba If Range("FACTURAS!L" & i).Value = "COBRADA" Then Rows(i).EntireRow.Delete End If Next i End Sub
-
Crear una macro para ocultar Columnas vacias
tema contestó a Israel Cassales en Ppep Macros y programación VBA
rMezclaCompletamacro25 - AYUDA EXCEL.xlsb -
Crear una macro para ocultar Columnas vacias
tema contestó a Israel Cassales en Ppep Macros y programación VBA
Varios meses después... Hola, Viendo los temas de las consultas sin responder, considerando el tiempo y las descargas que han pasado en este lapso cabe mencionar que no es común la falta de participaciones. De mi parte le soy sincero, me costo entender como se desencadenan los eventos y cómo serían los pasos. Es posible que a la fecha reciente ya haya usted encontrado la solución a su consulta, así que participaré con lo que se trato de explicar en su descripción; esperando sea de utilidad para futuros lectores. Le comparto tres códigos similares, el primero solo oculta de la tabla las columnas sin datos dentro de la misma, el segundo oculta las columnas que no tienen datos visibles, y el tercero oculta y muestra datos visibles dentro de ese rango. Sub OcultarColumnasSinDatos() Dim ws As Worksheet Dim tbl As ListObject Dim col As ListColumn Dim celda As Range Dim tieneDatos As Boolean Set ws = ThisWorkbook.Sheets("Mezcla 2") Set tbl = ws.ListObjects("Tabla1") For Each col In tbl.ListColumns tieneDatos = False For Each celda In col.DataBodyRange If Not IsEmpty(celda.Value) Then tieneDatos = True Exit For End If Next celda If Not tieneDatos Then col.Range.EntireColumn.Hidden = True Else col.Range.EntireColumn.Hidden = False End If Next col End Sub Sub OcultarColumnasSinDatos_2() Dim ws As Worksheet Dim tbl As ListObject Dim rng As Range Dim col As ListColumn Dim cell As Range Dim colHidden As Boolean Set ws = ThisWorkbook.Sheets("Mezcla 2") Set tbl = ws.ListObjects("Tabla1") For Each col In tbl.ListColumns colHidden = True For Each cell In col.DataBodyRange.SpecialCells(xlCellTypeVisible) If Not IsEmpty(cell.Value) Then colHidden = False Exit For End If Next cell col.Range.EntireColumn.Hidden = colHidden Next col End Sub Sub OcultarColumnasSinDatos_3() Dim ws As Worksheet Dim tbl As ListObject Dim rng As Range Dim col As ListColumn Dim cell As Range Dim colHidden As Boolean Dim filterActive As Boolean Dim i As Integer Set ws = ThisWorkbook.Sheets("Mezcla 2") Set tbl = ws.ListObjects("Tabla1") filterActive = False For i = 1 To tbl.Range.Columns.Count If tbl.AutoFilter.Filters(i).On Then filterActive = True Exit For End If Next i If Not filterActive Then tbl.Range.EntireColumn.Hidden = False Exit Sub End If For Each col In tbl.ListColumns colHidden = True For Each cell In col.DataBodyRange.SpecialCells(xlCellTypeVisible) If Not IsEmpty(cell.Value) Then colHidden = False Exit For End If Next cell col.Range.EntireColumn.Hidden = colHidden Next col End Sub Por otro lado es posible que desee usar el filtro como un detonante, entonces aunque hay consideraciones que especificar, en general debería ser útil desencadenar con el cambio en la tabla en su hoja activa. Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) Es cuestión de que se hagan pruebas. Saludines -
Y unos meses después... Hola, He visto su tema en consultas sin respuestas, además que por el tiempo que ha pasado y las descargas en su libro no es común no haber recibido alguna propuesta, aunque por los meses transcurridos es posible que usted haya resuelto su necesidad. Por aportar algo que pudiera servir (no sé a usted pero tal vez) a los lectores futuros dejaré una idea de acuerdo a lo que entendí en su descripción. Entiendo que su Listview1 de momento solo está filtrando por el ROL, así que agregare que también filtre por el NÚMERO. En caso de servir, bastaría replicar para los demás Combobox. Dim Número As Variant Dim Celda As Range Private Sub ListView1_DblClick() Set Celda = Hoja2.Columns("A").Find(Número, , , xlWhole) Celda.Offset(, 7).Hyperlinks(1).Follow NewWindow:=True End Sub Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem) Número = Item End Sub Private Sub Buscar_Change() FiltrarDatos End Sub Private Sub Buscar1_Change() FiltrarDatos End Sub Private Sub FiltrarDatos() Dim Vb As String, Vb1 As String Dim Fx As Integer Dim co As Integer, co1 As Integer Dim Ve As String, Ve1 As String Vb = Buscar.Text Vb1 = Buscar1.Text If BUOP = "ROL" Then co = 2 ElseIf BUOP = "NUMERO" Then co = 3 ElseIf BUOP = "FECHA" Then co = 4 ElseIf BUOP = "MATERIA" Then co = 5 ElseIf BUOP = "LOTEO O SECTOR" Then co = 6 ElseIf BUOP = "DEPARTAMENTO" Then co = 7 ElseIf BUOP = "CO" Then co = 8 End If If BUOP1 = "ROL" Then co1 = 2 ElseIf BUOP1 = "NUMERO" Then co1 = 3 ElseIf BUOP1 = "FECHA" Then co1 = 4 ElseIf BUOP1 = "MATERIA" Then co1 = 5 ElseIf BUOP1 = "LOTEO O SECTOR" Then co1 = 6 ElseIf BUOP1 = "DEPARTAMENTO" Then co1 = 7 ElseIf BUOP1 = "CO" Then co1 = 8 End If Fx = 2 ListView1.ListItems.Clear With Hoja2 While .Cells(Fx, 1).Value <> Empty Ve = .Cells(Fx, co).Value Ve1 = .Cells(Fx, co1).Value If UCase(Ve) Like "*" & UCase(Vb) & "*" And UCase(Ve1) Like "*" & UCase(Vb1) & "*" Then Set LI = ListView1.ListItems.Add(Text:=.Cells(Fx, 1).Value) LI.SubItems(1) = .Cells(Fx, 2).Value LI.SubItems(2) = .Cells(Fx, 3).Value LI.SubItems(3) = .Cells(Fx, 4).Value LI.SubItems(4) = .Cells(Fx, 5).Value LI.SubItems(5) = .Cells(Fx, 6).Value LI.SubItems(6) = .Cells(Fx, 7).Value LI.SubItems(7) = .Cells(Fx, 8).Value End If Fx = Fx + 1 Wend End With Me.Lblsku = "Archivos: " & ListView1.ListItems.Count End Sub Private Sub UserForm_Initialize() With Me .Width = Application.Width .Height = Application.Height End With BUOP = "ROL" With Me.BUOP .Clear .AddItem "ROL" End With BUOP1 = "NUMERO" With Me.BUOP1 .Clear .AddItem "NUMERO" End With BUOP2 = "FECHA" With Me.BUOP2 .Clear .AddItem "FECHA" End With BUOP3 = "MATERIA" With Me.BUOP3 .Clear .AddItem "MATERIA" End With BUOP4 = "LOTEO O SECTOR" With Me.BUOP4 .Clear .AddItem "LOTEO O SECTOR" End With BUOP5 = "DEPARTAMENTO" With Me.BUOP5 .Clear .AddItem "DEPARTAMENTO" End With Dim Fx As Integer Dim LI As ListItem With ListView1 .Gridlines = True .CheckBoxes = False .View = lvwReport .FullRowSelect = True With .ColumnHeaders .Clear .Add , , "CO", 0 .Add , , "ROL", 50, 0 .Add , , "NUMERO", 60, 0 .Add , , "FECHA", 60, 2 .Add , , "MATERIA", 300, 0 .Add , , "LOTEO O SECTOR", 150, 0 .Add , , "DEPARTAMENTO", 100, 0 .Add , , "ENLACE", 50, 0 End With End With Fx = 2 With Hoja2 Do Until .Cells(Fx, 1) = "" Set LI = ListView1.ListItems.Add(Text:=.Cells(Fx, 1).Value) LI.SubItems(1) = .Cells(Fx, 2).Value LI.SubItems(2) = .Cells(Fx, 3).Value LI.SubItems(3) = .Cells(Fx, 4).Value LI.SubItems(4) = .Cells(Fx, 5).Value LI.SubItems(5) = .Cells(Fx, 6).Value LI.SubItems(6) = .Cells(Fx, 7).Value LI.SubItems(7) = .Cells(Fx, 8).Value Fx = Fx + 1 Loop End With Me.Lblsku = "Archivos: " & ListView1.ListItems.Count End Sub Lamento no ser de más ayuda y en modo de excusa casi no participo por la sección de Macros donde aún sigo practicando. Saludines
-
Saludos totales, Considerando la respuesta del maestro ante la posibilidad de separar el resultado en dos celdas y considerando también que el consultante no desea usar macros. En esa circunstancia si nos ponemos creativos podemos sacar de la celda el resultado de la fórmula a una imagen. Su formula renombrada: =SI(B3=B7,"Resultado1",SI(B3=B8,"Resultado2",SI(B3=B9,"Resultado3"))) Así cuando cambie el resultado, cambiará la imagen que es una copia del resultado que tenemos en el rango inferior. Probablemente con un rango mayor de datos sea laborioso el crearlo pero es solo una idea que se me cruzo al leer la propuesta del Maestro @Victor7 a quien saludo cordialmente con el gusto de coincidir en este tema.
-
Hola, Sin el libro de ejemplo solo puedo participar en su consulta con un código como el siguiente, este debería poder encontrar la última fila utilizada en la hoja “USUARIO” y comenzar a escribir a partir de esa fila. Así, no necesita especificar manualmente la fila de inicio cada vez. Sub AÑADIRNUEVAS() Application.Calculation = xlManual Dim i As Integer Dim j As Integer ' Encuentra la última fila j = Sheets("USUARIO").Cells(Sheets("USUARIO").Rows.Count, "A").End(xlUp).Row + 1 For i = 2 To 8000 If Range("FACTURAS!L" & i) = "AÑADIR" Then Range("USUARIO!A" & j) = Range("FACTURAS!A" & i) Range("USUARIO!B" & j) = Range("FACTURAS!B" & i) Range("USUARIO!C" & j) = Range("FACTURAS!C" & i) Range("USUARIO!D" & j) = Range("FACTURAS!D" & i) Range("USUARIO!E" & j) = Range("FACTURAS!E" & i) Range("USUARIO!F" & j) = Range("FACTURAS!F" & i) Range("USUARIO!G" & j) = Range("FACTURAS!G" & i) Range("USUARIO!H" & j) = Range("FACTURAS!H" & i) Range("USUARIO!I" & j) = Range("FACTURAS!I" & i) Range("USUARIO!J" & j) = Range("FACTURAS!J" & i) j = j + 1 End If Next i ' Limpia las celdas restantes por si hace falta While Range("USUARIO!A" & j) <> "" Range("USUARIO!A" & j) = "" Range("USUARIO!B" & j) = "" Range("USUARIO!C" & j) = "" Range("USUARIO!D" & j) = "" Range("USUARIO!E" & j) = "" Range("USUARIO!F" & j) = "" Range("USUARIO!G" & j) = "" Range("USUARIO!H" & j) = "" Range("USUARIO!I" & j) = "" Range("USUARIO!J" & j) = "" Range("USUARIO!K" & j) = "" Range("USUARIO!L" & j) = "" j = j + 1 Wend Application.Calculation = xlAutomatic End Sub
-
Hola, De manera personal no tengo el conocimiento para hacer que la fórmula aplique automáticamente el formato de superíndice, y no estoy seguro que se pueda hacer sin usar VBA. Creo recordar que usted evita el uso de macros en sus trabajos, pero incluso aunque fuera con macros dudo que pueda mantener la fórmula y el formato de superíndice en la misma celda, es decir; para que la macro aplique el formato debería reemplazar el resultado a texto o colocarlo en alguna celda auxiliar. Es por esta causa que no puede aplicar manualmente el superíndice al seleccionar la parte de la fórmula, Excel le deshabilita el menú. Aún así, habría que esperar si hay otras participaciones que le aporten alguna posible solución.
-
Hola, Estaba viendo los temas de la sección sin respuestas y llama la atención el suyo porque a pesar de tener tantas descargas al momento no ha tenido más participación. Una causa podría ser lo extenso. Solo por darle una idea general a sabiendas que debe personalizar una opción de código podría ser así: Sub BuscarCoincidencias() Dim wsBase As Worksheet Dim wsPozo As Worksheet Dim pozo As String Dim fecha As Range Dim jornada As Range Dim actividad As String Dim filaBase As Long Dim filaPozo As Long Dim columnaFecha As Long Dim columnaJornada As Long Dim actividades As Variant Dim i As Long ' Definir las hojas de trabajo Set wsBase = ThisWorkbook.Sheets("Base de datos") Set wsPozo = ThisWorkbook.Sheets("Pozo 3") ' Obtener el pozo de la celda K2 pozo = wsPozo.Range("K2").Value ' Definir las actividades a buscar actividades = Array("MOV. HTA. (PRUEBAS)", "MOV. HTA.(MEDICION POZO)", "MOV. HTA. POR TRONADURA", _ "MEDICION TELEVIWER", "MEDICION DE POZO CLIENTE", "ESPERA POR TRONADURA", _ "MOV. SONDA POR TRONADURA", "ESPERA DE ACCESO", "ESPERA DE PLATAFORMA CLIENTE", _ "ESPERA DE MEDICION CLIENTE", "ESPERA DE INSTRUCCIONES CLIENTE", "VIDEO POZO") ' Recorrer las fechas en la hoja "Pozo 3" For Each fecha In wsPozo.Range("E10:BP10") columnaFecha = fecha.Column ' Recorrer las jornadas en la hoja "Pozo 3" For Each jornada In wsPozo.Range(wsPozo.Cells(11, columnaFecha), wsPozo.Cells(11, columnaFecha + 1)) columnaJornada = jornada.Column ' Recorrer las actividades For i = LBound(actividades) To UBound(actividades) actividad = actividades(i) ' Buscar coincidencias en la hoja "Base de datos" filaBase = 2 ' Asumiendo que los datos empiezan en la fila 2 Do While wsBase.Cells(filaBase, 1).Value <> "" If wsBase.Cells(filaBase, 2).Value = pozo And _ wsBase.Cells(filaBase, 3).Value = fecha.Value And _ wsBase.Cells(filaBase, 4).Value = jornada.Value And _ wsBase.Cells(filaBase, 5).Value = actividad Then ' Colocar las horas realizadas en la hoja "Pozo 3" wsPozo.Cells(15, columnaJornada).Value = wsBase.Cells(filaBase, 6).Value Exit Do End If filaBase = filaBase + 1 Loop Next i Next jornada Next fecha End Sub Le recomiendo ir por partes y seccionar su consulta en resultado por resultado.
-
Hola, Por el tiempo que ha transcurrido es posible que haya avanzado en su necesidad por usted mismo. Para dejar una sugerencia en el foro y los posibles lectores tal vez podría usar las columnas número de guía y orden de trabajo que tiene en su hoja del mismo nombre, Base de datos y crear un nuevo formulario. Para llamarlo creas un nuevo botón en el formulario principal y lo ejecutas. Este formulario debe ser capaz de buscar y actualizar los datos del tarifario, algo así: Private Sub actualizarTarifario_Click() Dim fila As Integer Dim guiaBuscar As String Dim ordenBuscar As String Dim encontrado As Boolean guiaBuscar = InputBox("Ingrese el número de guía:") ordenBuscar = InputBox("Ingrese el número de orden de trabajo:") encontrado = False With Hoja2 For fila = 3 To .Cells(.Rows.Count, 2).End(xlUp).Row If .Cells(fila, 2).Value = guiaBuscar And .Cells(fila, 3).Value = ordenBuscar Then .Cells(fila, 11).Value = InputBox("Ingrese el tarifario:") ' Añade más columnas si es necesario encontrado = True Exit For End If Next fila End With If Not encontrado Then MsgBox "No se encontró el registro con el número de guía y orden de trabajo proporcionados." Else MsgBox "Tarifario actualizado correctamente." End If End Sub
-
Saludos totales Es una gran idea @simplifikndo y lamento parecer entrometido en su aporte, me gustan las recomendaciones que hace y por eso con pena de mi parte y sin intención de modificar el total de su idea con el rango auxiliar, vi que en la parte del conteo usa esta fórmula: =SI(CONTAR.SI(U$1:U$7,">"&0)>CONTAR.SI(T$1:T$7,">"&0),CONTAR.SI(U$1:U$7,">"&0)-CONTAR.SI(T$1:T$7,">"&0),0) Usando su mismo rango tal vez le podría interesar algo así: =SUMAPRODUCTO((U1:U7>0)*(T1:T7=0)) Una disculpa por la intromisión estimado @Matías86 Duda Lanzamiento - slp.xlsx
-
Saludos totales @simplifikndo Gran aporte y gusto de coincidir con usted de nuevo en un tema. @fx.ingenieria Hay una parte que me parece (al menos a mí) que no está clara en su consulta y es la siguiente: En los libros que amablemente manda y en sus explicaciones, no ha terminado de exponer cómo es que los rangos pasan de ser fijos a ser variables, así que mi participación se basa solo en deducciones y erróneamente no debería ser así porque está limitada al conocimiento que solo ésta en usted. Además que ya está siendo asistido por el compañero quien hace colaboraciones sobresalientes. Desde mis conjeturas una de las forma en que los rangos sean variables es porque se insertan filas o columnas, esto le debe causar problemas si quien lo hace no inserta dentro del rango, porque de ser así una suma natural de Excel debería servir porque el rango cambia automáticamente. Empero, si esta fila o columna se inserta al final del rango, entonces no se actualiza y las sumas son incorrectas. Una idea sencilla que sirve para evitar esto es combinar SUMA con DESREF ENFATIZO: Es importante señalar cómo pasan de fijos a variables sus rangos considerando que está buscando sumar valores justo dentro de ese rango y las fórmulas no se escriben automáticamente, a menos que se programe un evento que lo ocasione.
-
Hola, Por el tiempo que ha transcurrido es posible que haya encontrado por usted mismo la solución y lamentablemente el enlace ya no está vigente. Para posibles futuros lectores se puede compartir un ejemplo que debería ser funcional si se personaliza un poco. Para cambiar el color del botón según su condición (ocupada, libre o reservada), puede usar una estructura condicional similar a esto: Sub ActualizarColorBoton() Dim estado As String estado = Me.TextBoxEstado.Value ' Asumiendo que el estado se almacena en un TextBox Select Case estado Case "ocupada" Me.CommandButton1.BackColor = RGB(255, 0, 0) ' Rojo Case "libre" Me.CommandButton1.BackColor = RGB(0, 255, 0) ' Verde Case "reservada" Me.CommandButton1.BackColor = RGB(255, 255, 0) ' Amarillo Case Else Me.CommandButton1.BackColor = RGB(200, 200, 200) ' Color por defecto End Select End Sub Para llenar los TextBox con la información correspondiente al pulsar el botón, puede usar el evento Clic: Private Sub CommandButton1_Click() ' Supongamos que tiene un TextBox para cada campo de información Me.TextBoxNombre.Value = "Nombre de ejemplo" Me.TextBoxFecha.Value = "01/01/2024" Me.TextBoxEstado.Value = "ocupada" ' Añada más campos según sea necesario End Sub Para integrar ambos códigos debe asegurase de llamar a la subrutina ActualizarColorBoton cada vez que cambie el estado del botón para que el color se actualice. Private Sub CommandButton1_Click() ' Llenar los TextBox con la información Me.TextBoxNombre.Value = "Nombre de ejemplo" Me.TextBoxFecha.Value = "01/01/2024" Me.TextBoxEstado.Value = "ocupada" ' Actualizar el color del botón según el estado Call ActualizarColorBoton End Sub Saludos totales