簡體   English   中英

Excel VBA UDF自動完成參數

[英]Excel VBA UDF autocomplete parameters

我意識到在本網站,外部論壇和其他討論組上有數千條與UDF工具提示相關的評論和數百個問題。 我是VBA和Excel的新手,但最近學到了很多東西。 隨着那段時間我開始學習,我也看過那些論壇,所以請不要給我發送第三方解決方法的鏈接,如Excel-DNA等。這不是同一個問題。 我不想填充工具提示,我想將UDF參數自動填充到單元格中。


簡而言之,標題說明了一切,有沒有辦法自動將UDF參數填充到字符串中。

我在文檔網站上搜索了與此相關的任何內容,但沒有成功。 因此,下一步是找到一個對用戶來說相對容易的解決方案,對用戶計算機內存非常友好,更不用說開發友好,不花費大量時間,內置跨平台兼容性和簡單定制。

由於我是Excel的新手,我不確定加載項在Workbook對象方面的工作原理。 我可以通過試驗和錯誤找到它,但我在文檔網站上找到的最接近我想要的結果的是通過強制自動更正:

With Application.AutoCorrect
  .AddReplacement "=EPP(", "=EPP(payrate,hrs)"
End With

FIGA

這很快就完成了工作! ........但就是這樣。

這很好用2個原因:

  • 公式/ UDF是唯一啟動的,帶有=符號,因此我不必編寫太多代碼來確定用戶輸入的內容以及其他原因
  • 減少代碼和錯誤的可能性。 特別是關於Win 64bit版本與需要不同語法的32位版本,以及使用API​​時Mac用戶可能的版本

有充分理由,有10個壞的。 我將重點介紹幾個:

  1. 它允許您按Enter鍵,選項卡等轉到下一個單元格,下單元格等。
  2. 光標到達字符串的末尾,這對於自動更正是正常的,但是不希望填寫必需參數。
  3. 我將不得不手動策划一個'AddReplacement'數組
  4. 這在具有嵌套函數的公式中是無用的

通過將其更改為以下內容,我能夠解決其中的一些問題:

With Application.AutoCorrect
  .AddReplacement "=EPP(", "=EPP(<payrate>,<hrs>"
End With

這里發生的是如果用戶按下回車鍵,Excel將自動包含右括號,但是,在這種情況下會出現錯誤, 'Excel認為這是一個公式錯誤:1 + 1 = 2' ,因為Excel認為它不是由於<>符號的公式。 因此,用戶現在100%確定他們需要審核。

Butttttt .....所有的說法和做法,一個巨大的障礙仍然存在,用戶必須按空間來填充。 哎喲。 只要我使用excel,我在選擇一個函數后就沒有按空間,我無法想象這對任何人來說都是自然而然的事情。

所以我嘗試了一些途徑來規避這種行為。 到目前為止沒有任何工作。 我嘗試在Autocorrect對象中使用Application.SendKeys

With Application.AutoCorrect
  .AddReplacement "=EPP(", "=EPP("
  .Application.SendKeys "^+A" 'CTRL + SHIFT + A also tried " " for space
End With

接下來我嘗試使用Application.OnKey事件來處理按Tab鍵時,所以我可以解密它是否在函數/ UDF之后,我不斷收到錯誤,說明宏可能由於某種原因不可用。 我認為現在這很好,考慮到這個選項可能是維護的噩夢(用戶目前在做什么?用戶在哪里?用戶按下用戶窗體控件上的標簽等等)不要認為這是可行的,除非已經內置了我在文檔站點中找不到的內容,否則我很難過。

任何人都有針對核心問題的堅實解決方案? 我現在不關心技術性如設置光標位置等,只是在沒有按空格的情況下發生的基本自動完成。 基本上,我想模仿在單元格中輸入UDF后CTRL + SHIFT + A的作用


更新1

好的,所以在玩了這個之后,我有更多的信息可以幫助分享。

我確實玩過與tab相關的Application.OnKey事件,並得出結論,Microsoft在公式列表中選擇公式選項時有一個特殊的事件處理程序。 如果有人可以幫助我弄清楚如何訪問它,我想我們可以繼續前進。 從建議的公式列表中選擇公式時,我的Debug.Print字符串“Tab被按下”沒有在第一個Tab按下執行。 Application對象不會將其識別為tab按鍵,因為它從該列表中選擇了某些東西,這使我相信它們有自己的事件處理程序。 只是抓住我認為我們會好起來的。

同時,通過在Excel>選項>公式中將Formula Autocomplete設置為false,我找到了一種難以實現的方法,無需按空格鍵。 該列表不會填充,如果用戶只鍵入`= EPP(“它將根據需要填寫其余部分!但這是用戶特定的設置,因此這不適合縮放。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM