为什么 excel 里的 VBA 宏总是提示类型不匹配

Sub yuwen()
Dim str1, str5, str

Dim ywx, cywx

Dim i, j
ywx = Worksheets("分数线").Cells(5, 5).Value
cywx = Worksheets("分数线").Cells(4, 5).Value - Worksheets("分数线").Cells(5, 5).Value

j = 1

For r = 4 To Worksheets("文科成绩册").UsedRange.Rows.Count

str1 = Worksheets("文科成绩册").Cells(r, 4).Value
str5 = Worksheets("文科成绩册").Cells(r, 5).Value + Worksheets("文科成绩册").Cells(r, 6).Value + Worksheets("文科成绩册").Cells(r, 7).Value + Worksheets("文科成绩册").Cells(r, 8).Value + Worksheets("文科成绩册").Cells(r, 9).Value
If str1 < ywx And str5 > cywx Then
str = Worksheets("文科成绩册").Cells(r, 3).Value
Worksheets("六缺一").Cells(j, 1).Value = str
j = j + 1
End If
Next
End Sub

提示类型不匹配
我下面的可以运行

Sub test()
Dim str
Dim i, j
i = 1
j = 1
For r = 1 To Worksheets("我").UsedRange.Rows.Count
For c = 1 To Worksheets("我").UsedRange.Columns.Count
str = Worksheets("我").Cells(r, c).Value
Worksheets("你").Cells(j, 1).Value = i
Worksheets("你").Cells(j, 2).Value = c
Worksheets("你").Cells(j, 3).Value = str
j = j + 1
Next
i = i + 1
Next
End Sub

第1个回答  2014-03-24
无法帮楼主调试!
建议楼主单步执行代码,看看执行到哪一步时发生错误。

不过,我先猜一下,估计是在计算 str5 这行代码时出错的。若真的是这样,则与工作表中的数据类型有很大的关系。最直接的原因是,有些单元格内的数据是数值型的,有些单元格内的数据是文本型的。
第2个回答  2014-03-24
原表数据类不对,比如140、158、159、160这四行的值不属于数字类型,无法计算,解决方案可以更改这些值为0,或者在代码中加防错语句on error resume next,不建议采用本回答被提问者采纳
第3个回答  2014-03-23
比如,Worksheets("分数线").Cells(5, 5).Value这行只有工作簿名称”分数线“而没有工作表名称Sheets("?").

改为Worksheets("分数线").Sheets("?").Cells(5, 5).Value
试试。追问

我的这个就是工作表的,分数线和文科成绩册 是sheet的

追答

可惜看不到原件

追问

我把原件传给你

这是原件http://pan.baidu.com/s/1jGJqeVG

宏 在 文科成绩册下面

第4个回答  2014-03-24
贴出程序代码
第5个回答  2014-03-24
贴出网址代码
相似回答