Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 为什么我的VBA代码(如下)不工作,引用是否有问题?_Excel_Vba_Memory Leaks - Fatal编程技术网

Excel 为什么我的VBA代码(如下)不工作,引用是否有问题?

Excel 为什么我的VBA代码(如下)不工作,引用是否有问题?,excel,vba,memory-leaks,Excel,Vba,Memory Leaks,代码功能概述: 上面的代码从sheet1复制项目名称,并在sheet2中查找它。如果找到该项目,它将复制项目名称后4列的项目成本,并将该成本粘贴到其相应项目旁边的sheet1中 问题: 它正确地将前几个值放置在sheet1中,但之后崩溃。没有错误,只需从表2中选取错误的值并放置在表1中即可。可能会发生什么 您有一大堆。选择调用,这可能会导致混淆,以及臭名昭著的调用 相反,重做它以避免这些问题。注:根据需要更改图纸名称 Sub rs() Dim i As Integer Dim r

代码功能概述:
上面的代码从sheet1复制项目名称,并在sheet2中查找它。如果找到该项目,它将复制项目名称后4列的项目成本,并将该成本粘贴到其相应项目旁边的sheet1中

问题:

它正确地将前几个值放置在sheet1中,但之后崩溃。没有错误,只需从表2中选取错误的值并放置在表1中即可。可能会发生什么

您有一大堆
。选择
调用,这可能会导致混淆,以及臭名昭著的调用

相反,重做它以避免这些问题。注:根据需要更改图纸名称

Sub rs()
    Dim i As Integer
    Dim randomVar As Variant
    Dim ra As Variant

    'Set ra = New Range
    For i = 4 To 30
        If IsEmpty(Range("B" & i).Value) = True Then GoTo line1

        Range("B" & i).Select
        randomVar = ActiveCell.Value 'stores name of project to be found in another worksheet

        Sheets("Sheet2").Select
        Set ra = Cells.Find(randomVar) 'finds project name

        If ra Is Nothing Then GoTo line1 'if not found continue for loop

        ra.Offset(columnOffset:=4).Copy  'copies found project's cost that is 4 colums right to the project name

        Sheets("Sheet1").Select
        Range("F" & i).Select
        ActiveSheet.Paste 'pastes the cost of the project from other sheet
line1:
    Next i
End Sub

那么它是崩溃了(Excel停止工作)还是只是没有做你想让它做的事情?这些都是完全不同的事情。@Prarabdha-巧合的是(或不是),这也是一个让你复习的好机会。看看您的代码,看看您是否可以按照我解析代码的逻辑直接处理数据。另外一个好处是,您可以看到如何重新工作循环,以避免使用
GoTo
调用。谢谢,我来看看
Sub rs_two()
Dim i As Long
Dim randomVar As String
Dim ra As Range

For i = 4 To 30
    If Not IsEmpty(Sheets("Sheet1").Range("B" & i).Value) Then
        randomVar = Sheets("Sheet1").Range("B" & i).Value
        Set ra = Sheets("Sheet2").Cells.Find(randomVar)
        If Not ra Is Nothing Then
            ra.Offset(0, 4).Copy Sheets("Sheet1").Range("F" & i)
        End If
    End If
Next i

End Sub