Access交流中心

北京 | 上海 | 天津 | 重慶 | 廣州 | 深圳 | 珠海 | 汕頭 | 佛山 | 中山 | 東莞 | 南京 | 蘇州 | 無錫 | 常州 | 南通 | 揚州 | 徐州 | 杭州 | 溫州 | 寧波 | 臺州 | 福州 | 廈門 | 泉州 | 龍巖 | 合肥 | 蕪湖 | 成都 | 遂寧 | 長沙 | 株洲 | 湘潭 | 武漢 | 南昌 | 濟南 | 青島 | 煙臺 | 濰坊 | 淄博 | 濟寧 | 太原 | 鄭州 | 石家莊 | 保定 | 唐山 | 西安 | 大連 | 沈陽 | 長春 | 昆明 | 蘭州 | 哈爾濱 | 佳木斯 | 南寧 | 桂林 | 海口 | 貴陽 | 西寧 | 烏魯木齊 | 包頭 |

回復 加入收藏帖  復制
我要提問 帖子上移

[5分]在窗體模塊中使用自定義函數,由于變量設置問題總報錯

張建國 等級: 普通會員▲ 積分:104 金幣:40 來自:金山Access交流中心 發表于:2018-09-05 21:32:41   已結帖
樓主

各位老師,我想給程序中的編號寫個自定義函數,就象開發平臺中的自定義編號一樣,由于在我的軟件中有多個這樣的編號,且多次使用。函數中要用到 left 和 dmax函數,這兩個參數中都要用到編號這個字段,left函數要的是編號這個字段的值,而Dmax函數用到時表中字段名稱,搞不好,一直報錯,請幫我看看。

自定義函數代碼:

Public Function No_refresh(a As String, b As Integer, c As String, d As Integer) As String '對報告編號、指導書號和原始記錄號賦值
    Dim m, k As String
    Dim j As String
'a:更新的字段名稱
'b:更新字段去除序號部分的位數
'c:更新字段表名稱
'd:更新字段序號部分的位數
  m = Left(a, b)
  j = DMax("[&a&]", c, a Like " & m &  '*'&")
  k = Format(Val(Right(j, d) + 1), "& format(0,d) &")
  No_refresh = m & k
End Function

程序中使用該函數的語句:

Me.報告編號 = No_refresh(報告編號, 9, "MTB", 4)

軟件窗體截圖見附件。窗體截圖,點擊繼續輸入執行自定義函數


 

access培訓  誠聘access開發人員

    張建國
      獲得社區協助:請教問題(即發帖)4篇,其中獲得解決的4篇;
      協助社區成員:協助他人(即回帖)1篇,其中被設為【最佳答案】的0篇;
      協助我們社區:發布技術文章1篇,邀請了1名新會員注冊本社區(如何邀請會員注冊,詳見:http://www.orfdew.live/sitehelp.asp)。
Top

掃描下方工作人員的微信二維碼加微信,邀您加入Access課堂微信群,進入一個技術交際圈:

網站工作人員微信

紅塵如煙 等級:管理員★★★★★ 積分:9150 金幣:8520 來自:成都Access交流中心 發表于2018/9/5 21:59:52 
1樓 得分: 0

參考下面的自動編號函數的寫法:

'Domain 表名/查詢名
'Expr 編號字段名
'Digit 編號位數(數字順序號部分)
'Prefixal 編號前綴,可以是任意字符
Function AutoNumberStr(Domain As String, Expr As String, Digit As Long, Optional Prefixal As String) As String
    AutoNumberStr = Nz(DMax(Expr, Domain, Expr & " Like '" & Prefixal & "*'"))
    AutoNumberStr = Val(Mid(AutoNumberStr, Len(Prefixal) + 1)) + 1
    AutoNumberStr = Prefixal & Format(AutoNumberStr, String(Digit, "0"))
End Function

 

 



    希望我的回答能解決了您的問題,或者所附上的這些信息對您有所幫助!如有任何疑問或需要進一步幫助,請您直接在本站發貼,我們非常樂意幫助您解決問題!
    如果我的回答已經解決了您的問題,請點擊上方的“最佳答案”,這樣本帖子就不會在“待解決問題區”顯示了,以方便大家對那些正在等待解決的帖子給予關注!
    紅塵如煙  [協助社區成員回帖411篇,其中【最佳答案】208篇;發布技術文章213篇。]
    UMVSoft在線支持工程師
    http://www.umvsoft.com
    如果您沒有注冊這個論壇,請單擊下面的鏈接進行注冊,與我在論壇進行交流:
    http://www.orfdew.live/reg/reg.asp?userid=10768
    本貼子以“現狀”提供且沒有任何擔保,同時也沒有授予任何權利。
張建國 等級:普通會員▲ 積分:104 金幣:40 來自:金山Access交流中心 發表于2018/9/5 22:59:08 
2樓 得分: 0

老師,您好,還是出現如下錯誤:

我的自定義函數代碼參考您提供的代碼后,修改如下(前綴也是不同的,不能通過函數變量提供,需要從既有參數中取得):

Public Function NO_Auto(Expr As String, m As Integer, domin As String, n As Integer) As String  '對報告編號、指導書號和原始記錄號賦一個唯一性的值
    Dim Prefixal As String
    'expr:更新的字段名稱
    'm:更新字段去除序號部分的位數
    'domin:更新字段表名稱
    'n:更新字段序號部分的位數
  Prefixal = Left(Expr, m)
  NO_Auto = Nz(DMax(Expr, domin, Expr & " Like'" & Prefixal & "*'"))
  NO_Auto = Val(Right(Expr, n)) + 1
  NO_Auto = Prefixal & Format(NO_Auto, String(n, "0"))
End Function
繼續輸入點擊事件中的自定義函數代碼:

Me.報告編號 = NO_Auto("報告編號", 9, "MTB", 4)對照截圖

    張建國
      獲得社區協助:請教問題(即發帖)4篇,其中獲得解決的4篇;
      協助社區成員:協助他人(即回帖)1篇,其中被設為【最佳答案】的0篇;
      協助我們社區:發布技術文章1篇,邀請了1名新會員注冊本社區(如何邀請會員注冊,詳見:http://www.orfdew.live/sitehelp.asp)。
紅塵如煙 等級:管理員★★★★★ 積分:9150 金幣:8520 來自:成都Access交流中心 發表于2018/9/6 12:04:07 最佳答案
3樓 得分: 5

你就用我發給你的函數就行的。

關鍵在于你調用的有問題。你前綴部分如果不是固定的,要從哪里去取?

把這個問題搞清楚就很容易了。

哪怕前面的日期,你也可以作為前綴的一部分來看待。

比如:

‘自動編號函數
'Domain 表名/查詢名
'Expr 編號字段名
'Digit 編號位數(數字順序號部分)
'Prefixal 編號前綴,可以是任意字符
Function AutoNumberStr(Domain As String, Expr As String, Digit As Long, Optional Prefixal As String) As String
    AutoNumberStr = Nz(DMax(Expr, Domain, Expr & " Like '" & Prefixal & "*'"))
    AutoNumberStr = Val(Mid(AutoNumberStr, Len(Prefixal) + 1)) + 1
    AutoNumberStr = Prefixal & Format(AutoNumberStr, String(Digit, "0"))
End Function


'調用代碼示例:
Me.報告編號 = AutoNumberStr("表1", "報告編號", 4, Left(Me.委托編號, 7) & "MT")



    希望我的回答能解決了您的問題,或者所附上的這些信息對您有所幫助!如有任何疑問或需要進一步幫助,請您直接在本站發貼,我們非常樂意幫助您解決問題!
    如果我的回答已經解決了您的問題,請點擊上方的“最佳答案”,這樣本帖子就不會在“待解決問題區”顯示了,以方便大家對那些正在等待解決的帖子給予關注!
    紅塵如煙  [協助社區成員回帖411篇,其中【最佳答案】208篇;發布技術文章213篇。]
    UMVSoft在線支持工程師
    http://www.umvsoft.com
    如果您沒有注冊這個論壇,請單擊下面的鏈接進行注冊,與我在論壇進行交流:
    http://www.orfdew.live/reg/reg.asp?userid=10768
    本貼子以“現狀”提供且沒有任何擔保,同時也沒有授予任何權利。
張建國 等級:普通會員▲ 積分:104 金幣:40 來自:金山Access交流中心 發表于2018/9/6 15:58:57 
4樓 得分: 0

老師,您好!還是不能通過,自定義函數NO_Auto中的第一個參數expr直接代入的是“報告編號”這四個漢字的字符串,而不是報告編號這個字段名。所以現在點擊繼續輸入后,得到的值是2017042MT0001,這個編號目前已經編到0009號,0001號重復,報錯了。

Public Function NO_Auto(Expr As String, domin As String, n As Integer, Optional prefixal As String) As String '對報告編號、指導書號和原始記錄號賦一個唯一性的值
    'expr:更新的字段名稱
    'm:更新字段去除序號部分的位數
    'domin:更新字段表名稱
    'n:更新字段序號部分的位數
  NO_Auto = Nz(DMax(Expr, domin, Expr & " Like'" & prefixal & "*'"))
  NO_Auto = Val(Right(Expr, n)) + 1
  NO_Auto = prefixal & Format(NO_Auto, String(n, "0"))
End Function



    張建國
      獲得社區協助:請教問題(即發帖)4篇,其中獲得解決的4篇;
      協助社區成員:協助他人(即回帖)1篇,其中被設為【最佳答案】的0篇;
      協助我們社區:發布技術文章1篇,邀請了1名新會員注冊本社區(如何邀請會員注冊,詳見:http://www.orfdew.live/sitehelp.asp)。
紅塵如煙 等級:管理員★★★★★ 積分:9150 金幣:8520 來自:成都Access交流中心 發表于2018/9/6 16:15:10 
5樓 得分: 0

我是讓你用我發的那個函數就行了,你那個函數你也沒改對。

 NO_Auto = Val(Right(Expr, n)) + 1  ‘你寫成這樣是對字段名進行操作了

 NO_Auto = Val(Right(NO_Auto, n)) + 1 '要對取得的值進行處理才對



    希望我的回答能解決了您的問題,或者所附上的這些信息對您有所幫助!如有任何疑問或需要進一步幫助,請您直接在本站發貼,我們非常樂意幫助您解決問題!
    如果我的回答已經解決了您的問題,請點擊上方的“最佳答案”,這樣本帖子就不會在“待解決問題區”顯示了,以方便大家對那些正在等待解決的帖子給予關注!
    紅塵如煙  [協助社區成員回帖411篇,其中【最佳答案】208篇;發布技術文章213篇。]
    UMVSoft在線支持工程師
    http://www.umvsoft.com
    如果您沒有注冊這個論壇,請單擊下面的鏈接進行注冊,與我在論壇進行交流:
    http://www.orfdew.live/reg/reg.asp?userid=10768
    本貼子以“現狀”提供且沒有任何擔保,同時也沒有授予任何權利。
張建國 等級:普通會員▲ 積分:104 金幣:40 來自:金山Access交流中心 發表于2018/9/6 21:54:53 
6樓 得分: 0
解決了,非常感謝紅塵如煙老師!


    張建國
      獲得社區協助:請教問題(即發帖)4篇,其中獲得解決的4篇;
      協助社區成員:協助他人(即回帖)1篇,其中被設為【最佳答案】的0篇;
      協助我們社區:發布技術文章1篇,邀請了1名新會員注冊本社區(如何邀請會員注冊,詳見:http://www.orfdew.live/sitehelp.asp)。
總記錄:6篇  頁次:1/1 9 1 :
您還沒有在Access軟件網登錄不能回復帖子
  • 你沒有登錄,請點擊后面鏈接登錄:登錄
  • 如果你沒有注冊,請點擊后面鏈接注冊:注冊,注冊完成后,請再次訪問本頁功能。
 
河南快3走势图彩经网