Error al copiar el contenido de un campo que está dentro de un subformulario

Al ejecutar este código me salta error 2046:

Me!Subformulario_config_orientaciones.Form!OG_Orientación.SetFocus
DoCmd.RunCommand acCmdCopy

Concretamente, lo que quiero es copiar el contenido de un campo "[contenido]", cuyo nombre en el subformulario es "OG_Orientación"

3 respuestas

Respuesta
1

Para poder copiar al portapapeles un dato (el contenido del cuadro de texto) tiene que estar seleccionado todo el contenido a copiar, no basta decirle 'copia' (sin más).

Lo adecuado y en el evento 'al recibir el foco' del objeto (indispensable, pues se utiliza .Text):

Private Sub [objeto a copiar]_GotFocus()
Me.[objeto a copiar].SelStart = 0
Me.[objeto a copiar].SelLength = Len(Me.[objeto a copiar].Text)
DoCmd.RunCommand acCmdCopy
End Sub

Sigue dándome problemas. El código siguiente selecciona el texto a copiar, pero aparece el error 2046

Private Sub btn_copiar_Click()
  Me!Subformulario_config_orientaciones.Form!Info_relevante.SelStart = 0
  Me!Subformulario_config_orientaciones.Form!Info_relevante.SelLength = Len(Me!Subformulario_config_orientaciones.Form!Info_relevante.Text)
  DoCmd.RunCommand acCmdCopy
End Sub

El campo, como se puede ver, no está vacío.

No se cumplen las condiciones requeridas en el ejemplo:
Reitero la línea:

... En el evento 'al recibir el foco' del objeto (indispensable, pues se utiliza .Text) ...

Respuesta
1

Para copiar el contenido del campo este debe tener el foco y además no puede ser nulo, obtendrá el siguiente mensaje

Yo la hago en el evento Al hacer doble clic, algo como:

Private Sub nota_DblClick(Cancel As Integer)
  On Error Resume Next
    Dim lngLen As Long
   lngLen = Len(RTrim(Me.nota))
   Me.nota.SelStart = 0
   Me.nota.SelLength = lngLen
    If lngLen > 0 Then
     DoCmd.RunCommand acCmdCopy
    End If
End Sub

Observe esta imagen

Al hacer clic sobre el botón se abre el formulario para completar o cambiar la información, el número máximo de caracteres lo obtengo con una función que lo toma de acuerdo con la definición de la tabla (pero este no es su caso). En esto utilizo la API de Windows para vaciar el portapapeles, copio el contenido del campo "Dirección" y lo paso al formulario que abro y pego la información, ya sea para continuar ingresando datos o para cambiarla, por último, al hacer clic en el botón Aceptar asigno el contenido al campo del formulario inicial.

Si quiere el contenido del código puede solicitarlo a [email protected] favor en el asunto anotar la consulta.

He puesto el código que me ha indicado:

  On Error Resume Next
    Dim lngLen As Long
   lngLen = Len(RTrim(Me!Subformulario_config_orientaciones.Form!Info_relevante))
   Me!Subformulario_config_orientaciones.Form!Info_relevante.SelStart = 0
   Me!Subformulario_config_orientaciones.Form!Info_relevante.SelLength = lngLen
    If lngLen > 0 Then
     DoCmd.RunCommand acCmdCopy
    End If

Pero no copia el texto. He comprobado que se cumple la condición ">0", pero es como si el comando de copiar no existiese.

¿Dónde está colocando el código? ¿Desde un botón? ¿En el control que tiene el texto?

En el botón "copiar". El recuadro que tiene que copiar al portapapeles está en un subformulario

Tiene que enviar el foco al subformulario, esta instrucción debe ir después de Dim algo como

Me.subform.Form.nomcampo.setfocus

El código que le envíe es para cuando hace doble clic en el campo del texto a copiar

Respuesta
1

Pedro. Copiarlo ¿a dónde?

Si pudieras poner una imagen, mejor que mejor.

Copiar el texto de lo que está escrito en el recuadro de texto para pegarlo en otro sitio

Lo que quiero es que, al pulsar el botón pegar, se copia en el portapapeles todo el texto del recuadro "A nivel de atención, su tutora...."

Pues ya te han dicho lo que hay que hacer.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas