【问题标题】:When Copy pasting from excel to notepad gives double quotes当从 excel 复制粘贴到记事本时给出双引号
【发布时间】:2017-03-09 18:56:43
【问题描述】:

我正在尝试根据 excel 中的值在单元格中创建 SQL 查询。但是,当我复制单元格并粘贴到任何窗口时,它会给我双引号。有什么办法可以去掉。

Range("H16").Value = "Select distinct(description), merchant_name from(" & vbCrLf & "select distinct description, merchant_name from table_phase" & Range("G3").Value
        Range("H16").Value = Range("H16").Value & vbCrLf & patternString & vbCrLf & "Union all" & vbCrLf
        Range("H16").Value = Range("H16").Value & "select distinct description, merchant_name from table_phase" & Range("G4").Value
        Range("H16").Value = Range("H16").Value & vbCrLf & patternString & vbCrLf & ") order by merchant_name, description"
        Range("H16").Value = Trim(Range("H16").Value)
        Range("H16").WrapText = True
        Range("H16").Select
        Selection.Copy

范围 G4 和 G3 包含 24 或 25 等数字。模式字符串包含: 其中商家名称在 ('Value1','Value2')

我已经生成了这样的模式字符串

patternString = "where merchant_name in ("
        For i = 1 To UBound(addedMerch, 1) - 1
            patternString = patternString & " '" & addedMerch(i, 1) & "',"

            If (i - (4 * (i \ 4))) = 0 Then
                patternString = patternString & vbCrLf
            End If
        Next

如果模式太多,我会使用下一行字符。我想在不同的行获取 SQL 查询以避免混淆

【问题讨论】:

标签: vba excel


【解决方案1】:

我想换行,这就是我使用 vbCrLf 的原因,这导致了问题。我想出了一个解决办法。我没有使用 vbCrLf,而是使用了管道分隔符(“|”)并将值粘贴到单元格上。然后使用文本到列功能我已经分离了查询。

qryString = "Select distinct(description), merchant_name from(" & "|" & "select distinct description, merchant_name from table" & Range("G3").value
        qryString = qryString & "|" & patternString & "|" & "Union all" & "|"
        qryString = qryString & "select distinct description, merchant_name from table" & Range("G4").value
        qryString = qryString & "|" & patternString & "|" & ") order by merchant_name, description"
        qryString = Trim(qryString)
        Range("H14").value = qryString
        Range("H14").WrapText = False
        Range("H14").Select
        Selection.TextToColumns Destination:=Range("I14"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _
        1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12 _
        , 1), Array(13, 1)), TrailingMinusNumbers:=True
        Range("I14").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Selection.Copy
        Range("H16").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True

【讨论】:

    【解决方案2】:

    问题是由生成的文本中的换行符引起的。如果在单元格中输入a Alt-Enter b,然后将单元格复制到记事本中,则可以看到相同的效果。

    解决此问题的最简单方法是在生成单元格 H16 时不包含 vbCrLf 序列。

    另一种方法是像当前一样生成 H16,然后将创建的值复制到另一个单元格(我将使用 J16 作为示例),将所有vbCrLFs 替换为空格,然后复制J16 的值到剪贴板。

    Range("H16").Value = "Select distinct(description), merchant_name from(" & vbCrLf & "select distinct description, merchant_name from table_phase" & Range("G3").Value
    Range("H16").Value = Range("H16").Value & vbCrLf & patternString & vbCrLf & "Union all" & vbCrLf
    Range("H16").Value = Range("H16").Value & "select distinct description, merchant_name from table_phase" & Range("G4").Value
    Range("H16").Value = Range("H16").Value & vbCrLf & patternString & vbCrLf & ") order by merchant_name, description"
    Range("H16").Value = Trim(Range("H16").Value)
    Range("H16").WrapText = True
    
    Range("J16").Value = Replace(Range("H16").Value, vbCrLf, " ")
    Range("J16").Copy
    

    SQL 将 CR/LF 视为空格,因此它不会关心它们是否被空格替换。


    注意:This answer to another question 展示了如何将文本直接复制到剪贴板,而无需通过中间单元格。

    【讨论】:

    • 我希望查询位于不同的行中。当我将查询粘贴到我的 SQL 编辑器时,它会出现在屏幕之外并且很难理解。我找到了一个我在此处发布的工作。感谢您帮助了解问题的原因。
    猜你喜欢
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多