当复制粘贴从Excel到记事本给双引号

我试图从Excel中的值在单元格中创build一个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的数字。模式string包含:其中位于('Value1','Value2')中的merchant_name

我已经生成了这样的模式string

 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查询以避免混淆

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

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

另一种方法是像现在这样生成H16,然后将创build的值复制到另一个单元格(我将使用J16作为例子),用空格replace所有的vbCrLF ,然后将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视为空白,因此不会在乎它们是否被replace为空格。


注意: 对另一个问题的这个答案显示如何直接复制文本到剪贴板,而不通过中间单元格。

我想打破这就是为什么我使用vbCrLf,这导致了问题。 我已经想出了一个工作。 而不是vbCrLf我已经使用pipe道分隔符(“|”),并粘贴在单元格上的值。 然后使用文本列function我已经分开查询。

 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