Código para cambiar el fondo del registro activo en un formulario del programa Microsoft Access
Leyendo una respuesta tuya a una pregunta efectuada hace algún tiempo sobre distintos colores en fondos de formulario, comentas en tu último párrafo: "Existe código para hacer que cambie el fondo del registro activo en un formulario continuo". ¿Me podrías facilitar dicho código ya que estoy detrás de ello desde hace tiempo?
Esta en inglés, y claro, he procurado repetar al autor del código que es de una .mdb V 7.0. Solo ten en cuenta de marcar una Referencia a Microsoft DAO 3.6 Object Library si lo usas en una V 9.0 o posterior, es necesaria siempre que usemos el objeto recordset. Option Compare Database Option Explicit 'Changing the Background Color of the Current Record in a Continuous Form 'Changing the Background Color in a continuous form is an often asked question in the Access Newsgroups. 'The following document shows how this can be done, and the methodology behind it. 'This procedure will highlight the current row in a continuous form. Please see the notes at the end to 'learn what this procedure DOES NOT do. ' 'This sample is based on the "tblKunden" table from the Northwinds Database. Changes will be noted so you may 'use this code in your own form. ' '1. Create a new form based on the "tblKunden" table. '2. Add all fields from the products table to the form. '3. Create the following Controls to the form ' 'Name: ctlBack 'Control Source:=IIf([SelTop] = [ctlCurrentLine], "ÛÛÛÛÛÛÛÛÛÛÛÛ", Null) ' '"Û" is character 0219, the easiest way to enter this is to copy and paste from here. Format the font of 'this control as Terminal. 'Place this control on your form so that it is sized to cover the entire area where you would like the 'background to be. Experiment with the number of "Û" characters as well as the font height to get complete 'coverage. 'Set the background to transparent. Set the foreground to whatever color you want your highlight color to be. 'Make sure the section background color is different from the highlight color. ' 'Next, for all the controls that will have the background highlight, select them all, change the background 'color to the highlight color, then change the background color to transparent. (Yes, this step is necessary). ' 'The following two controls can be placed anywhere, and be hidden. You may want to leave them visible to help 'in seeing how this works, then hide them when done. ' 'Name: ctlCurrentLine 'Control Source:=GetLineNumber() ' 'Name: ctlCurrentRecord 'Control Source: unbound ' 'Add the following code behind the form: ' 'Function GetLineNumber() ''The function "GetLineNumber" is modified from the Microsoft Knowledge Base '' (Q120913), the only difference here is that the following items have been hard ''coded:F, KeyName, KeyValue. This was done to add a slight performance ''increase. Change KeyName and KeyValue to reflect the key in your table. ' 'Dim RS As Recordset 'Dim CountLines 'Dim F As Form 'Dim KeyName As String 'Dim KeyValue ' 'Set F = Form 'KeyName = "productid" 'KeyValue = [ProductID] ' ' On Error GoTo Err_GetLineNumber ' Set RS = F.RecordsetClone ' ' Find the current record. ' Select Case RS.Fields(KeyName).Type ' ' Find using numeric data type key value. ' Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, _ ' DB_DOUBLE, DB_BYTE ' RS.FindFirst "[" & KeyName & "] = " & KeyValue ' ' Find using date data type key value. ' Case DB_DATE ' RS.FindFirst "[" & KeyName & "] = #" & KeyValue & "#" ' ' Find using text data type key value. ' Case DB_TEXT ' RS.FindFirst "[" & KeyName & "] = '" & KeyValue & "'" ' Case Else ' MsgBox "ERROR: Invalid key field data type!" ' Exit Function ' End Select ' ' Loop backward, counting the lines. ' Do Until RS.BOF ' CountLines = CountLines + 1 ' RS.MovePrevious ' Loop 'Bye_GetLineNumber: ' Return the result. ' GetLineNumber = CountLines ' Exit Function 'Err_GetLineNumber: ' CountLines = 0 ' Resume Bye_GetLineNumber 'End Function ' 'Private Sub Form_Click() 'Me!ctlCurrentRecord = Me.SelTop ' 'End Sub ' 'Private Sub Form_Current() 'Me!ctlCurrentRecord = Me.SelTop 'End Sub ' 'How the code works: 'When you open the form, the GetLineNumber function gets the record number for each record and assigns its 'value to "ctlCurrentLine". As you move from record to record, the code "Me!ctlCurrentRecord = Me.SelTop" 'changes the value of "ctlcurrentRecord" to the current record number (See Access help for more on "SelTop"). 'The code in "ctlBack" compares "SelTop" to the "ctlCurrentLine" value and only changes the highlight if the 'two are equal. These values will only be equal for the current record. The highlighting works by formatting 'the Terminal Font character 219 (a box, you can use any font box character, but Terminal is more likely to 'be on any machine) to the highlight color. Because all the controls on the form are transparent, this 'formatting shows through as a background to the controls. ' 'Notes: 'Although at first glance it may look like the control "ctlCurrentRecord" is not needed, it actually is to 'force the record numbers to update as you move from record to record. 'The code as written will detect movement to a row from the following: a mouse or keyboard click, clicking 'the record selector (through Form_Click), and using the Record Navigation bar. If you move to rows through 'code, you may need to make modifications to highlight the row. 'Performance is affected by the speed of the machine. On slower machines you will note that the individual 'cell highlight shows first, then the whole row becomes highlighted. 'The are many things that can be done with a continuous form, such as allowing deletions, edits, additions, 'etc. This code generically handles navigation through the form only. To account for how your form is 'actually set up, you would need to modify your form to detect each of the above events, and refresh 'accordingly. Anytime you change the underlying records of the form, you will need to call "GetLineNumber" '(one way to do this is through Form.Refresh). Since there is a performance hit in doing this, only use 'this for those operations that are allowed on your form. Function GetLineNumber() Dim rs As Recordset Dim CountLines Dim F As Form Dim KeyName As String Dim KeyValue Set F = Form KeyName = "Kunden-Code" KeyValue = [Kunden-Code] On Error GoTo Err_GetLineNumber Set rs = F.RecordsetClone ' Find the current record. Select Case rs.Fields(KeyName).Type ' Find using numeric data type key value. Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, _ DB_DOUBLE, DB_BYTE rs.FindFirst "[" & KeyName & "] = " & KeyValue ' Find using date data type key value. Case DB_DATE rs.FindFirst "[" & KeyName & "] = #" & KeyValue & "#" ' Find using text data type key value. Case DB_TEXT rs.FindFirst "[" & KeyName & "] = '" & KeyValue & "'" Case Else MsgBox "ERROR: Invalid key field data type!" Exit Function End Select ' Loop backward, counting the lines. Do Until rs.BOF CountLines = CountLines + 1 rs.MovePrevious Loop Bye_GetLineNumber: ' Return the result. GetLineNumber = CountLines Exit Function Err_GetLineNumber: CountLines = 0 Resume Bye_GetLineNumber End Function Private Sub Form_Click() Me!ctlCurrentRecord = Me.SelTop End Sub Private Sub Form_Current() Me!ctlCurrentRecord = Me.SelTop End Sub
Hay un error de sintáxis en la linea =SiInm([SelTop]=[ctlCurrentLine];"ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ";Nulo) No son comas sino punto y coma
We can always search that from where we can find that from to find that the microsoft edge password manager after know this function if you forgot the password then you will be easily recover.