复制并粘贴单元格范围,同时乘以常量

时间:2018-05-22 20:59:12

标签: vba excel-vba excel

有人可以向我解释原因:

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 个答案:

答案 0 :(得分:1)

在没有看到实际数据的情况下,我几乎是正面的,你正在尝试将非数字(在单元格中像dog这样的文本)相乘。

您不需要进行任何循环,因为只会使用lastrow变量。

当您的代码出现错误时,请点击Debug,然后选择sheet1.Cells(lastrow, 6)。复制然后将其粘贴到立即窗口(查看>立即窗口或Ctrl + G以在IDE中显示),紧跟在问号?sheet1.Cells(lastrow, 6)之后。按Enter键,您将看到单元格中的值是什么。 ?Debug.Print的简写。这将评估表达式并显示单元格包含的内容。我还建议使用.Value.Value2,因为ValueRange的默认成员,在未指定任何内容时会被访问。如果您对[{3}}感兴趣。

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默认情况下。如果/当您使用工作表CodeName访问工作表时,可能会造成混淆。

答案 1 :(得分:0)

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

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