I am trying to implement a procedure but without success. The goal of the procedure is to copy the selection of a List Box to the clipboard.
.
This list is fed by a SQL query: SELECT “UserName”, “UserID” FROM “TUsers” ORDER BY “UserName” ASC.
.
The data field of this list “IDUser” is associated with the table field of another table “TServicesMP”.
.
The procedure succeeds in finding the selection, but cannot copy it to the clipboard without generating errors like this one:
.
BASIC runtime error.
Undefined object variable.
Code line: oDataFlavor.initialize(“text/plain;charset=utf-8”).
.
Could some of you help me to correct what is not working.
.
Here is the procedure:
Sub CopyListBoxTextToClipboard(oEvent As Object)
Dim oForm As Object
Dim oListBox As Object
Dim sSelectedText As String
Dim oClipboard As Object
Dim selectedID As Variant
Dim oStatement As Object
Dim oResultSet As Object
Dim sSQL As String
' Obtenir le formulaire dans lequel se trouve la List Box
oForm = oEvent.Source.Model.Parent
' Obtenir la List Box (zone de liste) dans le formulaire
oListBox = oForm.getByName("lst-Utilisateurs") ' Assure-toi que le nom de la liste est correct
' Récupérer l'ID de l'utilisateur sélectionné
selectedID = oListBox.CurrentValue ' Utiliser CurrentValue pour obtenir directement la valeur
' Vérifier si un utilisateur a été sélectionné
If Not IsNull(selectedID) Then
' Construire la requête pour obtenir le texte (NomUtilisateur) à partir de l'ID sélectionné
sSQL = "SELECT ""NomUtilisateur"" FROM ""TUtilisateurs"" WHERE ""UtilisateurID"" = " & selectedID
oStatement = oForm.ActiveConnection.createStatement()
oResultSet = oStatement.executeQuery(sSQL)
' Vérifier si la requête retourne un résultat
If oResultSet.next() Then
sSelectedText = oResultSet.getString(1) ' Obtenir le NomUtilisateur
' Obtenir le service Clipboard
oClipboard = CreateUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard")
Dim oTransferable As Object
oTransferable = CreateUnoService("com.sun.star.datatransfer.Transferable")
' Créer un DataFlavor pour le texte
Dim oDataFlavor As Object
oDataFlavor = CreateUnoService("com.sun.star.datatransfer.DataFlavor")
oDataFlavor.initialize("text/plain;charset=utf-8")
' Définir le texte à copier
oTransferable.setDataFlavor(oDataFlavor)
oTransferable.Data = sSelectedText
' Copier le texte dans le presse-papier
oClipboard.setTransferable(oTransferable)
' Message de confirmation
MsgBox "Le nom d'utilisateur '" & sSelectedText & "' a été copié dans le presse-papier."
Else
MsgBox "Aucun utilisateur correspondant trouvé."
End If
Else
MsgBox "Aucun utilisateur sélectionné."
End If
End Sub