简体   繁体   English

从具有许多语句的另一张工作表有条件地复制不起作用

[英]Conditional copying from another sheet with many statements isn't working

I wanted to save tons of time with a script, so I googled some ways to copy some cells from Excel sheet to another if the statement is true (and in the full code there are ~200 statements), but unfortunately I got stuck, and it just doesn't want to work.我想用脚本节省大量时间,所以我在谷歌上搜索了一些方法,如果语句为真,将一些单元格从 Excel 工作表复制到另一个单元格(并且在完整代码中有大约 200 个语句),但不幸的是我被卡住了,并且它只是不想工作。 The first one runs just fine, but the others, where it should check if the statement is true in another cell on the right, won't work.第一个运行得很好,但其他的,它应该检查右边另一个单元格中的语句是否为真,将不起作用。

Sub Proc1()
Dim value As String, result As String

Value1 = Worksheets("munka4").Range("H6").value
Value2 = Worksheets("munka4").Range("I6").value
Value3 = Worksheets("munka4").Range("J6").value

If Value1 = "Car" Then
 Worksheets("munka4").Range("E6").Copy Worksheets("munka2").Range("F10") 
 Worksheets("munka4").Range("F6").Copy Worksheets("munka2").Range("H10") 
 Worksheets("munka4").Range("D6").Copy Worksheets("munka2").Range("B10") 
 Worksheets("munka4").Range("H9").Copy Worksheets("munka2").Range("B8") 
 Worksheets("munka4").Range("H8").Copy Worksheets("munka2").Range("B12") 
 Worksheets("munka4").Range("H10").Copy Worksheets("munka2").Range("B14") 

 If Value2 = "Car" Then
 Worksheets("munka4").Range("E6").Copy Worksheets("munka2").Range("F10") 
 Worksheets("munka4").Range("F6").Copy Worksheets("munka2").Range("H10") 
 Worksheets("munka4").Range("D6").Copy Worksheets("munka2").Range("B10") 
 Worksheets("munka4").Range("I9").Copy Worksheets("munka2").Range("B8") 
 Worksheets("munka4").Range("I8").Copy Worksheets("munka2").Range("B12")  
 Worksheets("munka4").Range("I10").Copy Worksheets("munka2").Range("B14")  

 If Value3 = "Car" Then
 Worksheets("munka4").Range("E6").Copy Worksheets("munka2").Range("F10") 
 Worksheets("munka4").Range("F6").Copy Worksheets("munka2").Range("H10") 
 Worksheets("munka4").Range("D6").Copy Worksheets("munka2").Range("B10") 
 Worksheets("munka4").Range("J9").Copy Worksheets("munka2").Range("B8") 
 Worksheets("munka4").Range("J8").Copy Worksheets("munka2").Range("B12")  
 Worksheets("munka4").Range("J10").Copy Worksheets("munka2").Range("B14")

 End if 
 End if 
 End if

 End Sub

Since your tests are fully independent, you should close the "if Value" code block after the block of instructions to copy the cells end.由于您的测试是完全独立的,您应该在复制单元格的指令块结束后关闭“if Value”代码块。 Try like this:像这样尝试:

Sub Proc1()
Dim value As String, result As String

  Value1 = Worksheets("munka4").Range("H6").value
  Value2 = Worksheets("munka4").Range("I6").value
  Value3 = Worksheets("munka4").Range("J6").value

    If Value1 = "Car" Then
     Worksheets("munka4").Range("E6").Copy Worksheets("munka2").Range("F10") 
     Worksheets("munka4").Range("F6").Copy Worksheets("munka2").Range("H10") 
     Worksheets("munka4").Range("D6").Copy Worksheets("munka2").Range("B10") 
     Worksheets("munka4").Range("H9").Copy Worksheets("munka2").Range("B8") 
     Worksheets("munka4").Range("H8").Copy Worksheets("munka2").Range("B12") 
     Worksheets("munka4").Range("H10").Copy Worksheets("munka2").Range("B14") 
   End if 

     If Value2 = "Car" Then
     Worksheets("munka4").Range("E6").Copy Worksheets("munka2").Range("F10") 
     Worksheets("munka4").Range("F6").Copy Worksheets("munka2").Range("H10") 
     Worksheets("munka4").Range("D6").Copy Worksheets("munka2").Range("B10") 
     Worksheets("munka4").Range("I9").Copy Worksheets("munka2").Range("B8") 
     Worksheets("munka4").Range("I8").Copy Worksheets("munka2").Range("B12")  
     Worksheets("munka4").Range("I10").Copy Worksheets("munka2").Range("B14")  
    End if 

     If Value3 = "Car" Then
     Worksheets("munka4").Range("E6").Copy Worksheets("munka2").Range("F10") 
     Worksheets("munka4").Range("F6").Copy Worksheets("munka2").Range("H10") 
     Worksheets("munka4").Range("D6").Copy Worksheets("munka2").Range("B10") 
     Worksheets("munka4").Range("J9").Copy Worksheets("munka2").Range("B8") 
     Worksheets("munka4").Range("J8").Copy Worksheets("munka2").Range("B12")  
     Worksheets("munka4").Range("J10").Copy Worksheets("munka2").Range("B14")
   End if

End Sub

You've already got an acceptable answer/solution, but regarding this:您已经得到了可接受的答案/解决方案,但关于此:

(and in the full code there are ~200 statements) (在完整代码中有~200 条语句)

If that means you're going to copy-paste the If statement ~200 times and amend each instance slightly (not sure?), then something like the below could be of use (no copy-pasting should be required).如果这意味着您要复制粘贴If语句约 200 次并稍微修改每个实例(不确定?),则可以使用以下类似内容(不需要复制粘贴)。

Option Explicit

Sub CopyCellsFromFirstCarColumn()
    Dim rangeToCheck As Range
    Set rangeToCheck = Worksheets("munka4").Range("H6").Resize(1, 200) ' Assumes 200 checks, and that range is contiguous

    Dim matchResult As Variant
    matchResult = Application.Match("Car", rangeToCheck, 0)

    If IsError(matchResult) Then
        MsgBox ("None of the cells in range '" & rangeToCheck.Address & "' on the sheet '" & rangeToCheck.Parent.Name & "' are 'Car'. Nothing has been copied. Code will stop running now.")
        Exit Sub
    End If

    Dim columnToCopy As Long
    columnToCopy = rangeToCheck.Offset(0, matchResult - 1).Column ' -1 as going from 1-based to 0-based

    ' These cells being copied do not change.
    Worksheets("munka4").Range("E6").Copy Worksheets("munka2").Range("F10")
    Worksheets("munka4").Range("F6").Copy Worksheets("munka2").Range("H10")
    Worksheets("munka4").Range("D6").Copy Worksheets("munka2").Range("B10")

    ' These cells being copied depend on where "Car" was found.
    Worksheets("munka4").Cells(9, columnToCopy).Copy Worksheets("munka2").Range("B8")
    Worksheets("munka4").Cells(8, columnToCopy).Copy Worksheets("munka2").Range("B12")
    Worksheets("munka4").Cells(10, columnToCopy).Copy Worksheets("munka2").Range("B14")

 End Sub

The above will only copy for the first instance of "Car" .以上只会复制"Car"的第一个实例。 I think this is fine in your case, as you said: "I know that there would be only one case, but I don't know in which cell."我认为这在你的情况下没问题,正如你所说: "I know that there would be only one case, but I don't know in which cell."

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM