Board logo

標題: [發問] abc-8888 自動轉化 ABC-888... [打印本頁]

作者: cypd    時間: 2020-6-3 23:27     標題: abc-8888 自動轉化 ABC-888...

同一儲存格輸入車牌 abc-8888 希望能自動轉化 ABC-8888 之格式
例如在 E3儲存格輸入abc-8888 希望能自動轉化 ABC-8888
             E4儲存格輸入2050-sa   希望能自動轉化 2050-SA
我只想在 E3:E1002 儲存格內自動轉換大寫英文...
望請各位高手解惑
作者: Baracuda    時間: 2020-6-4 09:34

用公式 UPPER可以達成。
作者: Baracuda    時間: 2020-6-4 09:37

如果要完全自動。
參考你另一帖
身分證代碼
http://forum.twbts.com/thread-16089-1-1.html
作者: ikboy    時間: 2020-6-4 11:55

詳看附件:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Application.Intersect([E3:E1002], Target) Is Nothing Then Exit Sub
  3. Application.EnableEvents = 0
  4. Target.Value = UCase(Target.Value)
  5. Application.EnableEvents = 1
  6. End Sub
複製代碼

作者: 准提部林    時間: 2020-6-4 12:59

以前問過一模一樣的需求, 只是身份證號換成車號,
又要問一次, 這又怎麼學得到東西呢???
作者: cypd    時間: 2020-6-4 15:39

感謝先進的指導
作者: cypd    時間: 2020-6-9 00:51

回復 4# ikboy
感謝先進指導
針對上述公式程式碼...
以圖為例 若 E3 輸入abc-8558

依公式程式碼 會進行英文小寫轉換大寫
若是想要用複製其他工作表之車牌號碼(k3:k20)
至 E3:E20 儲存格...
該程式碼無法一次自動轉換至大寫英文
需該如何重新編寫程式碼?
作者: 准提部林    時間: 2020-6-9 11:10

本帖最後由 准提部林 於 2020-6-9 11:11 編輯

回復 7# cypd

以下藍色字都要copy到


Dim CK%

Private Sub Worksheet_Change(ByVal Target As Range)
Dim xR As Range
With Target
     If .Columns.Count > 1 Or .Column <> 5 Then Exit Sub
     If CK > 0 Then Exit Sub
     On Error GoTo 999
     CK = 1
     For Each xR In .Cells
         If xR.Row < 3 Or xR.Value = "" Then GoTo 101
         xR.Value = UCase(xR.Value)
101: Next
End With
999: CK = 0
End Sub

作者: cypd    時間: 2020-6-9 13:40

回復 8# 准提部林
好神奇的語法...感恩
不明白儲存格用
1.輸入的方式
及用 2.複製貼上之方式
兩者間之英文小寫轉換大寫,差異大不同?
懇問程式碼中內的數字各代表甚麼意思?
If xR.Row < 3 Or xR.Value = "" Then GoTo 101
         xR.Value = UCase(xR.Value)
101: Next
End With
999: CK = 0
作者: 准提部林    時間: 2020-6-9 15:47

回復 9# cypd


不是一言兩語可說清,
先逐行去理解吧!
若連.row, .value, .column, .columns都不懂, 解釋了也沒用~~

試著將每行了解一下, 並做註解

CK 用來替代 Application.EnableEvents
避免"反覆觸動", 造成當機~~

ON ERROR GOTO 999
若程式執行錯誤中斷, 會直接去執行 999:CK=0
否則下次就不能產生CHANGE事件~~
作者: cypd    時間: 2020-6-9 22:20

回復 10# 准提部林
感謝版主指導...
積極進取學習中   ^^
作者: Andy2483    時間: 2023-5-24 11:59

回復 8# 准提部林


    謝謝前輩
後學藉此帖學習到重要技巧,學習心得註解如下,請前輩再指導

Option Explicit
Dim CK%
'↑宣告變數:CK是短整數變數,放在最上端是為了讓此工作表模組都能用

Private Sub Worksheet_Change(ByVal Target As Range)
'↑當使用者或外部連結變更工作表中的儲存格時會發生此事件
Dim xR As Range
'↑宣告變數:xR是儲存格變數
With Target
'↑以下是關於觸發的程序
     If .Columns.Count > 1 Or .Column <> 5 Then Exit Sub
     '↑如果觸發欄數大於1 或觸發欄位不是第5欄!就結束程式執行
     If CK > 0 Then Exit Sub
     '↑如果CK變數大於 0!就結束程式執行
     On Error GoTo 999
     '↑如果以下程式遇到錯誤就跳到標示999位置繼續執行
     CK = 1
     '↑令CK變數是1,讓後方For Each迴圈不會在觸發
     For Each xR In .Cells
     '↑設逐項迴圈!令xR變數是觸發格低其中一格
         If xR.Row < 3 Or xR.Value = "" Then GoTo 101
         '↑如果xR變數所在的列號小於3 或其值是空的,
         '就跳到標示101位置繼續執行

         xR.Value = UCase(xR.Value)
         '↑令xR變數(儲存格)值是英文轉為大寫的新字串
101: Next
End With
999: CK = 0
'↑令CK變數歸零
End Sub
作者: cypd    時間: 2023-5-25 01:31

回復 12# Andy2483

感謝 Andy2483 另一詳細解說
能好好研讀...^^




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)