2010-05-13 42 views
1

我有一個工作簿,有幾張紙。我在第二張紙上填充列表框(從單元格拉出靜態數據),單擊一個按鈕並運行正常。命名範圍中斷代碼

當我使用命名範圍填充列表框時,列表框填充了我想要的方式,但由於代碼認爲我沒有選擇列表框中的任何內容,即使我這樣做,我也得到一個錯誤。所以它通過「」而不是「標題」。

這是常見問題?命名的範圍不是問題,因爲它將數據傳遞給列表框,並且我知道它正在選擇數據,因爲只要列表框失去焦點,它就會將單元格的內容吐出到單元格A1中。

更奇怪的是,我將列表框的內容設置爲Msg1。所以A1得到填充Msg1(我實際選擇列表框中)。但是當我嘗試在代碼中使用Msg1時,它告訴我Msg1是「」。再次,這隻發生在我使用動態命名範圍時,而不是單元格K1:K9中的靜態數據。

專用功能strEndSQL1作爲字符串

昏暗STRSQL作爲字符串

strSQL = "" 
     'Create SQL statement 
    strSQL = "FROM (SELECT * FROM dbo.Filter WHERE ID = " & TextBox1.Text & " And Source IN (" & Msg1 & ")) a FULL OUTER JOIN " 
    strSQL = strSQL & "(SELECT * FROM dbo.Filters WHERE ID = " & TextBox2.Text & " And Source IN (" & Msg1 & ")) b " 
    strSQL = strSQL & "ON a.Group = b.Group  
strEndSQL = strSQL 

端功能

+1

請顯示讀取列表框的代碼。 – 2010-05-13 17:04:13

+0

您可能已使用工作表特定的命名範圍,或者在工作簿中具有重複的命名範圍。 – 2010-05-13 18:06:42

+0

嗯,我能夠得到一個命名的範圍工作就好了列表框(雖然只要我點擊列表框中的選擇我得到A1填充,而不是當我失去焦點)。我只能認爲它是在命名範圍或列表框的設置中,但有太多的可能性將其固定下來。 – 2010-05-13 18:20:46

回答

1

我不知道你是如何填充列表框或列表框是否是從窗體工具欄或控件工具箱。如果是後者,下面是填充和檢索值的示例。

Sub FillListBox() 

    Sheet1.ListBox1.List = Sheet1.Range("MyNamedRange").Value 

End Sub 

Sub MakeSQL() 

    Dim sSql As String 
    Dim Msg1 As String 

    With Sheet1.ListBox1 
     If .ListIndex > -1 Then 
      Msg1 = .Value 
     End If 
    End With 

    sSql = "SELECT * FROM MyTable WHERE ID=" & Msg1 

    Debug.Print sSql 

End Sub 

請注意,Value屬性將取決於您在BoundColumn屬性中設置的內容。

+0

它在控制工具箱中。我有類似的代碼,它不是一個命名的範圍。爲什麼會有差異。一旦它在那裏,它不應該在那裏嗎? – Daniel 2010-05-14 17:37:29

+0

如果您使用ListFillRows和LinkedCell屬性而不是使用上面的代碼填充它,它可能是您的問題的根源。由於奇怪的行爲,我很久以前就把這些東西發給了屬性。我不記得我看到的行爲是否與你所看到的行爲相符,但是我剛剛放棄使用它們,這足夠奇怪。 – 2010-05-14 19:03:30