2013-12-18 3 views
0

사용자 폼이있는 작은 Excel 프로젝트에서 작업 중입니다. 사용자 양식에는 Excel 워크 시트의 열 (A)에서 검색 한 회사 이름 목록이있는 콤보 상자가 있습니다 (예상대로 작동 함).Excel VBA 웹 쿼리 동작 질문

양식에 텍스트 상자가 있습니다. 드롭 다운 상자의 선택에 따라 B 열의 주식 시세표가 반환됩니다 (예상대로 작동).

다음 단계는 고장입니다. 주식 시세 표시기 값은 yahoo finance에 연결하는 웹 쿼리로 전달되고 사이트에서 데이터를 검색합니다.

문제 1 : 웹 쿼리는 양식이 닫힐 때까지 데이터를 반환하지 않습니다. 값을 "즉시"반환하고 싶습니다.

문제점 2 : 쿼리 테이블을 삭제하기 위해 스크립트를 코딩 했어도 쿼리를 실행할 때마다 새 쿼리 테이블이 작성됩니다.

Private Sub cb_Stock_Name_Change() 

Set ws = Worksheets("Stock_Info") 

With Me 
    .tb_ticker.Value = ws.cells(.cb_stock_name.ListIndex + 2, 2) 
    '.TextBox3.Value = Format(Sheet1.cells(.ComboBox1.ListIndex + 7, 9), "0%") 
    '.TextBox2.Value = Format(Sheet1.cells(.ComboBox1.ListIndex + 7, 10), "0%") 
End With 

Dim ticker As String 
Dim conn As String 

Set ws_query = Worksheets("Stock_Query") 
ticker = tb_ticker.Value 
conn = "URL;http://finance.yahoo.com/q?s=" & ticker 
Dim qt As QueryTable 

For Each qt In ws_query.QueryTables 
    qt.Delete 
Next qt 

Set qt = ws_query.QueryTables.Add _ 
(Connection:=conn, Destination:=Range("A1")) 

With qt 
    '.Connection = conn 
    '.Destination = Range("A1") 
    .WebSelectionType = xlSpecifiedTables 
    .WebFormatting = xlWebFormattingNone 
    .WebPreFormattedTextToColumns = True 
    .WebSelectionType = xlSpecifiedTables 
    .WebTables = "2" 
    .Refresh 
End With 

With Me 
    .tb_previous_close.Value = ws_query.cells(1, 2) 
End With 

End Sub 

질문 : 내 양식이 폐쇄 B)는 이전 쿼리 테이블을 삭제하지 않습니다 때까지) 반환하지 않습니다 내 코드를 잘못 무엇입니까?

+0

가능한 솔루션을 작동하는지 알려줘 샘플 - 양식 Modal'은 ... 당신이 그것을'ModeLess'을해야 할 것'이라고 가정 ...' Userfomr1.Show VBModeless' –

+0

안녕 카지는 ... 여기에 다른 코드 : 열기 통합 문서 '개인 서브 Workbook_Open() UserForm1.Show 끝 Sub' 양식 초기화 '개인 서브 UserForm_Initialize() 희미한 rng_Stock_Name으로 범위 Dim rn g_Ticker으로 범위 설정 WS = 워크 시트 ("Stock_Info") ws.Range에서 각 rng_Stock_Name를 들어 ("COMPANY_NAME") Me.cb_stock_name.AddItem rng_Stock_Name.Value 다음 rng_Stock_Name 끝 Sub'는 그것은이다 모듈이 아닌 UserForm. 이게 도움이 되나요? – cquadrini

+0

내가 언급했듯이 ... 'WorkForm_Open()'에서'UserForm1.Show'를'UserForm1.Show VBModeless'로 바꿉니다. –

답변

1

문제 1 - 의견별로 해결됨 (양식 속성을 모덜리스로 지정해야 함). 폼의 모드 속성에 대한 자세한 내용은 MSDN에서 확인할 수 있습니다. 참고로, 기본적으로 양식은 모달입니다.

문제 2 - qt의 .Name 속성을 지정해야합니다. 이

With qt 
    .Name = "StockWatch" 
    .FieldNames = True 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = False 
    .RefreshOnFileOpen = False 
    .BackgroundQuery = True 
    .RefreshStyle = xlOverwriteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .WebSelectionType = xlSpecifiedTables 
    .WebFormatting = xlWebFormattingAll 
    .WebTables = "2" 
    .WebPreFormattedTextToColumns = True 
    .WebConsecutiveDelimitersAsOne = False 
    .WebSingleBlockTextImport = False 
    .WebDisableDateRecognition = False 
    .WebDisableRedirections = False 
    .Refresh BackgroundQuery:=False 
End With 

이이 문제 일에 당신

+0

안녕 Pankaj, 고마워. 이름 속성은 전체 문제를 해결했습니다. – cquadrini