2017-02-08 5 views
1

У меня есть макрос, который будет вставляться в выбранную ячейку с несколькими строками данных из буфера обмена. Он будет вставлять новые строки для каждой строки. Столбец A и Row1 содержат заголовки, и они заполнят его для любых вставленных строк.Очистка котировок из данных буфера обмена в VBA

Sheet1 
Header0 Header Header Header 
Header1 Data   
Header2 Data Data1 
       Data2 Data 
Header3 Data 

Иногда он добавляет дополнительные «кавычки», иногда это не так. Есть ли способ очистить данные буфера обмена без удаления законных символов цитат?

cellContent array

Sub ClipboardToRows() 
' Split multi-lined data into separate rows for the current selection 
' Assumption is that Column A contains row headers 
Dim currRange As Range, currCell As Range, pasteCell As Range 
Dim rowHeader As String 
Dim cellContent 
Dim cellStr 

Dim clipboard As MSForms.DataObject 
Dim str1 As String 
Set clipboard = New MSForms.DataObject 

clipboard.GetFromClipboard 
On Error GoTo clipEmpty 
str1 = Trim(clipboard.GetText()) 

Application.CutCopyMode = False 
Set currCell = Selection 

rowHeader = Cells(currCell.Row, 1).Value 
'Skip Column A 
If (currCell.Column > 1) Then 
    cellContent = Split(str1, Chr(10)) 
    For i = LBound(cellContent) To (UBound(cellContent)) 
     cellStr = Trim(cellContent(i)) 
     If Len(cellStr) > 0 Then 
      Set pasteCell = currCell.Offset(i) 
      'Set current cell with line 1 
      If i = 0 Then 
       currCell.Value = cellContent(i) 
      Else 
       'If next cell down is not empty or the row header is different 
       If (Not IsEmpty(pasteCell.Value)) Or (Cells(pasteCell.Row, 1).Value <> rowHeader) Then 
        pasteCell.EntireRow.Insert 
        Cells(pasteCell.Row - 1, 1).Value = rowHeader 
       End If 
       currCell.Offset(i).Value = cellContent(i) 

      End If 
     End If 
    Next 
End If 

clipEmpty: 
    If Err <> 0 Then MsgBox "There was an issue with pasting. Please try again." 

End Sub 
+0

Возможно, не совсем дубликат, но связанный: http://stackoverflow.com/q/24910288/4996248 –

+0

Спасибо, я смотрел на это, однако в моем случае мой источник, который я копирую, может быть из любого места не только ячейку Excel. Поэтому я просто хочу получить содержимое буфера обмена (предполагается, что пользователь уже нажал CTRL + C на что-то). – Esuriency

ответ

0

Не совсем.

Если двойные кавычки несовместимо добавляются в буфер обмена в процессе копирования И есть законные цитаты в исходных данных, которые вы хотите сохранить, нет никакого способа просто взглянуть на то, что в настоящее время находится в буфере обмена, чтобы точно знать, что был в исходных данных и что было добавлено в процессе копирования.

Лучшее, что вы можете сделать, это попытаться распознать любые шаблоны цитат, добавленных неправильно, и попытаться их удалить.

Например, проверьте каждое значение, чтобы определить, есть ли двойная кавычка в начале и/или в конце, и в этом случае удалите первый и/или последний символы из этого значения.

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