ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 月满西楼雪

凭证数据录入

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-3 17:49 | 显示全部楼层
本帖最后由 月满西楼雪 于 2012-12-3 17:55 编辑
hehex 发表于 2012-12-3 13:10
把你尝试过的,但是有错误的代码发上来看看。
还有详细的功能说明,查询什么,怎么查,结果在哪里显示等 ...



   'If Worksheets("凭证录入").Range("B4:B65536").Find(TextBox1.Value).Value = "TextBox1.Value" Then nrow = Worksheets("凭证录入").Range("e4:e65536").Find(TextBox2.Value).Row
’我想查找出同时满足月份和凭证号所在的行,这行不对????
   
      nrow = Worksheets("凭证录入").Range("B4:B65536").Find(TextBox1.Value).Row'确定月份所在行
      'nrow = Worksheets("凭证录入").Range("e4:e65536").Find(TextBox2.Value).Row‘确定凭证号所在行

别的两个问题我想过啦,加用了函数参数,统计同时满足条件的行数,(x),在动态变化。
目的:在记账凭证表中,通过在文本框输入相应的月份、凭证号,从凭证记录表中调回原来的凭证,在进行查看或修改。现在就是同时满足月份和凭证号的行数我找不出来(nrow),我尝试了and也不对。/////////////麻烦给指点下

整体代码:(也可见附件)

Private Sub Cmdfind_Click()
   Dim nrow As Long
   Dim x As Long
   
   
   'If Worksheets("凭证录入").Range("B4:B65536").Find(TextBox1.Value).Value = "TextBox1.Value" Then nrow = Worksheets("凭证录入").Range("e4:e65536").Find(TextBox2.Value).Row'这个错误
     'nrow= Worksheets("凭证录入").Range("B4:B65536").Find(TextBox1.Value).Row and Worksheets("凭证录入").Range("e4:e65536").Find(TextBox2.Value).Row
(这个也不对)


   
      nrow = Worksheets("凭证录入").Range("B4:B65536").Find(TextBox1.Value).Row
      'nrow = Worksheets("凭证录入").Range("e4:e65536").Find(TextBox2.Value).Row
   
   Sheets("记账凭证").Select
       Range("C7:G16").ClearContents
     With Worksheets("凭证录入")
               Range("h4").Value = TextBox1.Value
          Range("h3").Value = TextBox2.Value
           x = Range("j3").Value - 1
     
        Range(Cells(7, 3), Cells(7 + x, 3)).Value = .Range(.Cells(nrow, 6), .Cells(nrow + x, 6)).Value
        
         Range(Cells(7, 4), Cells(7 + x, 7)).Value = .Range(.Cells(nrow, 8), .Cells(nrow + x, 11)).Value
         Range("G4").Value = .Range(.Cells(nrow, 5), .Cells(nrow, 5)).Value
          Range("C17").Value = .Range(.Cells(nrow, 4), .Cells(nrow, 4)).Value
          Range("h5").Value = .Cells(nrow, 1).Value
          Range("i5").Value = .Cells(nrow, 2).Value
           Range("j5").Value = .Cells(nrow, 3).Value
       Range("d4").Value = Range("h5") & "/" & Range("i5") & "/" & Range("j5")
           
      

   End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-3 17:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
提取同时满足月份和凭证号的行号代码,请教?

财务处理-空白.rar

41.92 KB, 下载次数: 64

TA的精华主题

TA的得分主题

发表于 2012-12-3 20:00 | 显示全部楼层
月满西楼雪 发表于 2012-12-3 17:56
提取同时满足月份和凭证号的行号代码,请教?

我看了你帖子里的代码,才明白你这个查询模块的初衷就是要把凭证录入表的一行记录读回记账凭证表,然后做类似编辑修改(或者阅读)之类的工作。我认为你的这个多重查询是想多了,想偏了。
凭单号是干什么用的?这个一定会是唯一的字段,否则这表设计的也太混乱了。你就用find 方法查到凭单号返回该行行号,然后写回去就可以了。
所谓多重查询,模糊查询的作用对于这种账本程序而言,无非是搜索一定时间范围内的某些特征的凭单集合,然后回顾,这个设计起来还是有点挑战性的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-3 21:00 | 显示全部楼层
hehex 发表于 2012-12-3 20:00
我看了你帖子里的代码,才明白你这个查询模块的初衷就是要把凭证录入表的一行记录读回记账凭证表,然后做 ...

假设每月都有1号凭证,查询是不是重复啦,不对呀

TA的精华主题

TA的得分主题

发表于 2012-12-3 21:11 | 显示全部楼层
月满西楼雪 发表于 2012-12-3 21:00
假设每月都有1号凭证,查询是不是重复啦,不对呀

你们的财务录入凭证的时候不取一个唯一的代码?每个月从1往后排?真没见过这么搞的。需要计数用个序号不完了?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-3 22:09 | 显示全部楼层
hehex 发表于 2012-12-3 21:11
你们的财务录入凭证的时候不取一个唯一的代码?每个月从1往后排?真没见过这么搞的。需要计数用个序号不完 ...

是不是呀,我真还不太懂,我问下卫生局的会计去。明白比的意思啦

TA的精华主题

TA的得分主题

发表于 2012-12-3 23:03 | 显示全部楼层
月满西楼雪 发表于 2012-12-3 22:09
是不是呀,我真还不太懂,我问下卫生局的会计去。明白比的意思啦

这个具体事务肯定是应该规范化唯一的凭证号适合管理啦。
关于多重条件查询,我分享一个相对简单的思路吧,这个也是我学写的第一种程序。
你上面的程序已经用了find 方法,不过好像不太对,我没有去调你写的代码。
我们讨论一下find 方法的一种思路(这个网上攻略很多,EH vba 区的大牛写的也不少,你可以去学习一下)
dim rng as range ' rng 返回你查找的单元格对象,比如说凭证号
xxxxxxx
xxxxxxx
前面工作表选择的代码,输入查询条件的代码略,总之你要有2个String 变量,一个存凭证号(pznum),一个存第2个条件比如月(month)。
set rng=range("      ").find(pznum) 这是一句伪代码,range 对象应该返回你查找的区域,比如存有所有凭证号的列,find 方法里的变量应该是你定义的接收输入凭证号的变量。

if  not rng is nothing And rng.offset(,数值)=month  这仍然是一句伪代码,rng is nothing 就说明没找到,没有这个凭证号,前面加上not 就是找到了第一个条件,然后判断第2个条件,假设是月。那么月所在的单元格应该在表格的同一行,不同的列。因此可以用rng.offset 来定位到那个单元格(具体可以去查资料,offset 方法)是与的关系就是两个都为真的情况(这就实现了2个条件的查询)。
当if 为真的时候,应该返回rng 对象所在的行号,然后利用这个行号把其他的单元格内容写回第一张表去。
当if 为假,就是Else就是你没找到的时候,应该有提示信息,或退出查询程序。
    这个程序对刚接触的人来说有一点复杂,我当初自学的时候憋了整整一个周末才领悟了上面这点东西。
可以试试看把伪代码用真代码实现。vba 初入门就是有些痛苦的,我的第一个vba 程序就是类似别怕书上的一个例子,叶枫老师在菜鸟系列教材里的一个作业,把不同住址的学生(清镇、啥村的)分别拷到不同的worksheet 里去,我痛苦的写了3天还是没写出来。写的痛苦没关系,关键是要写,慢慢的也就能写一点简单的东西了。所以试写一下吧。

也算一点体会吧,我明天也尝试写一段窗体模糊查询的代码,不过就和你的需求完全无关了,纯粹学习了。
学习着,痛苦着也快乐着。

TA的精华主题

TA的得分主题

发表于 2012-12-4 16:57 | 显示全部楼层
我写的窗体查询模块,写的很痛苦,仅供参考。
未实行功能,在窗体内点一行查询结果就将其复制到编辑表中修改,实现方式思考中。

财务处理-空白.zip

67.46 KB, 下载次数: 174

TA的精华主题

TA的得分主题

发表于 2013-2-8 11:16 | 显示全部楼层
hehex 发表于 2012-12-4 16:57
我写的窗体查询模块,写的很痛苦,仅供参考。
未实行功能,在窗体内点一行查询结果就将其复制到编辑表中修 ...

不知道实现了没有,期待呀。

TA的精华主题

TA的得分主题

发表于 2013-2-8 12:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lskvslgt 发表于 2013-2-8 11:16
不知道实现了没有,期待呀。

这个程序后来没有写了,因为需求者的思路与现实应用有较大差距。所以模拟数据继续也没太大意思了。
这个程序我当时是使用Listview 控件把查询结果显示出来的,理论上可以在控件内进行排序等等类似excel 表的操作的,然后可以使用Private Sub ListView_ItemClick(ByVal Item As MSComctlLib.ListItem) 这个窗体控件事件做任何操作,比如将点击的该项内容写入工作表。有思路了,后来就没有动手再去写了。应该是很简单的。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 12:50 , Processed in 0.041733 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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