有人可以向我解释原因:
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
我遇到类型不匹配错误。
答案 0 :(得分:1)
在没有看到实际数据的情况下,我几乎是正面的,你正在尝试将非数字(在单元格中像dog
这样的文本)相乘。
您不需要进行任何循环,因为只会使用lastrow
变量。
当您的代码出现错误时,请点击Debug
,然后选择sheet1.Cells(lastrow, 6)
。复制然后将其粘贴到立即窗口(查看>立即窗口或Ctrl + G以在IDE中显示),紧跟在问号?sheet1.Cells(lastrow, 6)
之后。按Enter键,您将看到单元格中的值是什么。 ?
是Debug.Print
的简写。这将评估表达式并显示单元格包含的内容。我还建议使用.Value
或.Value2
,因为Value
是Range
的默认成员,在未指定任何内容时会被访问。如果您对[{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
这是我使用的概念。修改你的应用程序。