Excel 未正确捕获值

Excel 未正确捕获值,excel,vba,Excel,Vba,我有一个关于VBA的问题 问题 我有一个代码来完成简单的任务,但我不知道原因是什么,但有时这个代码可以完美地工作,但有时它不是 代码解释 转到工作簿中的活动图纸(未隐藏)图纸 在“分配”列中搜索特定文本,在本例中,文本为“当前活动的总和” 复制文本前的单元格 转到“审阅者工作表”并在表中查找工作表名称 将复制的单元格作为链接值粘贴到表中有图纸名称的单元格旁边 继续相同的过程,直到搜索所有活动图纸 代码 当前活动的小计() 将sht变暗为工作表 工作表(“审阅者工作表”)。选择 对于Act

我有一个关于VBA的问题

  • 问题
我有一个代码来完成简单的任务,但我不知道原因是什么,但有时这个代码可以完美地工作,但有时它不是

  • 代码解释
转到工作簿中的活动图纸(未隐藏)图纸

在“分配”列中搜索特定文本,在本例中,文本为“当前活动的总和”

复制文本前的单元格

转到“审阅者工作表”并在表中查找工作表名称

将复制的单元格作为链接值粘贴到表中有图纸名称的单元格旁边

继续相同的过程,直到搜索所有活动图纸

代码

当前活动的小计()
将sht变暗为工作表
工作表(“审阅者工作表”)。选择
对于ActiveWorkbook.工作表中的每个sht
如果sht.Name“审阅者工作表”和Left(sht.Name,1)=0,则
出错时继续下一步
快速选择
f2=“总计”
英镑1=活动表。名称和f2
图纸(sht)。选择
列(“J:J”)。选择
Selection.Find(内容:=“当前活动的总和”_
之后:=ActiveCell_
LookIn:=xlValues_
看:=xlPart_
搜索顺序:=xlByRows_
SearchDirection:=x1Next_
匹配案例:=False)。激活
ActiveCell.Offset(0,1)。选择
选择,复制
工作表(“审阅者工作表”)。选择
列(“C:C”)。选择
Selection.Find(What:=f1_
之后:=ActiveCell_
LookIn:=xlValues_
看:=xlPart_
搜索顺序:=xlByRows_
SearchDirection:=xlNext_
匹配案例:=False)。激活
ActiveCell.Offset(0,14)。选择
活动表。粘贴链接:=True
其他的
如果结束
下一步
端接头

p.S,我有10个不同的特定文本要在25页中搜索。此代码有时适用于所有10个文本,有时会丢失值。

未经测试,但类似的代码应该可以工作:

Sub Sum of_Current_activity() 
Dim sht As Worksheet, c1 As Range, c2 As range


For Each sht In ActiveWorkbook.Worksheets
    If sht.Name Like "0*" Then

        Set c1 = sht.Columns("J:J").Find(What:="Sum of Current Activity", _
                     LookIn:=xlValues,  LookAt:=xlPart, MatchCase:=False)

        Set c2 = Sheets("Reviewer Sheet").Columns("C:C").Find( _
                 What:= sht.Name & " Total", _
                 LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False) 

        If not c1 is nothing and not c2 is nothing then
            'edit: create link instead of copy value
            c2.offset(0, 14).Formula = _
              "='" & c1.parent.Name & "'!" & c1.offset(0,1).Address(true, true)

        End if


    End If    
Next sht

End Sub

因为任务很简单,所以您可以使用
On Error Resume Next
语句并在范围之间直接粘贴
值:

Sub main()
    Dim sht As Worksheet

    On Error Resume Next ' prevent any subsequent 'Find()' method failure fro stopping the code
    For Each sht In Worksheets
        If Left(sht.Name, 1) = "0" Then _
            Sheets("Reviewer Sheet").Columns("C:C").Find( _
                     What:=sht.Name & " Total", _
                     LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False).Offset(0, 14).Value = sht.Columns("J:J").Find(What:="Sum of Current Activity", _
                         LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False).Offset(0, 1).Value
    Next
End Sub
我再次强调,这里之所以使用
On Error Resume Next
,是因为在这种情况下,您可以完全控制忽略错误并继续操作可能产生的副作用


如果在更大的代码中使用此代码段,而不是在错误转到0时用
关闭代码段,并在继续其他代码之前恢复默认错误处理。

如果你把代码表放在顶部,你会很快发现你在
.1=ActiveSheet.Name&f2
中使用了
.1
,然后尝试查找
f1
。哦,这是文章中的一个输入错误,在原始代码中,我使用f1 not£1Get rid On Error Resume Next
并重试。在该代码中还有
x1Next
如何将值粘贴为链接,现在它粘贴为没有链接的值。嗨,Tim,代码中有一个问题我无法解决。在J列中,我有多个“当前活动总和”代码,只复制第一个,但我想复制列中第二个“当前活动总和”旁边的值,你知道吗?谢谢大家的帮助!特别为蒂姆·威廉姆斯,非常感谢。
Sub main()
    Dim sht As Worksheet

    On Error Resume Next ' prevent any subsequent 'Find()' method failure fro stopping the code
    For Each sht In Worksheets
        If Left(sht.Name, 1) = "0" Then _
            Sheets("Reviewer Sheet").Columns("C:C").Find( _
                     What:=sht.Name & " Total", _
                     LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False).Offset(0, 14).Value = sht.Columns("J:J").Find(What:="Sum of Current Activity", _
                         LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False).Offset(0, 1).Value
    Next
End Sub