2013-03-12 5 views
0

Назад к vb6 и msflexgrid, есть слабость при вставке текста в этот элемент управления. Если пользователь хотел, например, вставить массив 2 * 3 в msflexgrid, он должен выбрать 2 строки и 3 столбца для вставки данных, иначе только одна ячейка заполнит msflexgrid (insted из 6 ячеек). Я обнаружил, что если i 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 в буфер обмена, и я не могу сделать differencess между ними в этом sub. ниже приведен скриншот из них в MSWord:

enter image description here

Стрелка п, что картина являются символы табуляции я не имею никаких проблем при подсчете их и результаты одинаковы для всех текстовых массивов. но знаки абзаца сложны, и я знал, что во втором массиве они «vbnewline», но в первом массиве мой код не может их найти и предположим, что у меня есть только одна строка. Знаете ли вы, что лучший способ получить равный результат при подсчете этих столбцов и строк?

+2

кстати: не использовать варианты, если вы не должны ... если вам нужен массив строк вы можете «тусклый strLines() в виде строки " – Hrqls

ответ

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 в ней и нажмите на команды команда2, а затем на 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 

Разница между теми, 2 является то, что первенствует используется vbCrLF для разделения строк, в то время как MSFlexGrid используется только vbCr

Я думаю, что вы должны быть в порядке, когда вы удалите все vbLF из буфера обмена перед обработкой его:

strText = Replace(strText, vbLf, "") 

После этого как методы ввода использовать только vbCR в качестве строки разделителей

+1

в вашем примере фотографии я вижу арабские цифры. я не знаю, если арабские версии окна буфера обмена и excel работают по-другому ... – Hrqls

+0

Спасибо, человек. Разница и «strText = Replace (strText, vbLf,« ») - это ключ к вашему ответу –

+0

рад, что это сработало, и это не было никакой разницей в операционной системе :) – Hrqls

Смежные вопросы