Excel (2003)에 데이터를 전송하는 Access (2003) 단추가 있습니다. Excel 통합 문서를 연 다음 Access 하위 양식을 순환하고 데이터를 전송합니다.런타임 오류 13 형식 불일치, Excel에서 데이터를 Access로 전송
이 작동 방식에 대한 자세한 내용을 보려면 Excel에는 Access 하위 양식 ("Main", "Demographics", "History"등)의 이름이 포함 된 "Tables"범위가 있습니다. Excel에는 첫 번째 범위에있는 각 이름의 범위도 있습니다. 예를 들어, "인구 통계"범위에는 일련의 필드 이름 ("성", "성"등)이 있습니다. 따라서 첫 번째 루프는 하위 양식을 통해 이동하고 중첩 된 루프는 필드 이름을 통해 이동합니다. 그런 다음 각 입력란에 값을 전달하여 Excel을 실행합니다. Excel은 또한 "Demographics_Anchor"및 "History_Anchor"등의 범위를 가지며, 각 범위 옆에있는 열의 첫 번째 값입니다 (즉, 인구 통계 범위는 성, 성, 오른쪽은 데이터가있는 곳입니다. 항목의 이름이 FirstName이고 오른쪽의 "Demographics_Anchor"는 firstname이있는 곳이며, 성은 Demographics_Anchor로 이동하여 앵커에서 1 또는 1 셀 아래로 오프셋됩니다.
Dim ThisForm As Form
Dim CForm As Object
Dim CTab As TabControl
Dim CControl As Control
Dim CurrentTab As Variant
Dim CControlName As Variant
Dim CControlValue As String
Dim Code As Control
Dim counter1 As Integer
Dim appExcel As Object
Dim Anchor As Object
Dim PageRange As Object
Dim ControlNameRange As Object
strpath = "C:\blah\blah\filename.xlsm"
Set appExcel = CreateObject("Excel.Application")
appExcel.Workbooks.Open Filename:=strpath, UpdateLinks:=1, ReadOnly:=True
Set wbk = appExcel.ActiveWorkbook
Set PageRange = appExcel.Range("Tables")
'set Access environment
Set ThisForm = Forms("frmHome")
Set CTab = ThisForm.Controls("Subforms")
'export the data from Access Forms to Excel
For Each CurrentTab In PageRange
If CurrentTab = "Main" Then
Set CForm = ThisForm
Else
CTab.Pages(CurrentTab).SetFocus
Set CForm = ThisForm.Controls(CurrentTab & " Subform").Form
End If
Set ControlNameRange = appExcel.Range(CurrentTab)
Set Anchor = appExcel.Range(CurrentTab & "_Anchor")
counter1 = 0
For Each CControlName In ControlNameRange
Set CControl = CForm.Controls(CControlName)
CControl.SetFocus
Anchor.Offset(RowOffset:=counter1).Value = CControl.Value
counter1 = counter1 + 1
Next CControlName
Next CurrentTab
코드에서 어떤 일이 벌어지고 있는지에 대해 설명 드리겠습니다. 나는 이것이 왜 타입 미스트 매치 (에러 13)로 폭탄을 계속 떨어 뜨리는 지 알 수 없다.
데이터가 전송됩니다. 전체 코드를 거치고 모든 데이터 조각이 올바르게 전송됩니다. 마지막으로 코드 1을 통과하는 것처럼 마지막으로 폭탄을 터뜨립니다. 모든 범위가 정확하고 null 값을 포함하지 않는지 확인했습니다. 코드는이 줄에서 폭탄을 터뜨립니다 : Set CControl = CForm.Controls (CControlName) 이것은 두 번째 루프의 맨 아래에 있습니다.
도와주세요! 나는이 코드를 사용하여 몇 주를 보냈으며 운이 없었습니다. 이 정확한 코드는 제가 작업해온 다른 모든 데이터베이스에서 작동합니다.
오류 처리에 대한 경험이 없습니다. 이 기능을 사용하는 방법을 지적 해 주셔서 감사합니다. CControlName의 가치를 어떻게 볼 수 있는지 자세히 설명해 주시겠습니까? 평소와 같이 오류가 발생했지만 변수 값을 볼 수있는 곳을 어디에도 알 수 없습니다. 이걸 보여줄 수있는 것이 내가있을 수 있습니까? 감사! – JohnT
오! 변수를 가리키면 표시됩니다. 환상적입니다! 내 코드 전체에서 수십 개의 MsgBoxes 사용을 중단 할 수 있습니다. 고맙습니다!!! 이것은 내 문제를 해결하고 나는 그 문제를 발견했다. 당신이 옳았는데, 제 필드 중 하나에 오자가있었습니다. – JohnT