久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【20180309】- Excel VBA智能提示,,實現(xiàn)快速輸入

 L羅樂 2018-03-09


        剛剛過去的女神節(jié)女王節(jié),各位女王讀者是否紅包收到手軟,,買東西買到手軟,?在享受購買的同時,也不要忘記投資自己,,不斷學習提高哦,。



        今天為大家?guī)淼氖?strong>Excel智能提示,那智能提示有啥用呢,?可以避免輸入錯誤,,實現(xiàn)快速數(shù)據(jù)錄入。最終的效果如下動態(tài)圖演示:



        看了上面的效果展示,,可以看到【錄入表】中的姓名列點擊的時候可以出現(xiàn)下拉框選擇,,可以實現(xiàn)快速鼠標點選或直接Enter回車確定錄入。如果覺得下拉框內容太多,,可以輸入【信息表】中的拼音首字母或姓名的某個字,。那信息表長什么樣呢,?如下圖所示:



        正如上圖中青色方塊中的說明,拼音列中的拼音是使用HzToPy函數(shù)根據(jù)姓名生成的,。其中B2單元格的公式為:=UPPER(HzToPy(A2,'',0,1,1)),,這里用到了自定義函數(shù)HzToPy。該類模塊來源于互聯(lián)網(wǎng),,詳細的使用方法請參考【HzToPy】工作表,。



        上面介紹的智能錄入,我在好幾個Excel財務軟件中看到類似的實現(xiàn),,對于會計憑證等的錄入是很方便的,。智能提示的代碼主要集中在【錄入表】和模塊【智能提示】中。



        代碼很長,,我會在文章的最后貼上核心代碼,。其實代碼的核心就是如何實現(xiàn)Textbox和Listbox的隱藏和內容。Textbox和Listbox的內容又是通過先前為大家介紹的Excel Sql實現(xiàn),,可以移步【VBA技巧】- 從Excel文件或Access數(shù)據(jù)庫中獲取指定列數(shù)據(jù)進行學習,。主要用到的語句類似arr = SqlToArr('select 姓名 from [信息表$] where 姓名 like '%' & s & '%''),其實也就是select配合like實現(xiàn)模糊查詢,。



        上面的代碼稍作了修改,,如果各位小伙伴需要用到自己的實際工作中,只需要修改select查詢部分即可,,是不是很Easy呢,?

        可能有小伙伴就要問了,那代碼是如何決定智能提示的區(qū)域的呢,?這個問題很好,,其實代碼有一個全局常量RangeAddress就是智能提示的作用范圍,可以根據(jù)需要進行修改,,如下圖紅色框中所示,。




核心代碼

Dim txt$ '檢測文本框變化

Const RangeAddress = 'B5:B30' '作用范圍,自己修改


'一般來說只需要整理好成品基礎資料列表,然后修改RangeAddress區(qū)域范圍即可

Private Sub Worksheet_SelectionChange(ByVal Target As Range) '選擇改變時改變菜單位置

    Select Case userinput

    Case False '列表輸入狀態(tài)

        Call 適配(Target, RangeAddress) '第二參數(shù)為使用自動提示的單元格區(qū)域范圍

    Case Else

        '普通輸入狀態(tài) 可復制粘貼,也可自己添加其他輸入狀態(tài)

    End Select

    

End Sub


'根據(jù)列表得到匹配項目,該過程可自己修改為其他規(guī)則

Private Sub 智能匹配()

    Dim s, selectFlag

    s = UCase(TextBox1.Text) '輸入的姓名或拼音

    ListBox1.Clear: selectFlag = True

    If s = '' Or s = ' ' Then

        arr = SqlToArr('select 姓名 from [信息表$] where 姓名<>'''): selectFlag = False

    Else

        '先查拼音是否存在 再查姓名,都不存在則返回全部

        arr = SqlToArr('select 姓名 from [信息表$] where 拼音 like '%' & s & '%'')

        '--下面一句的全列表查詢加不為空的條件

        If TypeName(arr) = 'Empty' Then '拼音查不到查姓名

            arr = SqlToArr('select 姓名 from [信息表$] where 姓名 like '%' & s & '%'')

        End If

    End If

    

    If TypeName(arr) = 'Empty' Then Exit Sub

    ListBox1.List = arr

    If selectFlag Then ListBox1.ListIndex = 0

    'If ListBox1.ListCount = 1 Then TextBox1.Text = ListBox1.List(0, 0)

End Sub


Private Sub 輸入()

    If ListBox1.ListIndex = -1 Then '當前輸入項無匹配項直接輸入

        ActiveCell = TextBox1.Text

    Else '輸入當前匹配項

        ActiveCell = ListBox1.Value

    End If

    ActiveCell.Offset(1, 0).Select '完成輸入后跳轉到下一個單元格

End Sub


Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    txt = TextBox1 '按鍵之前輸入框文字

End Sub


Private Sub TextBox1_Change() '根據(jù)已輸入內容查找編碼列表

    Call 智能匹配

End Sub


Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

    Call 輸入

End Sub


'--判斷按鍵,以完成回車輸入,上下方向鍵選擇功能,以及ctr e切換輸入狀態(tài)

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    Dim i As Integer

    Select Case KeyCode

    Case vbKeyE 'ctr e切換輸入狀態(tài)

        If Shift = 2 Then Call 輸入狀態(tài)切換

    Case vbKeyDown

        i = ListBox1.ListIndex 1

        If i < ListBox1.ListCount Then ListBox1.ListIndex = i Else ListBox1.ListIndex = 0

    Case vbKeyUp

        i = ListBox1.ListIndex - 1

        If i > -1 Then ListBox1.ListIndex = i Else ListBox1.ListIndex = ListBox1.ListCount - 1

    Case vbKeyReturn

        If txt = TextBox1 Then Call 輸入 '處理中文輸入法回車輸入英文,不處理會觸發(fā)回車直接輸入英文

    Case Else

        Call 智能匹配

    End Select

    'TextBox1 = ListBox1.Value

End Sub


'調整控件位置和大小以適配當前輸入單元格,需要其他顯示格式在此處修改

Public Sub 適配(Target As Range, rng$)

    Me.ListBox1.Visible = False

    Me.TextBox1.Visible = False

    If Target.Count = 1 Then

        If 適配范圍(Target, rng) Then    '輸入提示目標單元格作用范圍

            Me.ListBox1.Clear

            Me.TextBox1.Text = ActiveCell.Value    '將活動單元值賦給文本框

            With Me.TextBox1

                .Top = Target.Top

                .Left = Target.Left

                .Width = Target.Width

                .Height = Target.Height 2

                .Font.Size = Target.Font.Size - 1

                .Activate

                .Visible = True

            End With

            With Me.ListBox1

                .Top = Target.Top Target.Height

                .Left = Target.Left

                .Width = Target.Width

                .Font.Size = Target.Font.Size

                .Height = Target.Height * 10

                .Visible = True

            End With

            Call 智能匹配

        Else

            Me.ListBox1.Clear

            Me.TextBox1 = ''

            Me.ListBox1.Visible = False

            Me.TextBox1.Visible = False

        End If

    End If

End Sub


Private Function 適配范圍(Target As Range, rng$)

    '對taget和限制區(qū)域求交集,無交集則返回false

    '也可以在這里設置其他類型范圍限制

    適配范圍 = True

    If Intersect(Target, Range(rng)) Is Nothing Then 適配范圍 = False

End Function


        好了,今天的介紹就到這里了,,素材的原稿,,我會放到QQ群文件中,大家如果在使用智能提示過程中遇到任何問題,,歡迎留言或加入QQ群(群號:615356012)交流學習哦^_^


SUT事務所 - 節(jié)約您的時間,! 

Steven

90后小鮮肉

技術咖 效率控

金融機構 資深技術

探索新鮮事物 體驗社會萬象

站在不同群體看世界

QQ群:615356012

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多