我有一个excel工作簿,出于许多原因,我将sql插入excel以遍历字段,该工作簿包含有关员工的值。
我从正在处理此请求的工作表中创建了一个记录集:
Set rst = OpenRecordset("SELECT * FROM [Feuil1$]")
这会将我的工作表加载到记录集中。
一切都好起来,直到我将我的Excel传递给朋友,他将粘贴的数据从另一张纸复制到我的Excel中,并启动了我的宏,然后在这里发现了一个错误。
当我到达“ G”客户列第13行时,尝试将其分配给变量时,出现错误
我有一个名为Client的变量,其中填写了字段client的值
Dim rst As Object
Dim Client As Variant
Set rst = OpenRecordset("SELECT * FROM [Feuil1$]")
While Not rst.EOF
...
Client = rst.Fields("Client").Value
..
rst.movenext
Wend
Set rst = Nothing
导致错误的代码行是:
Client = rst.Fields("Client").Value
我收到一条错误消息,告诉-2147217887(80040e21)
“您无法记录更改,因为您输入的值违反了为此表或列表定义的设置(例如,值小于最小值或大于最大值)。更正错误,然后重试。”
很抱歉,屏幕截图中的消息是法语,因为我正在处理的工作簿是法语,但这是英语的翻译
这使我试图了解“ G”列中第13行的具体含义
首先,我看到此问题出现在该行的第13行中填充数据(ATS)的第一行。.之前各行中的前一个单元为空,并且代码在第13行之前工作正常
Client = rst.Fields("Client").Value
在我自己的原始工作表上,没有任何类型的错误,该错误是在我的朋友将自己的值复制/粘贴到工作表中之后发生的,深深地看了我之后,我注意到他在复制/粘贴数据后,格式如图所示,柱状细胞G中的细胞数变为数字(两倍)
但是我的变量是变量,所以它应该接受任何类型的数据(是否为空,是否为double),这就是为什么我不明白为什么它会导致这个问题的原因?
我说过Excel可能没有将ATS值加载到记录集中,也许它是在Rs内加载了一种特殊错误或类似的错误,所以variant变量不能包含它并给出此错误,我真的不知道为什么我要问您是否有关于此错误的线索以及如何通过代码解决它,因为在朋友粘贴数据之前,我可以简单地通过更改为单元格的格式来手动解决该错误,所以如果我在excel单元格中将格式更改为Normal而不是十进制,就可以解决问题,但是我想知道的是理解为什么会出现此错误,以及如何通过vba中的CODE而不是excel表格解决此错误以及为什么使用变量变量即使excel中的格式为十进制,也不会接受字符串值(ATS)?
最后一件事,我尝试执行以下操作,但仍收到相同的错误
If Not IsError(rst.Fields("Client").Value) Then Client = rst.Fields("Client").Value Else Client= vbNullString
此外,如果我将间谍添加到引起问题的行中,我会在值内找到vba msgbox中显示的相同错误消息,这是打印屏幕
:“
”,您无法记录更改,因为您输入的值违反了为此表或列表定义的设置(例如,值为
在此先感谢任何将提供建设性和有用的答案的人。