ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 新人求VBA简化代码,顺便告知怎么能做ACCESS录入,查询,修改

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-10-3 07:56 | 显示全部楼层 |阅读模式
本帖最后由 andrew1012 于 2016-10-3 07:59 编辑

为工作需要做了一个小工具,简单的数据录入,查询,修改,录入界面和数据库都在同一个EXCEL文件里,数据列较多,查询和修改速度非常慢,求高手能赐教优化一下VBA代码,因为excel文件随着数据量越来越大,打开速度越来越慢慢,而且需要同一个团队分享数据,近日在研究用ACCESS来代替在EXCEL里的的数据库,但是代码一点不会,求高手赐教,跪谢。。。。。。。。
查询代码如下,小工具在附件中:

Sub pz_findstyle()
Range("F2").Select
    Selection.Copy
    Range("D6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("D2").Select
    Application.CutCopyMode = False
    Range("D2").Select
    Dim ws_pz As Worksheet, ws_jl As Worksheet, ws_ts As Worksheet
    Set ws_pz = Worksheets("tool")
    Set ws_jl = Worksheets("Track sheet")
    Dim i As Integer, r As Integer
    i = 6
    r_end = ws_jl.Range("A65536").End(xlUp).Row
    For r = 2 To r_end
        If ws_jl.Cells(r, "B") = ws_pz.Range("D6") Then
            ws_pz.Range("F6").Value = ws_jl.Range("A" & r).Value
            ws_pz.Range("D6").Value = ws_jl.Range("B" & r).Value
            ws_pz.Range("D8").Value = ws_jl.Range("C" & r).Value
            ws_pz.Range("M6").Value = ws_jl.Range("D" & r).Value
            ws_pz.Range("W6").Value = ws_jl.Range("E" & r).Value
            ws_pz.Range("F8").Value = ws_jl.Range("F" & r).Value
            ws_pz.Range("M8").Value = ws_jl.Range("G" & r).Value
            ws_pz.Range("W8").Value = ws_jl.Range("H" & r).Value
            ws_pz.Range("AI6").Value = ws_jl.Range("I" & r).Value
            ws_pz.Range("AI8").Value = ws_jl.Range("J" & r).Value
            ws_pz.Range("AN8").Value = ws_jl.Range("K" & r).Value
            ws_pz.Range("E12").Value = ws_jl.Range("L" & r).Value
            ws_pz.Range("E14").Value = ws_jl.Range("M" & r).Value
            ws_pz.Range("AD13").Value = ws_jl.Range("N" & r).Value
            ws_pz.Range("J12").Value = ws_jl.Range("O" & r).Value
            ws_pz.Range("D18").Value = ws_jl.Range("P" & r).Value
            ws_pz.Range("D26").Value = ws_jl.Range("Q" & r).Value
            ws_pz.Range("R18").Value = ws_jl.Range("R" & r).Value
            ws_pz.Range("R24").Value = ws_jl.Range("S" & r).Value
            ws_pz.Range("R30").Value = ws_jl.Range("T" & r).Value
            ws_pz.Range("D36").Value = ws_jl.Range("U" & r).Value
            ws_pz.Range("D42").Value = ws_jl.Range("V" & r).Value
            ws_pz.Range("U44").Value = ws_jl.Range("W" & r).Value
            ws_pz.Range("R36").Value = ws_jl.Range("X" & r).Value
            ws_pz.Range("P44").Value = ws_jl.Range("Y" & r).Value
            ws_pz.Range("Z14").Value = ws_jl.Range("AJ" & r).Value
            ws_pz.Range("L24").Value = ws_jl.Range("AK" & r).Value
            ws_pz.Range("L32").Value = ws_jl.Range("AL" & r).Value
            ws_pz.Range("L38").Value = ws_jl.Range("AM" & r).Value
            ws_pz.Range("L44").Value = ws_jl.Range("AN" & r).Value
            ws_pz.Range("P20").Value = ws_jl.Range("AO" & r).Value
            ws_pz.Range("P26").Value = ws_jl.Range("AP" & r).Value
            ws_pz.Range("P32").Value = ws_jl.Range("AQ" & r).Value
            ws_pz.Range("P38").Value = ws_jl.Range("AR" & r).Value
           i = i + 1
        End If
    Next
    ws_pz.Activate
    If i = 6 Then MsgBox "NOT FOUND"
End Sub


在“tool"页面D2中输入”track sheet"页B列任何数据,点击“SEARCH”查询。

Snip20161002_1.png

track sheet v1.31.xlsm.zip

144.98 KB, 下载次数: 580

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2016-10-6 10:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 jack5d 于 2016-10-6 10:44 编辑

代碼本身沒問題, 雖可簡化, 但不致於能快讓你感受到明顯區別的

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-10-7 10:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jack5d 发表于 2016-10-6 10:37
代碼本身沒問題, 雖可簡化, 但不致於能快讓你感受到明顯區別的

请问是否可以用ACCESS做数据库?

TA的精华主题

TA的得分主题

发表于 2016-10-7 10:24 | 显示全部楼层
本帖最后由 jack5d 于 2016-10-7 10:46 编辑

我建議你直接用ACCESS做, 連前端介面也用ACCESS做
access做比excel做更方便和簡單
但如對access不熟就要花點時間研究了

PS. 用EXCEL作介面, ACCESS做後端庫,寫入沖突問題很難完善解決, 資料鎖定層級設定如要在EXCEL中寫會困難重重, 我有討論過這一問題:
http://club.excelhome.net/forum.php?mod=viewthread&tid=1054466

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-10-8 20:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jack5d 发表于 2016-10-7 10:24
我建議你直接用ACCESS做, 連前端介面也用ACCESS做
access做比excel做更方便和簡單
但如對access不熟就要 ...

但是需要共享数据给整个团队,如果不习惯ACCESS是不是会有很多误操作?怎么能控制所有人不破坏数据?

TA的精华主题

TA的得分主题

发表于 2016-10-12 13:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
做這類類似進存銷系統, 用access絕對比excel優勝, 用excel做,是因為你還沒不會用access
正規資料庫是三層架構, 1使用端, 2轉送, 3基低數據庫, 流程不說了會離題的

你現在做的是小型的, 不考慮安全問題, 只用2層就行了
不管你愛用什麼做介面, 數據庫必定是access的,
而你現行的EXCEL系統, 是把資料和使用介面混在一起
安全必定是問題, 任何人都可隨意修改任何資料, 或直接把它有意無意的刪掉

入正題了, 你要把資料內容和使用介面完全分離出來, 如存放生產進度資料表不能放用戶端, 要放到access上, 分離後, 用VBA寫代碼連接到access抓資料, 把結果返回給excel (有關這方面代碼請用論坦查找ADODB)

如果你用access為介會就會寫少很多代碼, 因為access連access本身就有此功能, 不必另外再寫

最後你說共享數據給整個團隊, 如不習慣會不會有很多誤操作...不會, 你看附圖, 這像的介面怎麼錯的了?
再說你代碼中必定有排錯程序吧, On error.....

怎麼能控制所有人不破壞數據? 你把資料庫和使用介面分離後, 除非別人能知道資數庫在內網的真實位置, 否則他都找不到, 又何來談修改呢? 再說資料庫本體你可設密碼, 他找到了也進不去, 當然是有專業破解軟件, 但不能完美保留數據庫內容...最後, 如果真的很重要的機密資料, 你也不會自己去寫吧, 還是找專人建一套sql架構安全點

SQL + ACCESS

SQL + ACCESS

ACCESS + EXCEL

ACCESS + EXCEL

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

本版积分规则

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

GMT+8, 2024-4-30 21:36 , Processed in 0.033132 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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