2017-02-02 94 views
1

我有這樣的:VBA查詢循環的Scripting.Dictionary

Set dict = CreateObject("Scripting.Dictionary") 

    rn = 2 
    Do While ThisWorkbook.Sheets("1").Range("B" & rn).Value <> "" 
     If (ThisWorkbook.Sheets("1").Range("B" & rn).Value <> "") Then dict("&&1") = dict & ThisWorkbook.Sheets("1").Range("B" & rn).Value & ", " 
     rn = rn + 1 
    Loop 

但是,這並不工作,我在VBA出現錯誤450。

它需要做的事情如下:B列中的每個值(如果不是空的)都必須添加到用逗號分隔的dict中。在最後一行之後,它可能不會設置逗號。

我認爲我在正確的方式,但有缺失的東西。

+2

「Dictionary」通常用於存儲唯一密鑰,然後通過每個唯一密鑰添加與該唯一密鑰相關的值。你爲什麼需要一個'Dictionary'來完成你的任務?你想達到什麼目的? –

+0

隨着字典我想從所有costumers搜索他們的地址。所以我完全用它來解釋你的解釋。 – user7219039

回答

0

要得到所有字符串中的唯一值可以按如下

請注意,您應該使用ThisWorkbook.Sheets(1)ThisWorkbook.Sheets("1")

請使用MsgBox Left$(strOut, Len(strOut) - 2)修復後非必需部分修改代碼

Sub a() 
Dim ws As Worksheet 
Set dict = CreateObject("Scripting.Dictionary") 
Dim strOut As String 

Set ws = Sheets(1) 

    rn = 2 
    Do While ws.Range("B" & rn).Value <> "" 
     If Len(ws.Range("B" & rn).Value) > 0 Then 
      If dict.exists(ws.Range("B" & rn).Value) Then 
       Else 
       dict.Add ws.Range("B" & rn).Value, 1 
      strOut = strOut & (ws.Range("B" & rn).Value & ", ") 
      End If 
     End If 
     rn = rn + 1 
    Loop 
    MsgBox strOut 
End Sub 
+0

這真棒,它的工作!我有幾個問題要更好地理解它。你用strOut來組合所有的值,爲什麼不是dict(「&& 1」)是一個很好的解決方案?可悲的是,在最後一個值之後放置了一個逗號,如何防止這個呢? – user7219039

+0

我用字典來存儲唯一值。雖然你可以迭代字典項來獲取值,但我直接使用循環來完成。將修復尾隨的字符! – brettdj

+0

以我自己的方式修復它,像這樣strOut = Left(strOut,Len(strOut) - 2)。可悲的是,當我用我的方法來調用它時,它不起作用。調用MOD_SQL.ExecQuery(ThisWorkbook.Path&「\ SQL Files \ Info.sql」, 「QueryResult」, dict, 「B1」, 「QueryResult」)我需要把dict放在那裏還是strOut或別的東西? – user7219039

0

只是爲了拋出更加簡潔的brettdj解決方案

Sub main() 
    Dim cell As Range 
    Dim strOut As String 

    With CreateObject("Scripting.Dictionary") 
     For Each cell In Sheets(1).Range("B2", Sheets(1).Cells(.Rows.Count, "B")).SpecialCells(xlCellTypeConstants, xlTextValues) 
      .Item(cell.Value) = 1 
     Next 
     strOut = Join(.keys, ",") 
     MsgBox strOut 
    End With 
End Sub 
+0

不幸的是,當我用我的方法來調用它時,它不起作用。調用MOD_SQL.ExecQuery(ThisWorkbook.Path&「\ SQL Files \ Info.sql」,「QueryResult」,字典,「B1」,「QueryResult」)我需要把字典放在那裏或strOut或別的東西? – user7219039

+0

這不起作用「,說什麼都沒有用,但這與你的_original_ OP完全不同,並且更爲廣泛:你可能想創建一個新帖子並提供所有必要的細節來解決問題 – user3598756

+0

我已經修復它,錯誤評論你的解決方案) – user7219039