[英]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
它將Sheet1
中Table1
的第一列中的任何字符串輸入轉換為上限。 它必須放在Sheet1對象文件中(在Microsoft Excel Object
文件夾內的VBA Project explorer: Sheet1 (Sheet1)
)。 使其適應您的實際情況很簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.