代码之家  ›  专栏  ›  技术社区  ›  S31

复制并粘贴单元格区域,同时乘以常量

  •  1
  • S31  · 技术社区  · 6 年前

    有人能给我解释一下为什么:

    Sub test()
    Dim lastrow As Integer, erow As Integer, sheet1 As Worksheet, sheet2 As Worksheet
    
    Set sheet1 = Worksheets("Sheet1")
    Set sheet2 = Worksheets("Sheet2")
    
    lastrow = sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 1 To lastrow
        erow = sheet2.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
        sheet2.Cells(erow, 1) = sheet1.Cells(i, 6) 
        sheet2.Cells(erow, 2) = sheet1.Cells(i, 7)
    Next i
    
    End Sub
    

    工作很好,我知道为什么。但是,如果我

        sheet2.Cells(erow, 1) = sheet1.Cells(i, 6) 
    

    乘以常数:

        sheet2.Cells(erow, 1) = sheet1.Cells(i, 6) * 2
    

    我得到一个类型不匹配错误。

    2 回复  |  直到 6 年前
        1
  •  1
  •   IvenBach    6 年前

    我几乎是肯定的,尽我所能不看实际的数据,你试图乘一个非数字(类似文本的东西 dog 在一个单元中)。

    你不需要任何循环,因为只有 lastrow 将使用变量。

    当您的代码出错时,单击 Debug 然后选择 sheet1.Cells(lastrow, 6) . 复制该文件,然后将其粘贴到即时窗口中(视图>即时窗口或ctrl+g在IDE中显示),紧跟问号,如 ?sheet1.Cells(lastrow, 6) . 按Enter,您将看到单元格中的值是什么。这个 ? Debug.Print . 这将计算表达式并显示单元格包含的内容。我也建议使用 .Value .Value2 自从 Value 是的默认成员 Range 在未指定任何内容时访问。如果你感兴趣的话 https://fastexcel.wordpress.com/2011/11/30/text-vs-value-vs-value2-slow-text-and-how-to-avoid-it/ .

    Sub test()
        Dim lastrow As Long
        lastrow = sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    
        Dim erow As Long
        erow = sheet2.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
    
        sheet2.Cells(erow, 1) = sheet1.Cells(lastrow, 6) * 2
        sheet2.Cells(erow, 2) = sheet1.Cells(lastrow, 7)
    End Sub
    

    注: 我想用 Dim sheet1 as Worksheet 可能导致与工作表冲突的内容 CodeName 属性,因为它将它们命名为 Sheet1, Sheet2, ... SheetN 默认情况下。使用工作表代码名访问工作表时可能会混淆。

        2
  •  0
  •   Dammer15    6 年前
    Dim Cell1Val As Integer
    Dim Cell2Val As Integer
    
    Dim lastrow As Integer
    Dim i As Integer
    lastrow = 10
    
    For i = 0 To lastrow
    
    Cell1Val = Sheet2.Range("A1").Offset(i, 0).Value
    Cell2Val = Sheet2.Range("B1").Offset(i, 0).Value
    
    Sheet2.Range("C1").Offset(i, 0).Value = Cell1Val * 2
    
    Next i
    

    这是我使用的概念。为您的应用程序修改。