Trucos Pasar los datos seleccionados de un FlexGrid al portapapeles

Para pasar al portapapeles los datos seleccionados en un FlexGrid podremos usar una función como esta :

Sub CopiarGrid(grid As MSFlexGrid, Optional IncluirCabeceras As Boolean = False, Optional SaltarLineas As Boolean = True)
Dim Texto As String, i As Long, j As Long
Dim col1 As Long, col2 As Long

'Si nos mandan introducir las cabeceras
col1 = IIf(grid.Col < grid.ColSel, grid.Col, grid.ColSel)
col2 = IIf(grid.Col > grid.ColSel, grid.Col, grid.ColSel)
For i = 0 To grid.FixedRows - 1
    For j = col1 To col2
        Texto = Texto & grid.TextMatrix(i, j)
        If j < col2 Then Texto = Texto + vbTab
    Next j
    Texto = Texto + vbCr
Next i
Texto = Texto & grid.Clip
If SaltarLineas Then Texto = Replace(Texto, vbCr, vbCrLf)
Clipboard.SetText Texto
End Sub

Le pasas como parámetro el grid.
Si además le pasas true en IncluirCabeceras pues copia también las cabeceras (sólo de las columnas seleccionadas y todas las líneas que tengas definidas en el grid como cabecera). Se podría hacer más sencillo (usando el método clip como para los datos seleccionados) pero entonces se produciría un parpadeo al tener que seleccionar las cabeceras para copiarlas. Este parpadeo, a su vez, se podría evitar inhibiendo el refresco del control mediante el API pero ya me parecía complicar mucho las cosas.
Si además le pasas true en SaltarLineas (que es el valor por defecto) sustituye el carácter que mete el grid para marcar un fin de línea por el vbcrlf de manera que quede bien si lo copias sobre un texto, etc. Si lo que vas a hacer es copiarlo en otro flexgrid debes poner false porque te hará la vida más facil por poder usar grid.clip = clipboard.gettext.



Trucos Trucos

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com