Sheets("记录").Range("s5").Value = Cells(ah, 34)
改为:
Sheets("记录").Range("s5").Value2 = Cells(ah, 34).Value2
Cells()属于range类型不能赋值,必须后边加.value2 一般赋值取值都用value2不会出错。
sheets和worksheets都不需要定义
range类型可以用offset来自动调整位置,例如:
Sub test()
'
' test Macro
' 宏由 cnmhdzc 录制,时间: 2009-1-18
'
' 快捷键: Ctrl+y
'
Dim myrange1 As Range, myrange2 As Range '定义2个range类型
Dim i As Integer
Set myrange1 = Selection 'myrange1为当前选中单元格,
myrange1.Value2 = Cells(2, 2).Value2 '将第2行第2列单元格的值赋给选中的单元格。
Set myrange1 = Sheets("记录").Range("A1") '指定myrange1,myrange2的具体值
Set myrange2 = Sheets("记录").Range("B1")
For i = 0 To 40 '做40个循环查看效果
myrange1.Offset(i, 2).Value2 = myrange2.Offset(i, 0).Value2 '将myrange2对应的下i行右0列的值 赋给myrange1对应下i行右2列单元格
Next '实际上myrange1.Offset(i, 2).Value2 可以用cells(i,3).value2代替。
End Sub
看了你的贴图,发现一个很奇怪的现象,不知是我孤陋寡闻还是真有问题。说出来仅供参考:
我用了这么多年,一直都是VB编辑器自动调整系统函数名的书写。比如Sheets,Worksheets,如果我写成全小写的,编辑器一定会改成首字母大写的。你的图里却出现了全小写的情况,似乎是系统没有把这两个函数识别出来。而其它的Cells,Range都是对的。
我觉得你的Excel本身有问题。你换台机器试试,看看能不能识别这两个函数,能不能过关。
应该是可以的,确保你的行列ah, 34没有输错.
方便的话可以用hi发过来看看.
Sheets("记录").Range("s5").Value = Sheets("计算").Cells(ah, 34)
我把我的表名改成你的,试了下可以的.
Worksheets("交易记录").Cells(3, 3) = Worksheets("计算表").Cells(4, 2)
这样就可以了
前面要加work