VBA를 처음 사용하여 Microsoft의 ACE OLEDB 공급자를 통해 Excel 스프레드 시트에 Outlook 매크로를 작성하려고합니다. 다음 test.xlsx
으로ADODB 레코드 세트 항목을 컬렉션에 추가
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1
Sub Test()
Dim conn As New ADODB.Connection
Dim results As New ADODB.Recordset
Dim values As Object
Set values = CreateObject("System.Collections.ArrayList")
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\Users\me\test.xlsx;" & _
"Extended Properties=""Excel 12.0; HDR=YES;"""
results.Open "SELECT * FROM [Sheet1$]", _
conn, adOpenStatic, adLockOptimistic, adCmdText
Do Until results.EOF
values.Add results.Fields.Item("num")
Debug.Print Join(values.toArray, ", ")
results.MoveNext
Loop
End Sub
: 나는 다음의 라인을 따라, 쿼리 후 ResultSet
통해 반복하고 Collection
에 결과를 저장하고있어
우리는 얻을 :
1
2, 2
3, 3, 3
4, 4, 4, 4
5, 5, 5, 5, 5
이것은 results.Fields.Item("column_name")
와 일치하는 것으로 보입니다. 각 MoveNext
에 덮어 쓰여진 참조 및 values
에 저장된 참조입니다.
VBA의 참조/값 매커니즘에 익숙하지 않은 경우 올바른 경로에서 추측 할 수 있습니까? 대신 값을 저장할 수있는 방법이 있습니까?
IIRC 나는'참조하고있어 Microsoft ActiveX 데이터 개체를 추가하다 [6.1]' 다시 : [이 Office Space] (https://technet.microsoft.com/en-us/library/ee692882.aspx). 이 예제는 실제 코드에 100 % 충실한 것은 아니지만이 문제가 해당 양식을 인식 할만큼 충분히 일반적 이었으면합니다. '결과'slipup을 지적 해 주셔서 감사합니다! – concat
코드를 복사 한 다음 사용하기 위해 편집해야한다고 생각합니다. 이 기사에는 ResultSet이 없습니다. 레코드 세트라고도합니다. 나중에 참조 할 시점에서 우리는 직접 테스트하지 않은 코드의 문제를 해결하기 위해 여기에 있지 않습니다. 일단 디버깅 결합 문을 루프 외부에 두는 것이 더 좋을 수도 있지만, 지금은 큰 추측 일뿐입니다. – dbmitch
충분히 공정하게, 나는 처음에는 급하게 요청했습니다. 내 작업 기계에서, 이제는 업데이트 된 예제로 동작을 재현 할 수있었습니다. – concat