2010-05-13 2 views
1

여러 장의 통합 문서가 하나 있습니다. 두 번째 시트의 목록 상자 (셀에서 정적 데이터 가져 오기)를 채우고 단추를 클릭하면 제대로 실행됩니다.명명 된 범위 나누기 코드

목록 상자에 명명 된 범위를 채우면 목록 상자에 원하는 방식으로 채워지지만 코드에서 목록 상자에서 아무 것도 선택하지 않았다고 생각하기 때문에 오류가 발생합니다. 따라서 "title"대신 ""를 통과합니다.

이것은 일반적인 문제입니까? 명명 된 범위는 데이터를 목록 상자로 전달하기 때문에 문제가되지 않으며 목록 상자에 포커스가 없어지면 셀의 내용을 셀 A1에 내뱉기 때문에 데이터를 선택한다는 것을 알았습니다.

목록 상자의 내용을 Msg1로 설정 한 것이 낯선 것은 무엇입니까? 그래서 A1은 Msg1 (실제로 목록 상자에서 선택한 것)으로 채워집니다. 하지만 코드에서 Msg1을 사용하려고하면 Msg1이 ""라고 알려줍니다. 다시 말하지만, 이것은 동적 명명 된 범위를 사용할 때만 발생하며 K1 : K9 셀의 정적 데이터와는 다릅니다. 문자열

희미한 STRSQL로

개인 기능 strEndSQL1로 문자열

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

목록 상자를 읽는 코드를 표시하십시오. –

+0

시트 특정 명명 된 범위를 사용했거나 통합 문서에 중복 된 명명 된 범위가있을 수 있습니다. –

+0

글쎄, 나는 목록 상자에서 잘 작동하도록 명명 된 범위를 얻을 수 있었다. (목록 상자에서 선택을 클릭하자마자 포커스를 잃을 때가 아니라 A1이 채워진다.). 이름있는 범위 또는 목록 상자의 설정에서 뭔가 있다고 생각할 수 있지만이를 고정 할 가능성이 너무 많습니다. –

답변

1

난 당신이 목록 상자가에서인지 목록 상자를 작성, 또는있는 방법을 잘 모르겠어요 양식 도구 모음 또는 제어 도구 상자. 후자의 경우 여기에 값을 채우고 가져 오는 예제가 있습니다. Value 속성을 사용하면 BoundColumn 속성에 설정 한 내용에 따라 달라집니다

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 

참고.

+0

컨트롤 도구 상자에 있습니다. 명명 된 범위가 아닌 경우 작동하는 비슷한 코드가 있습니다. 왜 차이가 있을까요? 일단 거기에 있으면 그냥 거기 있어야하지 않습니까? – Daniel

+0

ListFillRows 및 LinkedCell 속성을 위 코드와 같이 채우지 않고 사용하는 경우 문제의 원인 일 수 있습니다. 오래 전에 이상한 행동으로 인해 재산을 맹세했습니다. 내가 본 행동이 당신이 보는 것과 일치하는지는 기억하지 못한다. 그러나 나는 단지 그것들을 사용하지 않을 정도로 충분히 이상했다. –