Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5161|回复: 22

[已解决]运行时错误91,怎么都改不过来

[复制链接]
发表于 2015-12-15 10:52 | 显示全部楼层 |阅读模式
本帖最后由 diudiu422 于 2015-12-15 11:16 编辑
  1. Private Sub 清空_Click()

  2.     Dim c As Object, fadd As String, No As String, b As String

  3.           b = Format(Now, "yymmdd")
  4.          
  5.     Range("C4:E4,B6:H15,C18,E18,H18,J18,j6:j16").ClearContents

  6.     With Sheets("入库明细表").Range("B6:B" & Sheets("入库明细表").[B65536].End(xlUp).Row)

  7.         Set c = .Find(Left(Range("J2"), 6), LookIn:=xlValues, lookat:=xlPart)
  8.               
  9.     If b = Mid(c, 5, 6) Then

  10.             fadd = c.Address

  11.             Do

  12.                 No = Left(c, 4) & Format(CStr(Mid(c, 5) + 1))

  13.                 Set c = .FindNext(c)

  14.             Loop While Not c Is Nothing And c.Address <> fadd

  15.         Else

  16.             No = "CPRK" & Format(CStr(Now), "yymmdd") & "01"

  17.         End If

  18.     End With

  19.     Range("J2") = No

  20. End Sub
复制代码
If b = Mid(c, 5, 6) Then 这句一直报错,怎么改都不对,求人来帮看看,本人小白
附件附上,入库 那个工作表的代码
最佳答案
2015-12-15 14:34
把原有的:If b = Mid(c, 5, 6) Then改成
if  c is nothing then tmp="" else tmp=Mid(c, 5, 6)         
If b = tmp Then


原料进库.rar

44.28 KB, 下载次数: 3

发表于 2015-12-15 10:59 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2015-12-15 11:01 | 显示全部楼层
七彩屋 发表于 2015-12-15 10:59
应该是变量的问题吧

能帮忙改改么
回复

使用道具 举报

发表于 2015-12-15 11:01 | 显示全部楼层
没有文档不好测试,你上传附件看看。
回复

使用道具 举报

发表于 2015-12-15 11:05 | 显示全部楼层
find没找到有匹配的值,致使C为nothing时,会报错。
在set c=下面加个判断,C不为nothing时才mid就可以了
回复

使用道具 举报

 楼主| 发表于 2015-12-15 11:07 | 显示全部楼层
你看看

原料进库.rar

44.28 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2015-12-15 11:08 | 显示全部楼层
青城山苦丁茶 发表于 2015-12-15 11:05
find没找到有匹配的值,致使C为nothing时,会报错。
在set c=下面加个判断,C不为nothing时才mid就可以了

If Not c Is Nothing And b = Mid(c, 5, 6) Then
这样么?还是会报

点评

当然不能这样。这样与原样有啥子区别?分成两行  发表于 2015-12-15 11:09
回复

使用道具 举报

 楼主| 发表于 2015-12-15 11:09 | 显示全部楼层
七彩屋 发表于 2015-12-15 11:01
没有文档不好测试,你上传附件看看。

你看看

原料进库.rar

44.28 KB, 下载次数: 4

回复

使用道具 举报

发表于 2015-12-15 11:11 | 显示全部楼层
函数 FIND 和 FINDB 用于在第二个文本串中定位第一个文本串,并返回第一个文本串的起始位置的值,该值从第二个文本串的第一个字符算起。

Set c = .Find(Left(Range("J2"), 6), LookIn:=xlValues, lookat:=xlPart)
c 返回的是一个数值型,代表查找到的位置
mid(文本,数值1,数值2),mid(c,5,6)中,c需要是文本型,但是上面传过来的c是数值型,所以会类型出错
回复

使用道具 举报

 楼主| 发表于 2015-12-15 11:12 | 显示全部楼层
diudiu422 发表于 2015-12-15 11:08
If Not c Is Nothing And b = Mid(c, 5, 6) Then
这样么?还是会报

两行?怎么写呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-6 16:08 , Processed in 0.384805 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表