回到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到剪贴板的数组,我不能在它们之间区别。 bellow是他们进入MSword的截图:
图片中的箭头是TAb字符我在计算它们时没有问题,并且所有文本数组的结果都相同。但段落标志是棘手的,我知道在第二个数组中他们是“vbnewline”但在第一个数组中我的代码找不到它们,并假设我只有一行。 您是否知道在计算这些列和行时获得相同结果的更好方法?
答案 0 :(得分: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作为行分隔符