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

Access(2003)中有一个button,用于将数据传输到Excel(也是2003)。 它打开Excel工作簿,然后遍历Access子表单并传输数据。

为了提供更多信息,Excel有一个名为“Tables”的范围,其中包含Access子表单的名称(“Main”,“Demographics”,“History”等)。 Excel也有第一个范围内的每个名称的范围。 例如,“Demographics”范围包含一系列字段名称(“FirstName”,“LastName”等)。 所以第一个循环遍历子表单,并且嵌套循环遍历字段名称。 然后每个字段将其中的值传递给excel。 Excel也有“Demographics_Anchor”和“History_Anchor”等的范围,这是每个范围旁边的列中的第一个值(即范围Demographics具有名,姓,而右边是数据将去的地方。该范围内的项目是FirstName,右侧的“Demographics_Anchor”是firstname将要去的位置,然后LastName进入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 

我希望这能解释代码中发生了什么。 我只是不知道为什么这种typesmistmatch(错误13)不断轰炸。

数据传输。 它贯穿整个代码,并且每一个数据都正确地被传送过来。 最后它会popup来,就好像它最后一次不应该通过代码1一样。 我确认每个范围都是正确的,不包含任何空值。 代码在这一行中popup:设置CControl = CForm.Controls(CControlName),这是朝向第二个循环的底部。

请帮忙! 我花了几个星期的时间处理这个代码,没有运气。 这个确切的代码适用于我曾经使用过的其他数据库。

您从Excel范围中获取控件CControlName的名称,但是然后将此控件的值设置为Access窗体上的控件Set CControl = CForm.Controls(CControlName) 。 由此,最可能的解释可能是CControlName实际上并不在Access表单上(可能是拼写错误?)。

在VBA IDE中,在“工具”菜单下,select“选项”,然后select“常规”选项卡。 在“错误陷印”部分下,select“中断所有错误”选项并单击“确定”以设置首选项。 再次运行您的代码; 当遇到错误时,VBA将在导致错误的行上停止处理。 检查CControlName的值,并确保它实际上存在Access窗体上。