Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中清除剪贴板数据中的引号_Vba_Excel_Clipboard_Clipboarddata - Fatal编程技术网

在VBA中清除剪贴板数据中的引号

在VBA中清除剪贴板数据中的引号,vba,excel,clipboard,clipboarddata,Vba,Excel,Clipboard,Clipboarddata,我有一个宏,可以将剪贴板中的多行数据粘贴到选定的单元格中。它将为每一行插入新行。列A和行1包含标题,它将填充任何插入的行 Sheet1 Header0 Header Header Header Header1 Data Header2 Data Data1 Data2 Data Header3 Data 有时会添加额外的“”引号,有时不会。有没有一种方法可以在不删除合法引号字符的情况下清除剪贴板数据 Sub-ClipboardTo

我有一个宏,可以将剪贴板中的多行数据粘贴到选定的单元格中。它将为每一行插入新行。列A和行1包含标题,它将填充任何插入的行

Sheet1
Header0 Header  Header  Header
Header1 Data        
Header2 Data    Data1
                Data2   Data
Header3 Data
有时会添加额外的“”引号,有时不会。有没有一种方法可以在不删除合法引号字符的情况下清除剪贴板数据

Sub-ClipboardToRows()
'将多行数据拆分为当前选择的单独行
'假设列A包含行标题
Dim currRange作为范围,currCell作为范围,pasteCell作为范围
将行标题设置为字符串
暗淡细胞含量
Dim cellStr
将剪贴板设置为MSForms.DataObject
将str1设置为字符串
设置剪贴板=新建MSForms.DataObject
剪贴板.GetFromClipboard
关于错误转到clipEmpty
str1=Trim(clipboard.GetText())
Application.CutCopyMode=False
设置当前单元格=选择
rowHeader=单元格(currCell.Row,1).Value
'跳过A列
如果(currCell.Column>1),则
cellContent=Split(str1,Chr(10))
对于i=LBound(cellContent)到(UBound(cellContent))
cellStr=修剪(cellContent(i))
如果Len(cellStr)>0,则
设置粘贴单元=当前单元偏移量(i)
'使用第1行设置当前单元格
如果i=0,那么
currCell.Value=cellContent(i)
其他的
'如果下一个单元格不为空或行标题不同
如果(非IsEmpty(pasteCell.Value))或(Cells(pasteCell.Row,1.Value rowHeader),则
pasteCell.EntireRow.Insert
单元格(pasteCell.Row-1,1)。值=行标题
如果结束
currCell.Offset(i).Value=cellContent(i)
如果结束
如果结束
下一个
如果结束
阴蒂:
如果出现错误0,则MsgBox“粘贴时出现问题。请重试。”
端接头
不太可能

如果在复制过程中,双引号不一致地添加到剪贴板中,并且源数据中有您想要保留的合法引号,那么仅查看剪贴板中当前的内容无法确定原始数据中的内容以及复制过程中添加的内容

您所能做的最好的事情就是尝试识别任何错误添加的引号模式,并尝试删除这些模式

例如,测试每个值以确定开头和/或结尾是否有双引号,在这种情况下,请从该值中删除第一个和/或最后一个字符。

实际上没有

如果在复制过程中,双引号不一致地添加到剪贴板中,并且源数据中有您想要保留的合法引号,那么仅查看剪贴板中当前的内容无法确定原始数据中的内容以及复制过程中添加的内容

您所能做的最好的事情就是尝试识别任何错误添加的引号模式,并尝试删除这些模式


例如,测试每个值以确定开头和/或结尾是否有双引号,在这种情况下,请从该值中删除第一个和/或最后一个字符。

可能不是完全重复,但相关:谢谢我正在查看,然而,在我的例子中,我复制的源可能来自任何地方,而不仅仅是Excel单元格。所以我只想获取剪贴板的内容(假设用户已经点击了CTRL+C)。可能不是完全重复,但相关:谢谢,我正在查看,但是在我的情况下,我复制的源可能来自任何地方,而不仅仅是Excel单元格。所以我只想获取剪贴板的内容(假设用户已经按了CTRL+C键)。
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