VBA检查1个工作簿中的条件,在另一个工作簿中输入值

时间:2017-02-08 12:52:12

标签: excel vba excel-vba

我正在努力弄清楚如何让代码完成我想要的东西,我尽可能多地写了我能在网上找到的内容,但是在某些方面,我不知道写什么。

代码的目的

在“电子表格2017”中查看每个名称旁边的数字“1”。如果存在“1”,则在另一个名为“日期模板”的工作簿中的一行中的多个单元格中输入值(与“电子表格2017”中的名称相同的行)

关于我希望它做什么的详细信息

  1. A列和B列的列表名(A)和姓(B)
  2. 通过列C检查名称
  3. 旁边的“1”
  4. 如果有1,则切换到工作簿“日期模板”
  5. 在A列中找到相同的名称,并将值7.2(col B),3.9(col C)和74.2(col D)。
  6. 这是代码的基本主干,将来我将寻求添加其他条件,例如D列中的1和C列中的1,所以也许一个案例函数可以更好地工作,然后它将来会更容易添加。我不知道哪个更好。

    在下面的代码中,我只编写它来扫描B列中的姓氏,因为没有重复项。但是在将来,很可能会有姓氏相同的名字,在这种情况下,也必须读取名字。这是我对如何检查两者感到困惑的地方。

    如果可以将名称列表复制到“日期模板”,则可以获得奖励,如果符合条件,则输入这些值。因为目前我手动将名称键入“日期模板”电子表格。

    Sub Summary()
    
        Dim wb1 As Workbook
        Dim Sht As Worksheet
        Dim Rng As Range
        Dim wb2 As Workbook
        Dim cell As Range
        Dim ws As Worksheet
    
        Set wb1 = Workbooks("Works template.xlsm")
        Set wb2 = Workbooks("Spreadsheet 2017")
        Set Sht = wb1.Worksheets("Template") 
        Set ws = wb2.Worksheets("January")
        Set Rng = ws.Range("B7:B" & Sht.Cells(Sht.Rows.Count, "B").End(xlUp).Row)
    
        For Each cell In Rng
            If cell.Offset(0, 2).Value = "1" Then
                Sht.Cells.Offset(0, 3).Value = "7.2" '<--- This is where I get the new error, "Application-defined or object-defined error"
                Sht.Cells.Offset(0, 2).Value = "3.9"
                Sht.Cells.Offset(0, 6).Value = "74.2"
            End If
        Next
    End Sub
    

    非常感谢!

2 个答案:

答案 0 :(得分:1)

Sht.Cells指的是工作表中的所有单元格,因此您无法在此处使用.Offset()

Sub Summary()

    Dim wb1 As Workbook
    Dim Sht As Worksheet
    Dim Rng As Range
    Dim wb2 As Workbook
    Dim cell As Range
    Dim ws As Worksheet

    Set wb1 = Workbooks("Works template.xlsm")
    Set wb2 = Workbooks("Spreadsheet 2017")
    Set Sht = wb1.Worksheets("Template") 
    Set ws = wb2.Worksheets("January")
    Set Rng = ws.Range("B7:B" & Sht.Cells(Sht.Rows.Count, "B").End(xlUp).Row)

    For Each cell In Rng
        If cell.Offset(0, 1).Value = "1" Then
            sht.Range(cell.address).Offset(-2, 0).Offset(0, 0).Value = "7.2"
            sht.Range(cell.address).Offset(-2, 0).Offset(0, 1).Value = "3.9"
            sht.Range(cell.address).Offset(-2, 0).Offset(0, 2).Value = "74.2"
        End If
    Next
End Sub

答案 1 :(得分:0)

if self.new_line:
    angle = random.randint(-45, 45)
    direction_vector = pygame.math.Vector2(0, -self.VEL).rotate(angle)
    self.deltax = direction_vector.x
    self.deltay = direction_vector.y

同一个程序,我们如何返回不是列表而是使用密钥连接的日期
How do we remake the program to copy one value