运行时错误13类型不匹配,将数据从Access传输到Excel

运行时错误13类型不匹配,将数据从Access传输到Excel,excel,vba,ms-access,Excel,Vba,Ms Access,我在Access(2003)中有一个按钮,可以将数据传输到Excel(也是2003)。它打开Excel工作簿,然后在Access子窗体中循环并传输数据 为了提供有关如何工作的更多信息,Excel有一个名为“Tables”的范围,其中包含Access子窗体的名称(“Main”、“Demographics”、“History”等)。Excel对于第一个范围中的每个名称都有一个范围。例如,范围“Demographics”包含一系列字段名(“FirstName”、“LastName”等)。因此,第一个循

我在Access(2003)中有一个按钮,可以将数据传输到Excel(也是2003)。它打开Excel工作簿,然后在Access子窗体中循环并传输数据

为了提供有关如何工作的更多信息,Excel有一个名为“Tables”的范围,其中包含Access子窗体的名称(“Main”、“Demographics”、“History”等)。Excel对于第一个范围中的每个名称都有一个范围。例如,范围“Demographics”包含一系列字段名(“FirstName”、“LastName”等)。因此,第一个循环在子窗体中移动,嵌套循环在字段名中移动。然后,每个字段将其中的值传递给excel。Excel也有“人口统计\u锚定”和“历史\u锚定”等的范围,这是每个范围旁边列中的第一个值(即人口统计范围有firstname、lastname,右边是数据的去向。因此,范围中的第一项是firstname,右边是“人口统计\u锚定”是firstname将要去的地方。然后LastName将去人口统计(锚定从锚定向下偏移1或1个单元格)

我希望这能解释代码中发生了什么。我就是不明白为什么输入mistmatch(错误13)会一直出现这种情况

数据不会传输。它遍历了整个代码,并且正确地传输了每一条数据。它在最后爆炸了,就好像它上次不应该通过代码1一样。我确认了每个范围都是正确的,不包含任何空值。代码在这一行爆炸:Set CControl=CForm.Controls(CControl名称),它位于第二个循环的底部


请帮忙!我花了数周的时间处理这段代码,但运气不佳。这段代码适用于我使用过的所有其他数据库

您正在从Excel范围中获取控件的名称
CControlName
,但随后将此控件的值设置为访问表单上的控件
Set CControl=CForm.Controls(CControlName)
。由此看来,最有可能的解释是,
CControlName
实际上不在访问表单上(可能是打字错误?)


在VBA IDE中,在“工具”菜单下,选择“选项”,然后选择“常规”选项卡。在错误捕获部分下,选择“在所有错误上中断”选项,然后单击“确定”以设置首选项。再次运行代码;当遇到错误时,VBA将停止处理导致错误的行。检查
CControlName
的值,确保它确实存在于访问表单中。

我没有错误处理经验。感谢您指出如何打开此功能。你能详细说明我是如何看到CControlName的值的吗?它像往常一样给了我错误,但我看不到任何地方可以查看变量的值。有什么东西我可以打开来展示这些东西吗?谢谢哦!!!将鼠标悬停在变量上,它将显示该变量。太棒了!我可以停止在我的代码中使用大量的MSGBox。非常感谢。这解决了我的问题,我发现了问题所在。你是对的,我的一个字段有一个输入错误。
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