簡體   English   中英

自動文本大寫Excel VBA

[英]Automatic Text Capitalization Excel VBA

我目前正在嘗試根據工作表更改編寫一個宏,其中表列中的字母會自動轉換為大寫。 因此,例如,如果我將“abcde-12345-678”輸入到單元格中,它將自動更正為“ABCDE-12345-678”。 在做了一些挖掘之后,我找到了一些適用於某些人的代碼,但是我在調​​整它以滿足我的需求時遇到了麻煩。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("E:E")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Target = UCase(Target)
    Application.EnableEvents = True
End Sub

我想談兩件事。 第一個是,這個代碼目前不適合我。 我根據作者(位於Sheet1對象中)在正確的位置。 有什么想法為什么這不起作用?

第二個是我想修改代碼以引用表列而不是范圍。 例如,我嘗試將上面代碼的第二行更改為以下內容(我的表名是ReviewTracker,我感興趣的列是產品編號):

If Intersect(Target, Range(ReviewTracker[[@Headers],[Product Number]])) Is Nothing Then Exit Sub

這返回了編譯錯誤“Expected:list separator or)”。 所以它顯然有些不對勁,但希望它可能有助於說明我正在努力實現的目標。

提前感謝您對此問題的任何幫助。

-Sean

第一。 由於很多原因,您可以禁用事件。 讓我們確保您可以按照以下方式執行事件:

轉到VBA編輯器>>打開立即窗口>>在那里寫: Application.EnableEvents = true >>按Enter鍵

第二。 要檢查交集是否匹配ListObject table中的相應列,您需要這樣的內容:

If Intersect(Target, Range("ReviewTracker[Product Number]")) is Nothing Then

假設ReviewTracker是表名, Product Number是表列。 你不需要#Headers因為它只會引用標題行。

UCase作用是將給定字符串中的所有字符轉換為大寫字母,因此您可以將其應用於任何Range.Value。 每次單元格的值發生變化時都會調用Worksheet_Change ,因此是放置代碼的好地方。 但是你用來引用表的方式是錯誤的。 您發布的代碼符合您的要求:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Sheet1.ListObjects("Table1").ListColumns(1).Range) Is Nothing Then Exit Sub
    Target.Value = UCase(Target.Value)
End Sub

它將Sheet1Table1的第一列中的任何字符串輸入轉換為上限。 它必須放在Sheet1對象文件中(在Microsoft Excel Object文件夾內的VBA Project explorer: Sheet1 (Sheet1) )。 使其適應您的實際情況很簡單。

暫無
暫無

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

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