求助,用VB编写小程序

qidingshenxian1 2017-12-11 11:37:08
大家好

我想用VB编写一个查询的小程序
有一个Excel表格,我简化了一下
主要是想根据第一列和第二列的条件,在界面上得到第三列的结果


我的想法是建立两个Combo框,第一个框列出第一列的情况,第二个框列出第二列的情况
然后通过Command按钮,得到对应的第三列的信息

希望大神们指导一下
谢谢
...全文
917 20 点赞 打赏 收藏 举报
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
qidingshenxian1 2017-12-17
引用 19 楼 Chen8013 的回复:
自己修改一下吧。 参考这一句: arrDataList(lListPnt).Comment(k) = objDocSht.Cells(i, 3).Value 这儿 objDocSht.Cells(i, 3).Value 就是取之前指定工作表的“第i行、第3列(C列)的值”。   你如果要取第4列(D列),把3改成4就行了。1对应A列,2对应B列……其它类推。 这个 .Value,就是表示取单元格的“结果”,如果单元格实际是填入的“公式”,那么就是“公式计算结果”。 注意一下,“日期、时间”取出来可能是“一个数值”(猜测的,你可以自己验证一下),   这种情况下如果要取“日期、时间文本”,你可以试下把 .Value改为 .Text 。
哈哈,大神就是厉害 十分感谢~
  • 打赏
  • 举报
回复
qidingshenxian1 2017-12-16
引用 16 楼 Chen8013 的回复:
对了,15楼的代码: 第20行 和 第34行 暂时用不上,把它们删除吧。
大神,在问个问题哈 如果我需要的信息在第四列的话,(现在的李阳,李与等人物是在第三列),需要加个什么语句还是哪里修改一下? 谢谢
  • 打赏
  • 举报
回复
舉杯邀明月 2017-12-16
自己修改一下吧。 参考这一句: arrDataList(lListPnt).Comment(k) = objDocSht.Cells(i, 3).Value 这儿 objDocSht.Cells(i, 3).Value 就是取之前指定工作表的“第i行、第3列(C列)的值”。   你如果要取第4列(D列),把3改成4就行了。1对应A列,2对应B列……其它类推。 这个 .Value,就是表示取单元格的“结果”,如果单元格实际是填入的“公式”,那么就是“公式计算结果”。 注意一下,“日期、时间”取出来可能是“一个数值”(猜测的,你可以自己验证一下),   这种情况下如果要取“日期、时间文本”,你可以试下把 .Value改为 .Text 。
  • 打赏
  • 举报
回复
qidingshenxian1 2017-12-15
引用 16 楼 Chen8013 的回复:
对了,15楼的代码: 第20行 和 第34行 暂时用不上,把它们删除吧。
太棒了! 可以了 谢谢大神!!! 我再去具体研究一下代码 真心感谢~~
  • 打赏
  • 举报
回复
舉杯邀明月 2017-12-15
对了,15楼的代码: 第20行 和 第34行 暂时用不上,把它们删除吧。
  • 打赏
  • 举报
回复
舉杯邀明月 2017-12-15
只需要把开头的“声明”部分,和第1个过程 Sub LoadData() 这一段代码换成下面这段。 其它地方不用变。
Option Explicit

Private Type DataInfo
   Comment()   As String
   ID_List()   As String
   Title    As String
   MaxSN    As Long
End Type

Private arrDataList() As DataInfo
Private mlListMaxSN     As Long
Private mlListMaxUBD    As Long

Private Sub LoadData()
   Dim objExcel   As Object
   Dim objDocWBK  As Object
   Dim objDocSht  As Object
   Dim strName    As String
   Dim strTemp    As String
   Dim lPartID    As Long
   Dim lNullCount As Long
   Dim lListPnt   As Long
   Dim i&, k&, w  As Long

   mlListMaxSN = -1&
   On Error GoTo E_FinalExit
   Set objExcel = CreateObject("Excel.Application")
   ' 从哪个文档加载数据,按你的实际情况更改:
   Set objDocWBK = objExcel.Workbooks.Open("E:\Temp\数据信息.xlsx", True)
   Set objDocSht = objDocWBK.Sheets("Sheet1")
   mlListMaxUBD = 7&
   ReDim arrDataList(mlListMaxUBD)
   strName = vbLf ' 随便设置一个“不可能”且不为空的初值
   lPartID = 0&
   lListPnt = -1&
   lNullCount = 0&
   i = 1&         ' 数据从“第1行”开始
   Do
      strTemp = objDocSht.Cells(i, 1).Value
      If ("" = strTemp) Then
         lNullCount = 1& + lNullCount
         If (5& = lNullCount) Then        ' 检测到“连续5个空行”判定数据结束
            mlListMaxSN = lListPnt
            arrDataList(lListPnt).MaxSN = k
            Exit Do
         End If
      Else
         lNullCount = 0&
         If (strTemp <> strName) Then
            If (-1& < lListPnt) Then arrDataList(lListPnt).MaxSN = k
            strName = strTemp
            lListPnt = 1& + lListPnt
            If (lListPnt > mlListMaxUBD) Then
               mlListMaxUBD = 4& + mlListMaxUBD
               ReDim Preserve arrDataList(mlListMaxUBD)
            End If
            k = 0&:  w = 7&
            ReDim arrDataList(lListPnt).ID_List(w)
            ReDim arrDataList(lListPnt).Comment(w)
            arrDataList(lListPnt).Title = strName
         Else
            k = 1& + k
            If (k > w) Then
               w = 8& + w
               ReDim Preserve arrDataList(lListPnt).Comment(w)
               ReDim Preserve arrDataList(lListPnt).ID_List(w)
            End If
         End If
         arrDataList(lListPnt).ID_List(k) = objDocSht.Cells(i, 2).Value
         arrDataList(lListPnt).Comment(k) = objDocSht.Cells(i, 3).Value
      End If
   
      i = 1& + i
   Loop
   
E_FinalExit:
   Set objDocSht = Nothing
   Call objDocWBK.Close(False)
   Set objDocWBK = Nothing
   Call objExcel.Quit
   Set objExcel = Nothing
End Sub
  • 打赏
  • 举报
回复
qidingshenxian1 2017-12-15
引用 13 楼 Chen8013 的回复:
你没有网盘吗…… 要真没有,你可以把文档传到我的这个网盘中吧: http://chen8013.ys168.com/ 进入后(如果你的浏览器提示“风险”什么的,没必要理它,只管“继续”), 再进入第1个文件夹“其它”(注意用鼠标点“其它”这个文字部分),认证密码是 2013758 认证过后,就可以从左边“上传文件”选项卡,把文档放到里面了。 你在11楼的“数据”, Modi这部分“第1列”完全不重复的啊……
谢谢大神 我传到你的共享盘了-->数据查询 的压缩包 那个Excel表格更新了 麻烦帮忙看看 谢谢
  • 打赏
  • 举报
回复
舉杯邀明月 2017-12-14
你没有网盘吗…… 要真没有,你可以把文档传到我的这个网盘中吧: http://chen8013.ys168.com/ 进入后(如果你的浏览器提示“风险”什么的,没必要理它,只管“继续”), 再进入第1个文件夹“其它”(注意用鼠标点“其它”这个文字部分),认证密码是 2013758 认证过后,就可以从左边“上传文件”选项卡,把文档放到里面了。 你在11楼的“数据”, Modi这部分“第1列”完全不重复的啊……
  • 打赏
  • 举报
回复
舉杯邀明月 2017-12-14
“开始空行”很好办啊。 一般正规的“数据表格”都有表头的嘛(并且“表头行”占多少行无所谓),我写这种代码基本都会考虑这个的。 在 Sub LoadData() 中,有一行代码: i = 1& ' 数据从“第1行”开始 你改这个“初始值”就行了啊。 比如你的“表头(以及“空行”)行”共占了5行,那么数据就是从“第6行”开始的。 把这句改成 i = 6 就行了嘛………… 但你说的“中间空行”,这不应该吧!对于“关键字段”,内容怎么会“空”呢! 因为要应对“不确定数据量”,总得有“数据结束”的判断依据吧! 当然,这个“结束条件”并不是必须这样写, 你可以按实际情况,用其它方式判断“数据是否结束”的,然后适当修改就行了。 如果“数据源”内容是固定的,你也可以改为“固定从xx行读取到xxxx行结束…… 顺便说一下别的问题:  在Private Sub LoadData( ) 中,有个变量声明: Dim lListPnt As String   这个输入失误,正确的应该是: Dim lListPnt As Long 传了代码之后,偶然发现,不过我已经关了浏览器,在弄别的东西了,就没说这个。
  • 打赏
  • 举报
回复
qidingshenxian1 2017-12-14
引用 8 楼 Chen8013 的回复:
其实不难。 

不过,不好用文字来描述,给你写了个简单的示例,自己下载来看看吧。
注意代码中的“文件路径”需要按你的实际情况更改一下。
我用的绝对路径,你也可以改来用“相对路径”。
但如果“相对路径”是相对于App.Path,要注意用“双击工程文件”方式打开,否则在IDE中运行时“相对关系”不一定正确。

代码在百度网盘:
链接: https://pan.baidu.com/s/1c168Oog
密码: 785w


我做了个Excel表格,帮忙看看?上传不方便,我复制在下面,开头有两行是空的, part1, part 2,Modi在第二列

part1
SK326_0CS HS 张汉
SK326_0CS FG 李与
SK326_0CS DG 成杰
SK326_0CS SK 成杰
SK326_0CS DG 王小东
SK326_0CS GH 乔斌
SK326_0CS YH 乔斌
SK326_0CS SS 王小东
SK326_0CS SDF 张雷

part2
VW345_1CS HS 张汉
VW345_1CS FG 张汉
VW345_1CS DG 王小东
VW345_1CS SK 乔斌
VW345_1CS DG 乔斌
VW345_1CS GH 王小东
VW345_1CS YH 张雷


Modi
AU276_0CS SS 李嘉
AU276_1CS RT 王小东
AU276_2CS YU 乔斌
AU276_3CS EW 李力
AU276_4CS PSD 李力
AU276_5CS TKM 张雷
AU276_6CS FS 李与
  • 打赏
  • 举报
回复
qidingshenxian1 2017-12-14
引用 8 楼 Chen8013 的回复:
其实不难。  不过,不好用文字来描述,给你写了个简单的示例,自己下载来看看吧。 注意代码中的“文件路径”需要按你的实际情况更改一下。 我用的绝对路径,你也可以改来用“相对路径”。 但如果“相对路径”是相对于App.Path,要注意用“双击工程文件”方式打开,否则在IDE中运行时“相对关系”不一定正确。 代码在百度网盘: 链接: https://pan.baidu.com/s/1c168Oog 密码: 785w
刚刚尝试了一下,你编写的程序是可以的,你这个对我真是太有用了 但是遇到的问题是: 我的Excel开始的几行是空白的,这样就导致出现一个问题:下标越界 还有就是中间也有可能出现空的行,这样的话,在下拉列表里不能小时空白行之后的信息了 另外,我在第一行的是英文字母加下划线之类的好像也不行比如 SK_326/0SS 还请麻烦指导一下,方便的话,留一下QQ或者微信吧 我向你请教一下 谢谢
  • 打赏
  • 举报
回复
qidingshenxian1 2017-12-14
引用 8 楼 Chen8013 的回复:
其实不难。  不过,不好用文字来描述,给你写了个简单的示例,自己下载来看看吧。 注意代码中的“文件路径”需要按你的实际情况更改一下。 我用的绝对路径,你也可以改来用“相对路径”。 但如果“相对路径”是相对于App.Path,要注意用“双击工程文件”方式打开,否则在IDE中运行时“相对关系”不一定正确。 代码在百度网盘: 链接: https://pan.baidu.com/s/1c168Oog 密码: 785w
还没有好好看,但是真是太感谢你了~~ 先把这个结了,后续有问题再请教你哈~~
  • 打赏
  • 举报
回复
舉杯邀明月 2017-12-13
其实不难。  不过,不好用文字来描述,给你写了个简单的示例,自己下载来看看吧。 注意代码中的“文件路径”需要按你的实际情况更改一下。 我用的绝对路径,你也可以改来用“相对路径”。 但如果“相对路径”是相对于App.Path,要注意用“双击工程文件”方式打开,否则在IDE中运行时“相对关系”不一定正确。 代码在百度网盘: 链接: https://pan.baidu.com/s/1c168Oog 密码: 785w
  • 打赏
  • 举报
回复
qidingshenxian1 2017-12-13
引用 6 楼 zdingyun 的回复:
[quote=引用 楼主 qidingshenxian1 的回复:] 大家好 我想用VB编写一个查询的小程序 有一个Excel表格,我简化了一下 主要是想根据第一列和第二列的条件,在界面上得到第三列的结果 我的想法是建立两个Combo框,第一个框列出第一列的情况,第二个框列出第二列的情况 然后通过Command按钮,得到对应的第三列的信息 希望大神们指导一下 谢谢
从所附Excel表内容看,无论如何也无由第一、第二列得到第三列的内容。 凡数据表查询、生成新的排序可用SQL语句与数据控件关联生成新临时表或数组来呈现于数据表格控件。[/quote] 这个表格是我随便拉的一个,希望大神详细指点一下 谢谢
  • 打赏
  • 举报
回复
zdingyun 2017-12-13
引用 楼主 qidingshenxian1 的回复:
大家好 我想用VB编写一个查询的小程序 有一个Excel表格,我简化了一下 主要是想根据第一列和第二列的条件,在界面上得到第三列的结果 我的想法是建立两个Combo框,第一个框列出第一列的情况,第二个框列出第二列的情况 然后通过Command按钮,得到对应的第三列的信息 希望大神们指导一下 谢谢
从所附Excel表内容看,无论如何也无由第一、第二列得到第三列的内容。 凡数据表查询、生成新的排序可用SQL语句与数据控件关联生成新临时表或数组来呈现于数据表格控件。
  • 打赏
  • 举报
回复
qidingshenxian1 2017-12-12
引用 4 楼 Runnerchin 的回复:
是我搞错了。你要的这个是最简单的筛选。选中整个表,然后ctrl + shift + L。EXCEL自带这个功能。
我是想通过VB做一个界面,后续的话,我只需要在这个界面上,通过前两个框的选择,得到第三个的显示结果 谢谢
  • 打赏
  • 举报
回复
X-i-n 2017-12-12
是我搞错了。你要的这个是最简单的筛选。选中整个表,然后ctrl + shift + L。EXCEL自带这个功能。
  • 打赏
  • 举报
回复
qidingshenxian1 2017-12-12
引用 1 楼 Runnerchin 的回复:
添加辅助列,然后直接用vlookup公式
不好意思,我不是很懂 我这个是两列是在同一张表格的 显示结果的话,我认为需要做比较,当同时满足第一列和第二列时,显示对应的第三列的结果 能否帮忙指点一些代码 谢谢
  • 打赏
  • 举报
回复
qidingshenxian1 2017-12-12
不好意思,我不是很懂 我这个是两列是在同一张表格的 显示结果的话,我认为需要做比较,当同时满足第一列和第二列时,显示对应的第三列的结果 能否帮忙指点一些代码 谢谢
  • 打赏
  • 举报
回复
X-i-n 2017-12-12
添加辅助列,然后直接用vlookup公式
  • 打赏
  • 举报
回复
相关推荐
发帖
VB基础类
加入

7544

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2017-12-11 11:37
社区公告
暂无公告