ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 来生缘

我是如何用EXCEL+ACCESS+WORD做出一个适合自己使用的东东的

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-6-10 13:09 | 显示全部楼层
本帖已被收录到知识树中,索引项:Access协同

第九步

 

查找(分4步吧)

 第九步(二)

初始化查找窗口

 

设计查找投机条件时,本来我是以为只需要根据姓名和工作单位查找就可以了,但在实际工作中却不然,一百个人有一百种口味,算我被打败。所以我就将所有可用于查找的条件都用列表框列出来,当然,目前还是只根据一个条件查找,因为没人向我要求组合条件查找,我也就懒得考虑了。

然后就是初始化一下ListView控件,我把所有的字段都列出来了。代码如下:


Private Sub UserForm_Initialize() '窗口初始化

    ComboBox1.AddItem "姓名"
    ComboBox1.AddItem "办公电话"
    ComboBox1.AddItem "手机"
    ComboBox1.AddItem "小灵通"
    ComboBox1.AddItem "传真"
    ComboBox1.AddItem "家庭电话"
    ComboBox1.AddItem "QQ号码"
    ComboBox1.AddItem "工作单位"
    ComboBox1.AddItem "单位地址"
    ComboBox1.AddItem "邮政编码"
    ComboBox1.AddItem "电子邮件"
    ComboBox1.AddItem "MSN"

    ComboBox1.ListIndex = 0

    ListView1.ListItems.Clear
    ListView1.View = lvwReport
    ListView1.FullRowSelect = True
    ListView1.Gridlines = True

    UserForm2.ListView1.ColumnHeaders.Clear
    UserForm2.ListView1.ColumnHeaders.Add , , "ID", 0.1
    UserForm2.ListView1.ColumnHeaders.Add , , "姓名", 50
    UserForm2.ListView1.ColumnHeaders.Add , , "办公电话", 70
    UserForm2.ListView1.ColumnHeaders.Add , , "手机", 60
    UserForm2.ListView1.ColumnHeaders.Add , , "小灵通", 70
    UserForm2.ListView1.ColumnHeaders.Add , , "传真", 70
    UserForm2.ListView1.ColumnHeaders.Add , , "家庭电话", 70
    UserForm2.ListView1.ColumnHeaders.Add , , "QQ号码", 60
    UserForm2.ListView1.ColumnHeaders.Add , , "工作单位", 120
    UserForm2.ListView1.ColumnHeaders.Add , , "单位地址", 120
    UserForm2.ListView1.ColumnHeaders.Add , , "邮政编码", 30
    UserForm2.ListView1.ColumnHeaders.Add , , "电子邮件", 120
    UserForm2.ListView1.ColumnHeaders.Add , , "MSN", 120

End Sub

特别说明:

好像是用引用下图的玩意,ListView控件才能用。

 


[此贴子已经被作者于2006-6-27 21:39:58编辑过]
qrPFXbbh.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-6-10 13:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

第九步(三)

执行查找

按下执行按钮后,我首先把ListView1里的东东全部清除掉,然后判断文本框是否为空,如果为空,则搜索数据库中的所有数据,如果不为空,则将数据库中以列表框为字段名,且该字段记录值等于(或类似于)文本框数据的值搜索出来,然后将搜索出来所有值列在ListView1中。再用标签3记一下数。

代码如下:

Private Sub CommandButton1_Click()    '执行查询

    ListView1.ListItems.Clear
    Call mycnn

    If TextBox1 = "" Then
        Strsql = "Select * From 通讯录"
    Else
        Strsql = "Select * From 通讯录 where " & ComboBox1.Value & " like'%" & TextBox1.Text & "%'"
    End If

    rst.Open Strsql, cnn, 1, 3

    If rst.RecordCount <> 0 Then

        For i = 1 To rst.RecordCount
            ListView1.ListItems.Add , , rst.Fields(0)
            For j = 1 To 12
                ListView1.ListItems(i).SubItems(j) = rst.Fields(j)
            Next
            rst.movenext
        Next

        Label3.Caption = "一共查找到  " & rst.RecordCount & "  条记录!"

        Set rst = Nothing
        Set cnn = Nothing

    Else
        Label3.Caption = "一共查找到  " & "零" & "  条记录!"
    End If
End Sub

[此贴子已经被作者于2006-6-27 21:50:15编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-6-10 13:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

第九步(四)

返回主窗口和退出

1、返回主窗口

我用了两种方法,一是在选择ListView1的中的一条记录后按下返回按钮,一是双击ListView1的中的一条记录。返回时,只需要将选中记录的ID列值赋给myid就可以了,因为在userfom1的初始化中,我已经根据myid的值来将数据库中ID字段值等于myid的记录显示在文本框中。代码如下:

Private Sub CommandButton2_Click()    '返回到主窗口
    On Error Resume Next
    myID = ListView1.SelectedItem
    Unload Me
    UserForm1.Show 0
End Sub


Private Sub ListView1_DblClick()    '返回到主窗口
    On Error Resume Next
    myID = ListView1.SelectedItem
    Unload Me
    UserForm1.Show 0
End Sub

 

2、退出

退出没什么好说的。顺便将右上角的叉禁止掉吧

代码如下:

Private Sub CommandButton3_Click()    '退出查询
    Unload Me
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)    '禁止使用右上角的X
    If CloseMode <> 1 Then Cancel = 1
End Sub

[此贴子已经被作者于2006-6-27 22:00:16编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-6-10 13:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

第十步

 

打印

在进行打印时,我选择用的是WORD,为什么要这样,在后面的帖子里我也回答了,WORD的排版功能好,而我打印的文书又相对复杂,用EXCEL或ACCESS之类的实在没法达到满意的效果(这里我仅用打印信封来举个例,打印信封相对简单,如果是合同、协议之类的文本,就会感觉到WORD的好处了)。废话不讲,为了用WORD,我想了不少办法,最初用的是邮件合并,但感觉效果不太理想,后来偶尔在网上看到一个例子,用书签的方法,感觉比较爽,大致的办法是(我自己的理解,不知是否有误,如有误的还请指出来),先根据自己需要设计一个WORD模板,在模板中需要插入数据的地方插入书签,然后在EXCEL中用以模板新建一个WORD文档,分别找到这些书签,把相应的数据插入。说起来比较绕口,直接动手。

我先打开我第一步时建的信封WORD文档,分别大致在信封需要填写内容的地方插入书签(要达到在信封上打印的最佳效果,请去打印机最最调整吧 ),分别为“邮编1、邮编2、邮编3、邮编4、邮编5、邮编6、单位地址、工作单位、姓名”,插入后,效果如下图(如果插入后看不到下图效果,请勾选工具——选项——视图——显示——书签,如果要好看一点,不想显示书签,去就掉那个勾):

 

EXCEL中的代码如下:

Private Sub CommandButton9_Click()    '打印

    Dim wd As New Word.Application
    Dim i%

    wd.Documents.Add ThisWorkbook.Path + "\信封.doc", False
    wd.Visible = False

    For i = 1 To 6
        wd.Selection.GoTo wdGoToBookmark, , , "邮编" & i
        wd.Selection.TypeText VBA.Mid(TextBox10.Text, i, 1)
    Next
    wd.Selection.GoTo wdGoToBookmark, , , "单位地址"
    wd.Selection.TypeText TextBox9.Text
    wd.Selection.GoTo wdGoToBookmark, , , "工作单位"
    wd.Selection.TypeText TextBox8.Text
    wd.Selection.GoTo wdGoToBookmark, , , "姓名"
    wd.Selection.TypeText TextBox1.Text

    wd.Visible = True
'    wd.PrintOut
'    wd.ActiveDocument.SaveAs ThisWorkbook.Path + "\已打信封\" + TextBox1.Text + ".doc"

'大伙知道上面注释掉的三行是什么意思吧?
'    Application.OnTime Now + TimeValue("00:00:3"), "my_Procedure"

'上面的一行我是用来关闭WORD的,不知道是不是我的机器太好了,经常是还没有打印,WORD就退出了,只能让它延迟三秒再退出

 End Sub


PS:上面的代码需要引用microsoft word 9.0 object library

[此贴子已经被作者于2006-6-29 21:05:55编辑过]
48SPL3BE.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-6-10 13:09 | 显示全部楼层

第十一步

 

加载宏

现在通讯录已经可以用了,但每次打开都有一个烦人的宏提示,为了绕过这个这个宏提示,我用的是加载宏的办法(好多高手用封装的办法,我没学会[em04])。

我的办法是,打开EXCEL后在工具栏上搜索TooltipText属性为“通讯录”的按钮,如果有就不理它,如果没有,就在工具栏上增加一个命令按钮,这个命令指向一个用于打开userform1的过程。然后把通讯录.xls另存为加载宏,再到工具——加载宏中去引用它,然后每个打开EXCEL,就在工具栏上有一个按钮用于控制通讯录。

代码如下:

Private Sub Workbook_Open()
    Dim i%
    For i = 1 To Application.CommandBars("Worksheet Menu Bar").Controls.Count
        If Application.CommandBars("Worksheet Menu Bar").Controls.Item(i).TooltipText = "通讯录" Then
            Exit Sub
        End If
    Next

    Set mybar = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton, ID:=2950, Before:=11)
    mybar.Caption = "通讯录"
    mybar.TooltipText = "通讯录"
    mybar.OnAction = "myTXL"
End Sub

Sub myTXL()
    UserForm1.Show 0
End Sub
'上面三行放在模块中

[此贴子已经被作者于2006-6-29 21:51:32编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-6-10 13:10 | 显示全部楼层

最后

多人使用

到了第十一步,其实已经结束了,但由于我的东东需要好几位大佬在局域网内同时使用,从正道走我是没办法了,只能走歪门邪道。我的办法是,把加载宏复制为几个不同名的加载宏,放在一个用来做服务器的计算机的一个共享文件夹中,然后把这个共享文件夹映射到网域内需要使用这个东东的每台计算机上去,然后在每台机上加载宏,哈哈,这样就可以同时使用同一个数据库了。

谁还有更好的办法,如果不是太复杂,请告诉我,谢谢。

附上通讯录:

  4ZOmN6f7.rar (61.91 KB, 下载次数: 2612)

(有人说下载不了,重传一次)

PS:我是边做这个通讯录,边说的,如有谬误,就请扔鸡蛋吧。[em04][em04]

{完工}

 



[此贴子已经被作者于2006-7-16 15:41:22编辑过]

A5RrFGRo.rar

61.91 KB, 下载次数: 2315

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2006-6-10 13:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢分享!

TA的精华主题

TA的得分主题

发表于 2006-6-10 14:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-6-12 12:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
期待佳作

TA的精华主题

TA的得分主题

发表于 2006-6-13 07:18 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-1 18:55 , Processed in 0.046501 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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