0

回到 vb6 和 msflexgrid,将文本粘贴到此控件有一个弱点。例如,如果用户想要在 msflexgrid 中粘贴一个 2*3 数组,他应该选择 2 行和 3 列来粘贴数据,否则只有一个单元格将填充 msflexgrid(插入 6 个单元格)。我发现如果我 colud 拆分剪贴板并计算它的行​​和列,这个问题应该解决(根据数组大小选择 msflexgrid 单元格)。我创建了“editpaste”SUB:

Private Sub EditPaste()
Dim ARRAYLINES As Variant ' array with the lines
Dim ARRAYCELLS As Variant ' array with the cells of 1 line to count the cols needed
Dim ARRAYLINESidx As Integer

   '§ put clipboard in a  textbox named "cliper"
   With cliper
      .Text = Clipboard.GetText
      If .Text = "" Then
         Exit Sub
      Else
         ARRAYLINES = Split(.Text, Chr(13)) 'i also used the Chr(10) vbnewline  andvbCRLF to count the lines
      End If
   End With
   '§ put textbox in grid
   If ARRAYLINES(0) = "" Then

      Exit Sub
   Else
      ARRAYCELLS = Split(ARRAYLINES(0), vbTab) 'to count the columns
  msgbox UBound(ARRAYLINES) & UBound(ARRAYCELLS)
   End If
   '§ clear array
   ReDim ARRAYLINES(0)
   ReDim ARRAYCELLS(0)

End Sub

但我的问题是我有两种类型的文本数组(文本矩阵)。从 msflixgrid 到剪贴板的数组和从 Excell 到剪贴板的数组,我无法在该子目录中区分它们。下面是他们在 MSword 中的截图:

在此处输入图像描述

图片中的箭头 n 是 TAb 字符,我对它们进行计数没有问题,并且所有文本数组的结果都相同。但是段落符号很棘手,我知道在第二个数组中它们是“vbnewline”,但是在第一个数组中我的代码找不到它们并假设我只有一行。您是否知道在计算这些列和行时获得相同结果的更好方法?

4

1 回答 1

1

我使用以下代码查看剪贴板数据:

'1 form with
'  1 msflexgrid control
'  1 textbox control
'  2 command buttons

Option Explicit

Private Sub Command1_Click()
  Dim strText As String
  strText = Clipboard.GetText
  ShowAscii strText
End Sub

Private Sub Command2_Click()
  Clipboard.SetText MSFlexGrid1.Clip
End Sub

Private Sub Form_Load()
  Dim intRow As Integer, intCol As Integer
  With MSFlexGrid1
    For intRow = 0 To .Rows - 1
      For intCol = 0 To .Cols - 1
        .TextMatrix(intRow, intCol) = CStr(100 * intRow + intCol)
      Next intCol
    Next intRow
  End With 'MSFlexGrid1
End Sub

Private Sub ShowAscii(strText As String)
  Dim intChar As Integer
  Dim strShow As String
  strShow = ""
  For intChar = 1 To Len(strText)
    strShow = strShow & Right$("00" & Hex$(Asc(Mid$(strText, intChar, 1))), 2) & " "
  Next intChar
  Text1.Text = strShow
End Sub

当我选择其中包含 200、201、300、301 的单元格并单击 command2,然后单击 command1 时,文本框显示:

32 30 30 09 32 30 31 0D 33 30 30 09 33 30 31 

当我将相同的数据放入excel并复制它,然后单击command1然后文本框显示:

32 30 30 09 32 30 31 0D 0A 33 30 30 09 33 30 31 0D 0A 

两者的区别在于 excel 使用 vbCrLF 来分隔行,而 MSFlexGrid 只使用 vbCr

我认为在处理之前从剪贴板数据中删除所有 vbLF 应该没问题:

strText = Replace(strText, vbLf, "")

之后两种输入法都只使用 vbCR 作为行分隔符

于 2013-03-12T10:01:08.133 回答