2016-10-27 141 views
1

我想從Excel中的值在單元格中創建一個SQL查詢。但從我複製單元格並粘貼到任何窗口時,它會給我雙引號。有什麼辦法可以消除這一點。當從Excel複製粘貼到記事本給出雙引號

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 contins號碼,如24或25所述的圖案列包含: 其中MERCHANT_NAME在(「值1」,「值2」)

我已產生的模式串這樣

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

+0

的[從細胞複製時漏下引號(http://stackoverflow.com/questions/24910288/leave-out-quotes-when-copying-from-cell) – Vasily

回答

0

我想打破的是,爲什麼我用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 
1

問題是由在生成文本中的換行符引起的。如果您將a Alt-Enter b鍵入單元格,然後將單元格複製到NotePad,則可以看到相同的效果。

解決此問題的最簡單方法是在生成單元格H16時不包括vbCrLf序列。

另一種方法是像當前那樣生成H16,然後將創建的值複製到另一個單元格中(我將使用J16作爲示例),將空格替換爲所有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視爲空白,因此它不會在乎它們是否被替換爲空格。


注:This answer to another question展示瞭如何直接文本複製到剪貼板,不通過中間的細胞去。

+0

我想查詢可能的複製在不同的路線。當我將查詢粘貼到我的SQL編輯器時,它的屏幕就會熄滅,而且很難理解。我找到了一份我在這裏發佈的工作。感謝您的幫助以瞭解問題的原因。 –