Excel精英培训网

 找回密码
 注册

QQ登录

只需一步,快速开始

你正在寻找更好的Excel学习教程吗?Excel技巧80集+数据透视表+函数初中高全套+VBA80集,想学的这儿全都有
查看: 710|回复: 16

[已解决] [已解决]想用VBA做库存的查询和添加,但是写到最后卡在了FIND取得的行数上。。

[复制链接]
发表于 2017-5-22 05:37 | 显示全部楼层 |阅读模式
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
我写了代码以后用了With Worksheets("库存"),但没有效果,结果是FIND找到的行,只是“查询”这个表的行,而不是另一个“库存”这个表的行数。。
之后我想做成在查询里,查到什么直接就可以更改数量,但是不知道是因为FIND函数的问题,还是自己本身代码漏洞百出

求大神帮忙



1.jpg 这是查询表
2.jpg 想做成在查询表上,查到什么直接往后面E列输入数值,可以更改前面的剩余数量
3.jpg 因为是库存,所以要做到入库出库,有些项目的库存应该写入的空白单元格在F列,有的空白在G列,所以要自动在该项的 行 后面空白单元格填入上图填入的数值(例如上图三星LCD   9060   “颜色无”  填写是-2,那会自动复制这个数值到此图的F32,从而实现上图的数量变化)

麻烦大神帮忙。。我知道我的思路有点飘,有描述不清的地方麻烦说一声,我尽可能用自己能组织的语言来说,谢谢了

库存.rar (108.44 KB, 下载次数: 12)
金币
20  
积分
26 
帖子
60 

6 2 2

zjdh发布于 2017-5-24 13:01:15 |显示全部回帖
改成用数组不仅速度快,而且无差错:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 5 And Target <> "" Then
        If Target.Row > 3 And Target.Row < 201 Then
            x = Target.Row()
            With Worksheets("库存")
                ARR = .Range("A1").CurrentRegion
                For I = 2 To UBound(ARR)
                    If ARR(I, 1) & ARR(I, 2) & ARR(I, 3) = Cells(x, 1) & Cells(x, 2) & Cells(x, 3) Then Exit For
                Next
                blank = .Cells(I, 3).End(2).Column + 1
                Target.Copy .Cells(I, blank)
            End With
        End If
    End If
End Sub

发表于 2017-5-22 09:26 | 显示全部楼层
本帖最后由 雪舞子 于 2017-5-22 09:38 编辑

代码在“查询”表模块里,只对“查询”表起作用,
如想操作其他表,比如“库存”表,就在操作单元格前面加上表名
表名要用双引号引上,比如:“Sheets("库存")”。
另外区域表达的方式有问题,造成代码未执行。
回复 支持 反对

使用道具 举报

发表于 2017-5-22 09:48 | 显示全部楼层
将限制条件改成这样试试:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Column = 5 Then
  3.         If Target.Row > 3 And Target.Row < 201 Then
  4.             '操作的代码
  5.         End If
  6.     End If
  7. End Sub
复制代码
回复 支持 反对

使用道具 举报

发表于 2017-5-22 10:59 | 显示全部楼层
本帖最后由 zjdh 于 2017-5-22 11:00 编辑

要查询其他表的内容用
With Worksheets("库存")
        xfind1 = Range("A:A").Find(zonefind1, LookIn:=xlValues, After:=[A9999], lookat:=xlWhole).Row
       .........
End With
则 Range 前要加个“.” ,  [9999] 前也要加个“.” ,否则查询的是当前工作表!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-22 19:40 | 显示全部楼层
雪舞子 发表于 2017-5-22 09:26
代码在“查询”表模块里,只对“查询”表起作用,
如想操作其他表,比如“库存”表,就在操作单元格前面加 ...

谢谢!!我回去加了试试看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-22 19:41 | 显示全部楼层
雪舞子 发表于 2017-5-22 09:48
将限制条件改成这样试试:

谢谢大神,我回去改了以后试试看!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-22 19:42 | 显示全部楼层
zjdh 发表于 2017-5-22 10:59
要查询其他表的内容用
With Worksheets("库存")
        xfind1 = Range("A:A").Find(zonefind1, LookIn: ...

这样啊。。我说怎么都不起效果,谢谢提醒!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-23 06:28 | 显示全部楼层
zjdh 发表于 2017-5-22 10:59
要查询其他表的内容用
With Worksheets("库存")
        xfind1 = Range("A:A").Find(zonefind1, LookIn: ...

我在前面加了“.”之后起效果了,谢谢!
变量的值显示的都是对的
再改了一下,上半部分都可以了,但是下半部分又有新问题出现了,就是当我往查询表中填入数字,想要以此来更改“库存”表中的数据时,会提示错误9,下标越界。。这是为什么呢


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then
If Target.Row > 3 And Target.Row < 201 Then
    Worksheets("查询").Cells(x, y).Copy Destination:=Worksheets(库存).Cells(xfind, blank)
    End If
    End If
End Sub


问题出在这一段上(同时谢谢 @雪舞子 大神的帮助让我改进了下代码)
库存.rar (109.03 KB, 下载次数: 6)
回复 支持 反对

使用道具 举报

发表于 2017-5-23 08:01 | 显示全部楼层
本帖最后由 zjdh 于 2017-5-23 08:14 编辑

你这儿变量 x、y、xfind、blank 都没有赋值!
工作表“库存”没有引号!



回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-24 05:53 | 显示全部楼层
本帖最后由 tianxy 于 2017-5-24 05:55 编辑
zjdh 发表于 2017-5-23 08:01
你这儿变量 x、y、xfind、blank 都没有赋值!
工作表“库存”没有引号!

呃,我把代码改成了
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 5 Then
    If Target.Row > 3 And Target.Row < 201 Then
……
    With Worksheets("查询")
    .Cells(x, y).Copy Destination:=Worksheets("库存").Cells(xfind, blank) ‘这一行显示错误
    End With

    End If
    End If
……

End Sub

可是依旧不行,显示运行错误1004,应用程序定义或对象定义错误,这是为什么呢?
如果放到thisworkbook里反而一点效果都没有了
谢谢!帮了这么多忙,因为人在国外有时差,所以只有下班才能弄一会,一直折腾不出来。。
库存.rar (111.4 KB, 下载次数: 3)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2017-10-23 21:34 , Processed in 0.218400 second(s), 34 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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