Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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 比较文本框值和单元格值_Excel_Vba - Fatal编程技术网

Excel 比较文本框值和单元格值

Excel 比较文本框值和单元格值,excel,vba,Excel,Vba,我为生产车间编程了一个通讯工具。这个工具将记录他们做了什么,谁做了,什么时候做的 下面应检查文本框值是否等于工作表中的值,或者如果文本框(文本框为TextTools1)为空,则检查文本框值是否等于工作表中的值。如果这是真的,那么什么也不应该发生,因此文本框的值将保持不变。 如果文本框不为空或与以前保存在工作表中的文本框不相等(因此值已更改),则应注册哪个操作员执行了该操作以及日期和时间 当文本框为空时,它工作,但当文本框的值保持不变时(因此TextTools.value=ActiveCell.O

我为生产车间编程了一个通讯工具。这个工具将记录他们做了什么,谁做了,什么时候做的

下面应检查文本框值是否等于工作表中的值,或者如果文本框(文本框为TextTools1)为空,则检查文本框值是否等于工作表中的值。如果这是真的,那么什么也不应该发生,因此文本框的值将保持不变。 如果文本框不为空或与以前保存在工作表中的文本框不相等(因此值已更改),则应注册哪个操作员执行了该操作以及日期和时间

当文本框为空时,它工作,但当文本框的值保持不变时(因此TextTools.value=ActiveCell.Offset(0,23).value(正确)),它仍会添加运算符名称、日期和时间

尝试比较文本框值和单元格值时出错,但我无法确定

    Sheets("Checklist & overdracht").Visible = True
Sheets("Checklist & overdracht").Select
If TextTools1.Value = Range("AZ1").Value Or TextTools1.Value = Empty Then
    Sheets("Checklist & overdracht").Select
    rowloc1.Value = ActiveCell.Row
ActiveCell.Offset(0, 23).Value = TextTools1.Value
Else
    Sheets("Checklist & overdracht").Select
    rowloc1.Value = ActiveCell.Row
ActiveCell.Offset(0, 23).Value = TextTools1.Value & " " & "(" & cboOperator.Value & " " & Format(DateValue(CStr(Now)), "short date") & " " & Format(TimeValue(CStr(Now)), "hh:mm") & ")"
End If
编辑;将其更改为上面的代码。我在另一个userform中测试了这一点(并使用了f8),它工作得非常出色,但是当我放入将实际运行此代码的userform时,它没有相同的结果


编辑2;显然,
Range(AZ1).Value
reference出现了问题。因为当我输入一个随机值而不是范围,然后运行代码时,它确实起作用了。有不同的引用方式吗

根据您的评论确定

当来自用户窗体的代码正在与编译器通信什么工作表是什么时,停止使用活动单元格。您需要完全确认您正在使用的工作表。我不完全确定代码中的活动表是在哪里设置的,但我相当肯定答案永远不会。选择和引用的另一个原因是,vba的一个主要缺点是与实际的应用程序对象交互,而不是在内存中执行所有操作。它阻碍了所有的工作,性能也受到了很大的影响。当你开始写非常密集的东西时,你将不可避免地遇到一些问题,编译器会对它应该看的东西感到困惑,你将有一个很长的时间来解决这些废话

此外,检查是否不只是“=空”可能是一个好主意。如果有空字符串或空字符串怎么办?我倾向于检查:

 .value = "" OR ISNULL(.Value)=True OR .Value = vbNullstring
但这并不是真正的反馈——很多人做同一件事有不同的方式

尝试:


如果你仍然面临问题,请告诉我

这个文本框在用户表单上吗?或者它是工作表上的activeX控件?另外,我认为如果你仔细阅读代码(使用f8),你可以很容易地找出编译器看到这些控件的值是什么,这应该有助于说明问题所在。很抱歉反应太晚,我必须弄清楚如何浏览代码,因为在这行代码之前还有很多其他代码,这导致了一些困难。我为这一行制作了一个单独的用户表单。首先文本框的格式为userform。第二编译器表示,对于
ActiveCell.Offset(0,23).Value
,当此单元格中有文本时,它为空。不知道为什么会这样?谢谢你的帮助。我还是不能让它工作。引用此工作簿…无效。当我在单独的用户窗体中测试代码时,它仍然有效。当值相同或单元格为空时,它跳转到第一个子句,否则跳转到第二个子句。但是当我在我的实际用户表单中实现它时,它不起作用。你的代码放在哪里?工作表?模块?用户表单背后?
 Thisworkbook.Sheets("YOURSHEETNAME").Range("YOURRANGE").Offset(0,23).Value = Someothervalue.