我找到了在两个不同的工作表上为单个单元格建立双向连接的代码,它运行完美。我可以向其中一个添加一个值,它会将另一个的值更改为相同的值。但我没有只对单个单元格执行此操作,而是尝试输入单元格范围(例如:“A4:A100”),当它到达第二行代码时,我收到以下错误:运行时错误“13”:类型不匹配
好的,我刚刚在原始消息中添加了以下内容。首先是我引用的代码,它为单个字段创建了双向更新:
在表 1 中:
Private Sub Worksheet_change(ByVal Target As Range)
If Not Intersect(Target, Range("B7")) Is Nothing Then
If Target = Range("B7") Then
If Sheets("Sheet1").Range("A4").Value <> Target.Value Then
Sheets("Sheet1").Range("A4").Value = Target.Value
End If
End If
End If
End Sub
在第 2 页中:
Private Sub Worksheet_change(ByVal Target As Range)
If Not Intersect(Target, Range("B7")) Is Nothing Then
If Target = Range("B7") Then
If Sheets("Sheet1").Range("A4").Value <> Target.Value Then
Sheets("Sheet1").Range("A4").Value = Target.Value
End If
End If
End If
End Sub
此代码对于单个单元格来说非常完美。但如果我想对整个单元格区域执行相同的操作该怎么办?例如,除了单元格 A4,如果我想对单元格 A4:A100 使用此功能该怎么办?
答案1
请尽量具体地提出您的问题。例如,您可以说出我在这里指出的一些内容。(这样做的目的是让您自己做足功课,这样回答问题的人就不必猜测、输入所有内容或提出问题。)
我看到您的代码对于 Sheet 1 和 Sheet 2 是相同的。也许这不是故意的,因为如果您只粘贴一次并且没有提到它们是相同的,对您和我来说都会更容易。
• 这是故意的吗?如果是的话……
我看到当前 Sheet 1 上的单元格通过任一 SheetA4
进行更新,而Sheet 2 上的单元格没有任何更新。B7
A4
您实际上并没有说明代码在完美运行时会做什么。您说的是“为两个不同工作表上的单个单元格建立双向连接”,但“双向连接”可能意味着各种事情。明白我的意思了吗?
• 那么我的描述和您描述的一样吗?如果是的话...
当我在所有位置替换时A4
,A4:A100
我Type mismatch
在第 5 行收到错误,这是不包括间隔符的第 4 行代码,并且是不包括间隔符也不是Sub
原型行的第 3 行代码,所以从技术上讲我无法重现与第 2 行代码相关的错误。
• 这就是你所说的错误吗?如果是的话...
您说您可能希望将“此功能”应用于某个单元格区域,但“此功能”对您来说究竟意味着什么?它现在在做什么,以及当它应用于某个区域时您希望它做什么?
• 您是否只希望它显示Sheet 1B7
上整个范围内的任一 Sheet 的值A4:A100
?如果是这样...
当此解决方案同时存在于两张表中时,它对我来说效果很好:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B7")) Is Nothing Then
If Target = Range("B7") Then
If Sheets("Sheet1").Range("A4").Value <> Target.Value Then
Sheets("Sheet1").Range("A4:A100").Value = Target.Value
End If
End If
End If
End Sub
得到不匹配错误和解决方案之间的区别是......
If Sheets("Sheet1").Range("A4:100").Value <> Target.Value Then
相对
If Sheets("Sheet1").Range("A4").Value <> Target.Value Then
分别。
错误是由于 VBA 中的一个小问题造成的。我们可以将一个值分配给一个范围,但无法将其用于连接或求值。如果您这样想,就会明白:当 Excel 分配给一个范围时,它应该分配给哪个或哪些值是很清楚的——所有值。但是当它从某个范围读取一个值时,它应该读取哪一个?第一个,还是最后一个?它不想假设,也不想检查每个值以确保它们都相同,因为可能有数百万个单元格。
因此,解决方案是告诉它哪个单元格的值(第一个单元格)A4
与 的单个值进行比较Target
。是的,Target
从技术上讲也是 Range,但在此上下文中保证该范围是一个单元格,因此我们可以获得它的一个值,而无需 Excel 假设任何事情。
就“逻辑错误”(相对于“编译错误”和“运行时错误”)而言,这是安全的,因为我们知道单元格中永远不会A4:100
同时存在不同的值,或者我们接受只有值才决定A4
是否更新的事实。
根据您检查事物的具体原因(或者您可能在多大程度上依赖现有解决方案的复制粘贴),您可能会有兴趣知道这也是一个解决方案:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B7")) Is Nothing Then
Sheets("Sheet1").Range("A4:A100").Value = Target.Value
End If
End Sub