У меня есть макрос, который будет вставляться в выбранную ячейку с несколькими строками данных из буфера обмена. Он будет вставлять новые строки для каждой строки. Столбец A и Row1 содержат заголовки, и они заполнят его для любых вставленных строк.Очистка котировок из данных буфера обмена в VBA
Sheet1
Header0 Header Header Header
Header1 Data
Header2 Data Data1
Data2 Data
Header3 Data
Иногда он добавляет дополнительные «кавычки», иногда это не так. Есть ли способ очистить данные буфера обмена без удаления законных символов цитат?
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
Возможно, не совсем дубликат, но связанный: http://stackoverflow.com/q/24910288/4996248 –
Спасибо, я смотрел на это, однако в моем случае мой источник, который я копирую, может быть из любого места не только ячейку Excel. Поэтому я просто хочу получить содержимое буфера обмена (предполагается, что пользователь уже нажал CTRL + C на что-то). – Esuriency