比较文本框值与单元格值

时间:2018-06-19 14:36:31

标签: excel vba

我为生产车间编程了一个通讯工具。该工具将记录他们所做的工作,谁做的以及在什么时间进行。

以下内容应检查文本框值是否等于工作表中的值,如果文本框(文本框为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

编辑;将其更改为上面的代码。我在另一个用户窗体(和f8)中对此进行了测试,并且效果很好,但是当我放入将实际运行此代码的用户窗体时,结果却不一样……

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

1 个答案:

答案 0 :(得分:0)

根据您的评论确定

当来自用户表单的代码向编译器传达什么是什么时,请停止使用活动单元格。您需要完全限定正在使用的表。我不能完全确定活动表在代码中的什么位置,但我可以肯定答案永远不会。选择和引用.ActiveWhatever的另一个原因是,vba的一个主要缺点是与实际的应用程序对象进行交互,而不是在内存中进行任何操作。它会使所做的一切停顿,并且性能会大大降低。当您开始编写非常密集的内容时,您不可避免地会遇到以下问题:编译器对于应该查看的内容感到困惑,并且您将花费大量时间来解决这些胡说八道的问题。

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

 .value = "" OR ISNULL(.Value)=True OR .Value = vbNullstring

这并不是真正的反馈-很多人有不同的方式来做同一件事。

尝试:

 Thisworkbook.Sheets("YOURSHEETNAME").Range("YOURRANGE").Offset(0,23).Value = Someothervalue.

让我知道您是否仍然面临问题。