엑셀 스프레드 시트에서 웹 쿼리를 수행하고 싶습니다. 그러나 워크 시트에 데이터를 표시하고 싶지 않습니다. VBA 배열에 직접 저장하고 싶습니다. 엑셀 스프레드 시트 셀 대신 VBA 변수로 웹 쿼리 데이터 가져 오기
나는 인터넷 Return Sql Query Results To Vba Variable Instead Of Cell 다음ODBC 연결과 링크에서 코딩 솔루션에이 예제를 발견했다. 나는 이것을 웹 쿼리 솔루션에 적용하고 싶다. 그것을 수정하는 방법을 모르겠습니다.
Dim ws As Workspace, db As Database, rs As Recordset
Dim sqlstr As String, ToolID As String
Private Sub OpenODBC(ws As Workspace, db As Database, dsn As String, id As String, pwd As String)
Dim dsnStr As String
Set ws = CreateWorkspace("ODBCWorkspace", "", "", dbUseODBC)
Workspaces.Append ws
ws.LoginTimeout = 300
dsnStr = "ODBC;DSN=" & dsn & ";UID=" & uid & ";PWD=" & pwd
Set db = ws.OpenConnection(dsn, dbDriverNoPrompt, False, dsnStr)
db.QueryTimeout = 1800
End Sub
Sub Tool()
On Error Goto errhandler:
Call OpenODBC(ws, db, "AC", "USERNAME", "PASSWORD")
sqlstr = "SELECT FHOPEHS.LOT_ID, FHOPEHS.TOOL_ID" & Chr(13) & "" & Chr(10) & "FROM DB2.FHOPEHS FHOPEHS" & Chr(13) & "" & Chr(10) & "WHERE (FHOPEHS.LOT_ID='NPCC1450.6H') AND (FHOPEHS.TOOL_ID Like 'WPTMZ%')"
Set rs = db.OpenRecordset(sqlstr, dbOpenSnapshot)
ToolID = rs("TOOL_ID")
Goto ending
errhandler:
If Err.Number = 1004 Then
Goto ending
End If
ending:
MsgBox ToolID
End Sub
나는이 인트라넷입니다 공유 할 수있는 외부 링크를 가지고 있지만, 아래에 내가 대신 워크 시트 셀의 배열에 결과를 저장하기 위해 수정하기 위해 노력하고있어 내 코드입니다하지 않습니다 - 아래와 같이 내 코드에서 대상은 워크 시트의 셀 "A1"입니다.
I 방법 직접 변수에 데이터를 저장하는 프로그램을 등록한 초기 예
" 설정 RS = db.OpenRecordset (sqlstr, dbOpenSnapshot)".그물에서 찾은 다른 솔루션은 데이터를 워크 시트의 위치에 저장 한 다음 배열로 옮겨 워크 시트의 내용을 삭제하는 작업을 완료합니다. 이 프로 시저를 수행하는 데 관심이 없으며 쿼리 결과에서 변수로 직접 이동하고자합니다.
Sheets("Raw Data").Select
Cells.Select
Selection.ClearContents
Selection.QueryTable.Delete
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://myInternalAddress/myServerSideApp.php", Destination:=Range("A1"))
.Name = "AcctQry"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
는 예상되는 결과는 데이터를 스트리밍 PHP 코드는 다음이
function getEngineers()
{
$sql = 'select `engname` as `name`, `engineer` as `initials` from `engineers`';
if ($result = $db->query($sql))
{
if ($result->num_rows > 0)
{
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html lang="en">
<head></head>
<body>
<table>
<tbody>
<?php
while ($n = $result->fetch_array())
{
echo '<tr><td>'.$n['name'].'</td><td>'.$n['initials'].'</td></tr>';
}
?>
</tbody>
</table>
</body>
</html>
<?php
}else{
throw new Exception('No names returned');
}
}else{
throw new Exception("Query to get engineer's names failed");
}
}
처럼 보이는 브라우저에서 출력 이름 및 이니셜
의 목록이 될 것입니다. 기본적으로 두 개의 열, 1. 이름, 2. 이니셜 여기확인
는 HTML 코드의 스크린 샷, 독특한 아무 것도 여기에![Screen shot of html output](https://i.stack.imgur.com/WEeGK.gif)
IE를 자동화하고 DOM에서 필요한 데이터를 검색하거나 XHR을 만들고 응답을 구문 분석하도록하십시오.통찰력을 위해 추출해야하는 URL 및 데이터 설명을 공유하십시오. – omegastripes
이 과정에서 IE를 사용하지 않습니다. 내 브라우저는 FireFox입니다. 그러나 내가 만들고 싶은 루틴에서는 브라우저가 호출되지 않습니다. 나는 그것을 서버로 보내는 Excel에서 쿼리를 생성합니다. 응답은 MySQL 데이터베이스에서 PHP로 웹 서버 측에서 반환되고 Apache Server를 통해 스트리밍됩니다. – Claus
실제로 웹 쿼리는 Internet Explorer의 기능을 사용합니다. 그것이 요점의 옆에 있지만. 나는 당신이 원하는 것을 성취하기 위해 다른 데이터를 긁는 방법으로 전환하는 것을 의미합니다. 데이터를 변수에 직접 가져옵니다. 따라서 데이터베이스에서 데이터를 얻으려면 ADODB, ODBC ActiveX (위의 예와 같이), 웹 페이지 (IE 또는 XHR ActiveX)를 사용하십시오. FireFox에 사용할 수있는 ActiveX가 없습니다. – omegastripes