Excel 比较不同工作表中的两个文本单元格
我试图比较不同工作表中的两个文本单元格(如Excel 比较不同工作表中的两个文本单元格,excel,vba,loops,compare,Excel,Vba,Loops,Compare,我试图比较不同工作表中的两个文本单元格(如abcDEF)。一张是固定的,但另一张不是 我的代码是: Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, LastRow As Long, n As Long Dim Project As String Dim Responsible As String, Site As String, Sample As String, _ Description As S
abcDEF
)。一张是固定的,但另一张不是
我的代码是:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long, LastRow As Long, n As Long
Dim Project As String
Dim Responsible As String, Site As String, Sample As String, _
Description As String, Parameter As String, Method As String
Dim j As Long
Application.EnableEvents = False
' Find LastRow in Col A into the Sheet2
LastRow = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
' Select all Col A in Project
For Each Value In Sheet2.Range("A2:A" & LastRow)
Project = Project & "," & Value
Next Value
Sheet1.Range("A2").ClearContents: Sheet1.Range("A2").Validation.Delete
' Create the Data Validation List
With Range("A2").Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Project
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
' Select the sheet coinciding with the cell "A2" value
For j = 3 To Sheets.Count
If Sheets(j).Range("A2").Text = Sheets(1).Range("A2").Text Then
'Write 4 in sheet1 cell C6 when the two values are coinciding.
Sheet1.Range("C6") = 4
End If
Next j
End Sub
问题在于
If…
行,可能是范围定义。我试过.Text
和.Value
两种方法都不起作用。您可以使用精确(text1,text2)
函数
If StrComp(Sheets(j).Range("A2").Value2, Sheets(1).Range("A2").Value2, _
vbTextCompare) = 0 Then
'added the underscore since I made it two lines for neatness
vbTextCompare
不区分大小写,vbBinaryCompare
区分大小写。网上有一些资源可以帮助你
另外,我注意到您正在使用工作表\u Change
并更改工作表1
上单元格的值。我猜您的工作表\u更改
是针对工作表1
,是吗?如果是这种情况,那么每次修改Sheet1
,子系统都会再次被调用(一次又一次…直到崩溃)。要防止出现这种情况,您需要添加
Application.EnableEvents = False
到潜艇的开头,然后
Application.EnableEvents = True
最后。这样,您对工作表所做的任何更改都不会触发工作表更改。sub.该更改保存在VBA项目结构中的何处?应将其保存在要处理更改事件的每个工作表中。另外,您不需要循环,If语句条件应该是
Range(“A2”).Text=Sheets(1).Range(“A2”).Text
,因此代码会抛出一个错误(哪个和在哪里?),或者该条件的计算结果永远不会为True?@MarkM我只在Sheet1中有这一点。“我试过你说的话,但没用。”保罗。我可以完美地编译代码。问题在于您所说的条件。请尝试切换我在回答中提到的启用事件
,看看是否有效。我已经尝试了您所说的。但它仍然不起作用。。。在for之前,我在表1的单元格“A2”中有一个验证数据列表。当我选中此项时,我想将该单元格与表单3中的其他“A2”单元格与表单的其他单元格进行比较,如果为真,则表单1中的其他单元格中必须显示其他验证数据列表,具体取决于表单。所有的代码都在工作,但我仍然有问题,如果。。。我完成了循环前一步的一点代码。也许还有另一个我看不到的错误,但我看到的是这种情况永远不会实现。如果没有这一点,其余的工作将非常完美。谢谢在代码末尾(在子代码末尾之前),需要再次启用事件(Application.EnableEvents=True
)。另外,由于您已停用它们,重新激活它们的一个简单方法是只使用以下行生成一个小的子/宏:Application.EnableEvents=True
。之后,您的工作表\u Change
应再次成功触发(您当前的代码意味着它仅在第一次更改后运行,然后由于事件被禁用而停止)。当我将代码复制到新工作簿中时,您的代码对我来说似乎运行良好。请确保像我说的那样启用事件。为了清楚起见,请创建一个新的子对象(例如,Private Sub ReEnable()
),添加启用事件的行,然后运行该宏一次(F5或按编辑器中的按钮)。一旦事件被禁用,仅按“重置”按钮将无法启用事件。我尝试在子项的末尾添加应用程序。EnableEvents=True。但是,当我选择列表上的选项时,它们不会停留在单元格上。另外,如果我在实际子对象的末尾添加一个新子对象,它将不起作用。