2013-03-12 44 views
0

回到vb6和msflexgrid,粘貼文本到這個控件有一個弱點。如果用戶想要在msflexgrid中粘貼一個2 * 3的數組,他應該選擇2行和3列來粘貼數據,否則只有一個單元格會填充msflexgrid(由6個單元格組成)。 我發現如果我colud拆分剪貼板並計算它的行​​和列這個問題應該解決(基於數組大小選擇msflexgrid單元格)。 我創建了「editpaste」 SUB:vb6和msflexgrid,如何統計剪貼板文本中的列和行

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:

enter image description here

的箭頭n表示的畫面是製表符我沒有問題,在對其計數,其結果是相等的所有文本陣列。但段落標誌是棘手的,我知道在第二個數組中他們是「vbnewline」,但在第一個數組中,我的代碼找不到它們,並假設我只有一行。 你知道一個更好的方法來得到相同的結果來計算這些列和行嗎?

+2

BTW:不要使用變量,如果你沒有......如果你需要一個字符串數組,你可以「模糊strLines()作爲字符串「 – Hrqls 2013-03-12 10:02:31

回答

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在它和單擊Command然後Command上則文本框中顯示:

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

當我把同樣的數據在Excel中複製它,然後單擊Command,然後在文本框中顯示:

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

這些2之間的區別是Excel中使用vbCrLF的行分開,而MSFlexGrid控件只用VBCR

我覺得你應該確定,當你處理之前從剪貼板中的數據刪除所有vbLF:

strText = Replace(strText, vbLf, "") 

這兩種輸入法後只使用VBCR作爲行分隔符

+1

在你的示例圖片中,我看到了阿拉伯數字。我不知道windows剪貼板和excel的阿拉伯語版本是否以不同的方式工作... – Hrqls 2013-03-12 10:10:51

+0

謝謝你的男人。差異和「strText =替換(strText,vbLf,」「)」是你的答案的關鍵 – 2013-03-12 10:35:36

+0

很高興它的工作,並沒有任何操作系統的差異:) – Hrqls 2013-03-12 10:51:41