2011-09-14 5 views
0

Excel 시트에서 데이터를 읽고 처리하는 매크로를 작성하는 데 Excel vba를 사용하고 있습니다. 기본적으로 Excel 통합 문서 A의 데이터를 Excel 통합 문서 B의 워크 시트 X으로 복사합니다. 통합 문서 B에는이 복사를 수행 한 다음 워크 시트 X에서 레코드 집합으로 데이터를 읽는 매크로가 포함되어 있습니다.Excel 시트의 비어 있지 않은 필드가 레코드 세트에 공백으로 표시됩니다.

정말 이상한 문제가 있습니다. 내 문제는 레코드 집합 값을 인쇄하려고하면 빈 레코드로 표시되는 필드가 하나 있다는 것입니다.

이것은 내 코드에서 문제가되는 부분입니다. packageName이 문자열을 포함하는이 함수에 전달됩니다. 레코드 집합 개체 objRecordsetName 필드를 잘못 가져오고 비어 있지 않은 항목의 레코드 집합 값을 인쇄하려고하면 빈 것으로 나타납니다. 다른 필드는 잘 인쇄됩니다. 이름 필드에는 ABC1232WHSJ, ABCD3456과 같은 문자와 숫자가 포함됩니다. 어떤 생각이 잘못 되었습니까?

Dim objConnect As ADODB.Connection, objRecordset 
Set objConnect = New ADODB.Connection 

objConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ActiveWorkbook.Path & "\" & ActiveWorkbook.Name & ";" & "Extended Properties=""Excel 8.0;HDR=Yes;"";" 

Const adOpenStatic = 3 
Const adLockOptimistic = 3 
Const adCmdText = &H1 

Set objRecordset = CreateObject("ADODB.Recordset") 
objRecordset.Open "Select * FROM [Sheet1$] WHERE Package LIKE '" & _ 
      packageName & "'", objConnect, adOpenStatic, adLockOptimistic, adCmdText 

Debug.Print objRecordset.Fields.Item("Package") 
Debug.Print objRecordset.Fields.Item("Name") 
+0

나를 위해 일했습니다. 실제로 실제 데이터 집합 없이는 테스트하기가 어렵습니다. –

+0

1) 원본 열에 "텍스트"와 같은 멋진 형식이 있는지 확인하십시오. 2) "이름"필드를 셀 주소로 잘못 해석 할 수 있습니까? – MikeD

+0

제안을 주셔서 감사합니다. 연결 문자열에서 "확장 속성"과 관련이 있다면 어떤 생각이 들겠습니까? 또한 이름이 셀 주소로 오인되지 않았는지 확인하려면 어떻게해야합니까? 원본에는 화려한 서식이 없습니다. csv가 들어있는 필드 일뿐입니다. 난 그냥 수동으로 비슷한 데이터와 워크 시트를 만들었고 그것은 잘 작동 그래서 그것은 실제 데이터 세트와 함께 할 수 있지만 뭔가 확실하지 않을 수 있습니다. –

답변

0

동일한 문제가있었습니다.

열의 숫자 형식이 동일한 지 확인하십시오.

ADO를 사용하는 경우 첫 번째 줄에 형식을 사용하십시오. 예를 들어 번호이고 두 번째 문자열 인 경우 테이블의 값이 비어 있습니다 (테이블을 만드는 경우 오류가 발생하는 경우)

솔루션 (작업)은 데이터 가져 오기 전에 열려있는 통합 문서이며 형식 형식이 필요한 열, range에서 propertie numberformat을 사용합니다.

[] '

+0

건성 용액! –

관련 문제