打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
复制用户窗体文本框里的数据
通常,我们可以在选择要复制的文本后,按Ctrl+C组合键来复制文本。下面通过两个简单的示例介绍如何使用VBA代码复制用户窗体文本框中的文本数据。
示例一:如下图1所示,在示例窗体中有一个文本框和一个命令按钮。当窗体被激活时,文本框中自动显示文字“完美Excel”,单击“复制文本”按钮后,将文本框中的数据复制到剪贴板。

图1:带有文本框和命令按钮的用户窗体
首先,按图1设计好用户窗体界面。然后,在该用户窗体模块中,输入下列代码:
Dim myClipboard As New DataObject Private Sub UserForm_Activate()Me.TextBox1.Value = "完美Excel"End Sub Private Sub CommandButton1_Click()With myClipboard.SetText Me.TextBox1.Text.PutInClipboardEnd WithEnd Sub

示例二:在用户窗体中有多个文本框,要求单击按钮后将含有数据的文本框中的数据全部复制到剪贴板。用户窗体如下图2所示,含有6个文本框。


图2:带有多个文本框的用户窗体
首先,按图2设计好用户窗体界面。然后,在用户窗体模块中,输入下列代码:

Dim strUnion As String Private Sub CommandButton1_Click()Dim dObj As DataObjectWith MeIf Not .TextBox1 = Empty Then strUnion = strUnion & .TextBox1If Not .TextBox2 = Empty Then strUnion = strUnion & vbCrLf & .TextBox2If Not .TextBox3 = Empty Then strUnion = strUnion & vbCrLf & .TextBox3If Not .TextBox4 = Empty Then strUnion = strUnion & vbCrLf & .TextBox4If Not .TextBox5 = Empty Then strUnion = strUnion & vbCrLf & .TextBox5If Not .TextBox6 = Empty Then strUnion = strUnion & vbCrLf & .TextBox6End With Set dObj = New DataObject dObj.SetText strUnion, 1dObj.PutInClipboardEnd Sub

说明与扩展
下面对示例中涉及到的主要对象及其属性、方法进行简单的介绍和整理,并进行一些扩展(也可参考VBA帮助)。
本文虽然题为复制文框框中的数据,但DataObject对象也可应用到其他的用户窗体控件中。

  • DataObject 对象
    DataObject对象能够像“剪贴板”一样保存一段文本格式的文本,并能为每种附加的文本格式(例如用户定义的格式)保存一段文本。
    DataObject对象的工作方式与“剪贴板”很相像。如果将一串文本复制到DataObject对象,DataObject 对象将保存该文本。如果将相同格式的第二段文本复制到该DataObject对象,则DataObject对象将清除前一文本,并保存第二段的文本。对于每种指定的格式,它保存一段从最近一次操作得到的文本。
    但DataObject对象又与“剪贴板”不同,DataObject支持与“剪贴板”及文本的拖放操作有关的命令。在开始进行与“剪贴板”有关的操作(如GetText)或拖放操作时,与该操作有关的数据会被移到DataObject对象中。
    DataObject对象具有下列方法:

     

    • SetText方法:使用特定的格式复制文本串到DataObject对象中。
    • GetText方法:使用特定的格式在DataObject对象中检索文本串。
    • GetFormat方法:返回的值表示DataObject对象中是否有指定的格式。
    • StartDrag方法:初始化针对DataObject的拖放操作。
    • GetFromClipboard:从剪贴板复制数据到DataObject对象。
    • PutInClipboard:将数据从DataObject对象移到剪贴板上。
    • Clear方法:删除DataObject对象中的所有对象。

     

  • GetFormat方法、GetText方法 和SetText方法示例
    本示例使用GetFormat方法、GetText方法和SetText方法在DataObject对象和剪贴板之间传输文本。
    示例窗体如下图3所示,带有一个文本框TextBox1,四个命令按钮CommandButton1、CommandButton2、CommandButton3和CommandButton,以及一个标签Label1。用户把文本键入文本框然后单击命令按钮CommandButton1,把文本以标准文本格式传输到DataObject对象。单击命令按钮CommandButton2,在DataObject对象中检索文本。单击命令按钮CommandButton3,用自定义格式把文本从文本框TextBox1复制到DataObject对象。单击命令按钮CommandButton4,用自定义格式在DataObject对象中检索文本。

    图3:演示GetFormat、GetText、SetText方法的用户窗体
    窗体模块中的代码为:

     

    Dim MyDataObject As DataObject         Private Sub CommandButton1_Click()    '把标准格式放到剪贴板上        If TextBox1.TextLength > 0 Then    Set MyDataObject = New DataObject    MyDataObject.SetText TextBox1.Text    Label1.Caption = "放置到DataObject中"    CommandButton2.Enabled = True    CommandButton4.Enabled = False    End If    End Sub         Private Sub CommandButton2_Click()    '从剪切板得到标准格式        If MyDataObject.GetFormat(1) = True Then    Label1.Caption = "标准格式 - " _    & MyDataObject.GetText(1)    End If    End Sub         Private Sub CommandButton3_Click()    '把自定义格式放到剪切板上        If TextBox1.TextLength > 0 Then    Set MyDataObject = New DataObject    MyDataObject.SetText TextBox1.Text, 233    Label1.Caption = "在DataObject中的自定义格式"    CommandButton4.Enabled = True    CommandButton2.Enabled = False    End If    End Sub         Private Sub CommandButton4_Click()    '从剪切板得到自定义格式        If MyDataObject.GetFormat(233) = True Then    Label1.Caption = "自定义格式 - " _    & MyDataObject.GetText(233)    End If    End Sub         Private Sub UserForm_Initialize()    CommandButton2.Enabled = False    CommandButton4.Enabled = False    End Sub

     

  • Copy方法、GetFromClipboard方法、GetText方法和DataObject对象示例
    本示例演示从文本框到剪贴板,从剪贴板到DataObject对象以及从DataObject对象到另一个文本框的数据移动。GetFromClipboard方法把数据从剪贴板传输到DataObject对象。该示例还使用了Copy方法和GetText方法。
    示例窗体如下图4所示,带有两个文本框和一个命令按钮。单击命令按钮,将把文本从一个文本框移至另一个文本框。

    图4:Copy、GetFromClipboard、GetText和DataObject对象示例窗体
    窗体模块中的代码如下:

     

    Dim MyData as DataObject         Private Sub CommandButton1_Click()    '在把文本复制到剪切板之前,需要选定一段文本        TextBox1.SelStart = 0    TextBox1.SelLength = TextBox1.TextLength    TextBox1.Copy         MyData.GetFromClipboard    TextBox2.Text = MyData.GetText(1)    End Sub         Private Sub UserForm_Initialize()    Set MyData = New DataObject    TextBox1.Text = "移动数据到剪贴板,然后到DataObject,接着到另一文本框!"    End Sub

     

  • 列表框控件、DataObject对象、MouseMove事件和StartDrag方法、SetText方法示例
    本示例使用DataObject对象来包含拖动文本,演示从一个列表框到另一个列表框的拖放操作。在MouseMove事件中使用SetText方法和StartDrag方法来完成拖放操作。
    示例窗体如下图5所示,带有两个列表框。

    图5:从一个列表框中拖动数据并放置到另一个列表框中
    窗体模块代码如下:

     

    Private Sub ListBox2_BeforeDragOver(ByVal Cancel As _    MSForms.ReturnBoolean, ByVal Data As _    MSForms.DataObject, ByVal X As Single, _    ByVal Y As Single, ByVal DragState As Long, _    ByVal Effect As MSForms.ReturnEffect, _    ByVal Shift As Integer)    Cancel = True    Effect = 1    End Sub         Private Sub ListBox2_BeforeDropOrPaste(ByVal _    Cancel As MSForms.ReturnBoolean, _    ByVal Action As Long, ByVal Data As _    MSForms.DataObject, ByVal X As Single, _    ByVal Y As Single, ByVal Effect As _    MSForms.ReturnEffect, ByVal Shift As Integer)    Cancel = True    Effect = 1    ListBox2.AddItem Data.GetText    End Sub         Private Sub ListBox1_MouseMove(ByVal Button As _    Integer, ByVal Shift As Integer, ByVal X As _    Single, ByVal Y As Single)    Dim MyDataObject As DataObject    If Button = 1 Then    Set MyDataObject = New DataObject    Dim Effect As Integer    MyDataObject.SetText ListBox1.Value    Effect = MyDataObject.StartDrag    End If    End Sub         Private Sub UserForm_Initialize()    Dim i As Long    For i = 1 To 10    ListBox1.AddItem "Choice " _    & (ListBox1.ListCount + 1)    Next i    End Sub

     

  • DataObject对象和“剪贴板”的区别
    DataObject对象和“剪贴板”都提供了将数据从一处移到另一处的方法。作为应用程序开发人员,无论是使用DataObject对象还是使用“剪贴板”,都要记住下列几项要点:

     

    • 只要各项数据具有不同的数据格式,DataObject对象和“剪贴板”就都可以同时保存多项数据。但是如果已经有数据使用了要保存数据的格式,则保存这个新数据,并丢弃原来的数据。
    • “剪贴板”支持图片格式和文本格式。而DataObject对象目前只支持文本格式。
    • 只有应用程序运行时,DataObject对象才存在;而“剪贴板”则是始终运行的(与正在运行的操作系统同时存在)。这意味着,将数据放到“剪贴板”后,如果关闭了应用程序,“剪贴板”上的数据不会丢失。DataObject对象则没有这个功能。如果关闭应用程序,该应用程序放置在DataObject对象上的数据就会丢失。
    • DataObject对象是一个标准的OLE对象,而“剪贴板”不是。这意味着,“剪贴板”支持标准的移动操作(复制、剪切和粘贴),但不支持拖放操作。如果需要应用程序支持拖放操作,就必须使用DataObject对象。

      提示 当用SetText方法将数据移动到“剪贴板”或DataObject对象时,可定义自己的数据格式名称。这样便于区分是应用程序移动的文本还是用户移动的文本。

示例文档下载:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VBA窗体-搭建一个简单的登录界面
vbaCommandButton 常用属性+方法记录:
VBA常用代码解析(第三十二讲)
文本框控件的主要属性
Excel之VBA常用功能应用篇:复制剪贴板内容到工作表中
VBA编程,如何实现窗体间值传递,认真学好这一篇,真的不难
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服