ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] Piny-設置下述防呆機制(VBA)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-7-27 09:46 | 显示全部楼层 |阅读模式
感謝藍老師協助,考量閱讀便利性,另開新帖求問。

第一問連結
http://club.excelhome.net/thread-739394-1-1.html

第二問連結
http://club.excelhome.net/thread-742825-1-1.html

第三問連結
http://club.excelhome.net/thread-744225-1-1.html

問題一:設置下述防呆機制

先敍述日後該工作表使用步驟:
1.執行「更新產業名」VBA
2.輸入B3, B4, B7, B8, C11~D15, H2~K11之資訊
3.執行「基準分析」VBA

故非上述操作步驟將皆提示錯誤,不給運行,依實際工作上經驗,下述為常見之錯誤習慣,希望可以改善,請以本樓附件修改代碼,謝謝! ^^

情況一:
在執行「更新產業名」VBA時,先將整張工作表取消保護(即可以修改單元格值)

執行「基準分析」VBA時,先檢視有無下述情況,若有,則提示不給運行理由並離開VBA,若無,則開始執行,並於執行後將整張工作表保護(即不可以再修改單元格值)

情況二:
若B3之輸入資訊非其有效清單,則提示「請確認B3資訊是否為有效清單」,B4, B7, B8亦然

情況三:
若C11~D15之輸入資訊非介於0~1之整數(含),則提示「請確認XX資訊是否為有效值」,XX請為出錯單元格位址

情況四:
若H2~K11完全未輸入資訊,則提示「請選填產業名或關鍵字」

201105-piny Ex4 0727-第一版.zip

946.49 KB, 下载次数: 46

TA的精华主题

TA的得分主题

发表于 2011-7-28 12:30 | 显示全部楼层
请见附件。
先显示一个按钮。

201105-piny Ex4 0727-材??.rar

649.91 KB, 下载次数: 18

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-28 12:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
謝謝藍老師

可是若執行基準分析想更改條件,我的預設作法係需重新執行「更新產業名」,所以若老師的作法係將按鈕隱藏,則要如何重作呢?

另請將EI16之公式先修正為
=IF(ISNA(MATCH(EI17,F3:F11,)),"",MATCH(EI17,F3:F11,))

避免B8可能選「否」產生的Bug

另可否貼出您的代碼,Excel打開全是亂碼,謝謝老師! ^^

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-28 16:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
補充一下 簡体字代碼在繁体版Excel運行時,代碼區的漢字幾乎都會變成亂碼,想要修改也不曉得簡体字是寫什麼,

如下述連結情況
http://club.excelhome.net/viewth ... d=527467#pid5057407

故若蒙藍老師撥冗協助,請同步貼上您的代碼,俾小弟用人工修改!感恩! ^^

TA的精华主题

TA的得分主题

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

有中文的代码

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Count > 1 Then Exit Sub
  3. If (Target.Column <> 3 And Target.Column <> 4) Or (Target.Row < 11 And Target.Row > 15) Then Exit Sub
  4.     If Target.Value < 1 And Target.Value > 0 Then
  5.         If Target.Column = 3 Then
  6.             If Target.Offset(0, 1) <> "" Then
  7.                 If Target < Target.Offset(0, 1) Then
  8.                     MsgBox "請確認" & Target.Address & "資訊是否為有效值?"
  9.                     Application.EnableEvents = False
  10.                     Target = ""
  11.                 End If
  12.             End If
  13.         Else
  14.             If Target.Offset(0, -1) <> "" Then
  15.                 If Target > Target.Offset(0, -1) Then
  16.                     MsgBox "請確認" & Target.Address & "資訊是否為有效值?"
  17.                     Application.EnableEvents = False
  18.                     Target = ""
  19.                 End If
  20.             End If
  21.         End If
  22.     Else
  23.         MsgBox "請確認" & Target.Address & "資訊是否為有效值?"
  24.         Application.EnableEvents = False
  25.         Target = ""
  26.     End If
  27. Application.EnableEvents = True

  28. End Sub

  29. Sub jzfx()
  30. Dim cel As Range, col%, x, i&, y, j&, Brr, ii&, jj&, ks, js, aa
  31. Dim d1, k1, t1
  32. Set d1 = CreateObject("Scripting.Dictionary")
  33. Sheet11.Activate
  34. ActiveSheet.Calculate
  35. Application.Calculation = xlManual
  36. n = Application.CountA(Sheet11.[h2:k11])
  37. If n = 0 Then MsgBox "請在H2:K11選填產業名或關鍵字": Exit Sub
  38. Brr = [h2:k11]
  39. n = 17: [e19:en999] = ""
  40. For i = 1 To UBound(Brr)
  41.     For j = 1 To 4
  42.         If Brr(i, j) <> "" Then
  43.             If j <> 4 Then
  44.                 For ii = 0 To UBound(k(j))
  45.                     If Brr(i, j) = k(j)(ii) Then
  46.                         t(j)(ii) = Left(t(j)(ii), Len(t(j)(ii)) - 1)
  47.                         x = Split(t(j)(ii), "*")
  48.                         For jj = 0 To UBound(x)
  49.                         d1(x(jj)) = d1(x(jj)) + 1
  50.                         If d1(x(jj)) = 33 Then GoTo 100
  51.                         Next
  52.                     End If
  53.                 Next
  54.             Else
  55.                 For ii = 1 To UBound(Arr)
  56.                     If InStr(Arr(ii, 11), Brr(i, j)) Then
  57.                         y = Arr(ii, 1) & "|" & Arr(ii, 2) & "|" & Arr(ii, 8) & "|" & Arr(ii, 9) & "|" & Arr(ii, 10)
  58.                         d1(y) = d1(y) + 1
  59.                         If d1(y) = 33 Then GoTo 100
  60.                     End If
  61.                 Next
  62.             End If
  63.         End If
  64.     Next
  65. Next
  66. 100:
  67. k1 = d1.keys
  68. For jj = 0 To UBound(k1)
  69.     y = Split(k1(jj), "|")
  70.     n = n + 1
  71.     Cells(n, 5) = n - 17
  72.     Cells(n, 6).Resize(1, 5) = y
  73. Next
  74. Call ndfx
  75. Call afa
  76. Application.ScreenUpdating = True
  77. CommandButton1.Visible = False
  78. CommandButton2.Visible = True
  79. ActiveSheet.Protect
  80. MsgBox "OK"
  81. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2011-7-29 08:13 | 显示全部楼层
请见附件。

201105-piny Ex4 0729.rar

649.14 KB, 下载次数: 23

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-29 08:58 | 显示全部楼层
以7樓附件測試 新問題如下

1.
C與D無絕對大小關係,故允許C11>D11
(兩者關係是取聯集,即小於C值『或』大於D值)

2.
希望執行「基準分析」VBA後,該活頁所有值皆不得再更改(可選取單元格、可複製單元格,不可刪除內容,不可貼上其他內容,不可輸入其他內容),目前測試仍可以於執行後修正單元格值

3.
希望若B3, B4, B7, B8不是選擇清單有效值,比如在B8輸入「2010年」(原作僅以有效性防呆,可是仍有很多同事會以選擇性貼上值等方法運行,希望代碼於運行時先判讀這四格是不是有效清單值,若不是,就提示警語後離開。

4.
希望若C11~D15之輸入資訊非介於0~1之整數(含),比如在C11輸入「是」(原作僅以有效性防呆,可是仍有很多同事會以選擇性貼上值等方法運行,希望代碼於運行時先判讀這四格是不是0~1之整數(含),若不是,就提示警語後離開。

5.
同理,H2~J11亦希望代碼於運行時判讀是不是有效清單值

謝謝協助 ^^

[ 本帖最后由 piny 于 2011-7-29 09:00 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-29 09:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 piny 于 2011-7-29 08:58 发表
以7樓附件測試 新問題如下

1.
C與D無絕對大小關係,故允許C11>D11
(兩者關係是取聯集,即小於C值『或』大於D值)


後來和同事討論一下,上面這句敍述有誤,修正一下
應修正為
C與D若僅其一輸入(另一個為空白),則僅需判讀該值需介於0與1之間(含),若兩者同時輸入,則C必小於D(仍需判讀兩個值皆需介於0與1之間(含))
不是上述情況,皆需提示警示。

TA的精华主题

TA的得分主题

发表于 2011-7-29 14:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
1、4问题已经满足的了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-7-29 14:30 | 显示全部楼层
執行完「更新產業名」VBA後,此時刪除D11,理應不用提示錯誤(因為只是改了條件,而且也還沒執行「基準分析」VBA)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-1 00:36 , Processed in 0.038205 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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