Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA文本框。文本值未正确写入电子表格_Excel_Vba - Fatal编程技术网

Excel VBA文本框。文本值未正确写入电子表格

Excel VBA文本框。文本值未正确写入电子表格,excel,vba,Excel,Vba,我有一个UserForm,它包含许多带有客户机信息的文本框,这些文本框要么接受新客户机的信息,要么允许通过组合框选择器编辑现有客户机。选择现有客户端将从工作表上的单元格填充文本框。命令按钮允许用户保存、取消或清除文本框和组合框 “Save”按钮代码中的if语句检查它是新的还是现有的客户机,然后执行以下代码(客户机行被声明为在Combo\u client\u List\u Change上设置的全局变量): 第一部分工作。如果组合框为空,则值将完全按照预期添加到我的客户端列表的末尾。 让我大吃一惊的

我有一个UserForm,它包含许多带有客户机信息的文本框,这些文本框要么接受新客户机的信息,要么允许通过组合框选择器编辑现有客户机。选择现有客户端将从工作表上的单元格填充文本框。命令按钮允许用户保存、取消或清除文本框和组合框

“Save”按钮代码中的if语句检查它是新的还是现有的客户机,然后执行以下代码(客户机行被声明为在Combo\u client\u List\u Change上设置的全局变量):

第一部分工作。如果组合框为空,则值将完全按照预期添加到我的客户端列表的末尾。 让我大吃一惊的是,第二部分只改变了我电子表格中的表格(“Client_DB”)。单元格(Client_Row,2),其余部分恢复为旧值。 我已经检查了在每一行之后,MsgBox是否正确地提取了Client_Row变量,这不是问题所在

这可能是显而易见的,但我的大脑在冒烟。任何帮助都将不胜感激

更新:

因此,我得出以下结论: 如果我把“Else”语句的第一行注释掉,一切都会按预期进行。由于某些原因,代码在将Name_Box.Text字符串复制到工作簿后停止执行。 仍然不知道为什么会发生这种情况,因为Client_Row变量没有受到影响,并且似乎按照即时窗口正确地传递到了剩余的代码行:

Cells(6, 2) = New Client 5 5 65
Cells(6, 3) = Person
Cells(6, 4) = 12 1111 111
Cells(6, 5) = Not Applicable
Cells(6, 6) = Test
Cells(6, 7) = Testing test test
另一件奇怪的事情是,如果我更改Name_Box.Text的值并点击save,但没有从ComboBox中选择新的客户端,那么如果我再次点击save,它将更新所有字段。这样做是有意义的,因为Client\u Row变量只在Combo\u Box\u更改时重置,但是为什么现在工作而不在其他情况下工作呢


我怀疑它与ComboBox的RowSource有关,但我看不出当客户端的Row变量在初始设置时会发生什么变化?

您是否有任何
工作表\u Change
事件检查现有数据范围内的变化并防止其完全脱离显示的代码,在
Else
部分中,您没有为
lRow\u客户端
赋值。我很惊讶它不会立即出错,因为第0行不存在。我建议将
lRow\u Client
赋值行移动到If语句之前,以便以相同的方式对其进行定义。我还注意到,在
Else
部分,row变量名为
Client\u row
,而不是
lRow\u Client
,这是故意的吗<代码>客户端行也从未定义。打开即时窗口(菜单栏:查看->即时窗口)并在每个分配之间放置
Debug.Print“单元格(&&Cstr(客户端行)&“,”&“2)=“&Name_框。文本
。根据需要更新列号和文本框名称。它应该在即时窗口中打印出来,这样你就可以看到你的坐标和值是否符合你的期望
Cells(6, 2) = New Client 5 5 65
Cells(6, 3) = Person
Cells(6, 4) = 12 1111 111
Cells(6, 5) = Not Applicable
Cells(6, 6) = Test
Cells(6, 7) = Testing test test