2015-10-14 2 views
1

Цель: с использованием VBA (excel) для заполнения буфера обмена таблицей (из списка) в отличном формате, чтобы затем вставить (ctrl + V) в excel, и значения разделяются на правильные столбцы и строки, как они были в исходном списке.Добавление элементов из списка в буфер обмена в формате excel в формате PDF

Проблема: Я не могу получить форматирование правильно; когда я вставляю содержимое своего буфера обмена в excel, каждая строка содержится в одной ячейке (первом столбце), разделенной «,» (это то, что я пытался использовать как своего рода «разделитель» - не уверен, что это правильно или нет?)

Я использую метод обходного API API для заполнения буфера обмена, и я не хочу наклеить вас на смерть с помощью кода, но вот самый важный бит (я все равно чувствую), спросите меня, нужно ли вам см. больше кода).

Private Sub btnCopyTable_Click()  

Dim I As Long 
Dim J As Long 
Dim tmp As String 
Dim arrItems() As String 
Dim clipboard As DataObject 

ReDim arrItems(0 To lbIPActions.ColumnCount - 1) 
For J = 0 To lbIPActions.ListCount - 1 
    For I = 0 To lbIPActions.ColumnCount - 1 
     On Error Resume Next ' Handles null values 
     arrItems(I) = lbIPActions.Column(I, J) 
     On Error GoTo 0 
    Next I 
    tmp = tmp & Join(arrItems, ",") & vbCrLf 
Next J 

MsgBox tmp 

ClipBoard_SetData tmp 

End sub 

Текущий выход:

1,1,Low,Controls,,LS,Do this,02-Oct-2015,Note 1,Brev 
2,1,Low,Controls,,LS,Do that,02-Oct-2015,Note 2,Brev 

Текущее состояние: У меня было немного посмотреть вокруг и нашел способ сделать это в коде для конкретного листа, но мой конец пользователь требует свободы скопировать его на многочисленные листы очень специальным образом. Я знаю, что всегда есть возможность щелкнуть правой кнопкой мыши -> импортировать текстовый мастер, но опять же лучше использовать Ctrl + V, если это возможно.

Как всегда, любая помощь/совет приветствуются, заранее.

ответ

2

Разделите свою строку на Tab в каждой строке, и она будет работать. Например:

Dim I As Long 
Dim J As Long 
Dim textItem As String 
Dim copyText As String 
Dim clipboard As DataObject 

For J = 0 To lbIPActions.ListCount - 1 
    For I = 0 To lbIPActions.ColumnCount - 1 
     textItem = vbNullString 
     On Error Resume Next ' Handles null values 
     textItem = lbIPActions.Column(I, J) 
     On Error GoTo 0 
     If I > 0 Then copyText = copyText & vbTab 
     copyText = copyText & textItem 
    Next I 
    If J < lbIPActions.ListCount - 1 Then copyText = copyText & vbNewLine 
Next J 

ClipBoard_SetData clipboardText 
+0

Работает как очарование, большое спасибо Ambie! Ответ отмечен. – ppw