Board logo

標題: [發問] 有關[自動校正]裡(自動取代字串)的語法? [打印本頁]

作者: united7878    時間: 2010-12-28 03:29     標題: 有關[自動校正]裡(自動取代字串)的語法?

我是語法新手
請教各位先進..如何把EXCEL裡[自動校正]內(自動取代字串)部份變成巨集坎入工作表呢?
讓文件在不同電腦開啟可以辨識相同的取代文字,而不用逐一修改"自動校正選項"
其語法為何?

例如SHEET1表內的B1欄被輸入*77#時會顯示A,輸入*78#時會出現B,以此類推..超過3組格式化條件限制的方法
此工作表在別台電腦開啟時也同樣出現被替代的字

如單一欄位無法實行,修正全SHEET1也無妨

謝謝~
作者: GBKEE    時間: 2010-12-28 08:45

回復 1# united7878
請將程序複製到一般模組存檔後再開啟檔案即可
  1. Sub Auto_Open()
  2.     Application.AutoCorrect.AddReplacement What:="*77#", Replacement:="A"
  3.     Application.AutoCorrect.AddReplacement What:="*78#", Replacement:="B"
  4. End Sub
  5. Sub Auto_Close()    '如要檔案關閉後 繼續使用這些自動取代字串 請將本程序刪掉
  6.     Application.AutoCorrect.DeleteReplacement What:="*77#"
  7.     Application.AutoCorrect.DeleteReplacement What:="*78#"
  8. End Sub
複製代碼

作者: united7878    時間: 2010-12-29 04:49

多謝GBKEE版主!!
套用後果然自動新增取代字串於選項內,且沒有組數限制
將活頁簿開在別台電腦上也可以,真的是太方便了^^
由衷的感謝您!!

冒昧再請教一下..
想要將活頁簿裡指定的工作表(如SHEET1~SHEET10)內的"N3"參照"F2"(F2為日期格式)後因日期不同顯示不同名字時該如何編輯?
如"F2"=2011年1月1日,"N3"=王小明 "F2"=2011年1月2日,"N3"=李小華 以此類推...
"F2"的部份因表格需要,我是手動輸入的,格式為'年+月+日的"2011/1/1",但我希望N3欄在參照時只取月和日,直接乎略年,
請問可行嗎?

THANK YOU~
作者: GBKEE    時間: 2010-12-29 07:45

回復 3# united7878

[attach]4250[/attach]
   
  1. Sub Ex()  '工作表的排序不一定如圖
  2.     Dim Sh As Worksheet
  3.     For Each Sh In Sheets(Array("Sheet1", "sheet2", "sheet3", "sheet4", "sheet5", "sheet6", "sheet7", "sheet8", "sheet9", "sheet10"))
  4.         Sh.Range("N3") = Sh.Range("F2")
  5.         Sh.Range("N3").NumberFormatLocal = "m月d日"
  6.     Next
  7. End Sub
  8. Sub Ex1()  '如工作表的排序一定如從3到13 共10個工作表
  9.     Dim i As Integer
  10.     For i = 3 To 13
  11.         Sheets(i).Range("N3") = Sheets(i).Range("F2")
  12.         Sheets(i).Range("N3").NumberFormatLocal = "m月d日"
  13.     Next
  14. End Sub
複製代碼

作者: united7878    時間: 2010-12-29 09:23

多謝版大~
但我套用後'F2'輸入日期,'N3'直接變成X月X日,人名部份無法顯示?
我想可能是我形容的太複雜了...抱歉~"~

其實是'N3'會隨著'F2'的日期不同而顯示預定輸入的值就好了,
例如
'F2'              'N3'
2011/1/1      王小明
2011/1/2      李小華
2011/1/3      張小美
2011/1/X      X X X

有點像是只要在'日期欄'輸入日期就可以在'N3'欄顯示ID的值班表..
但參照'F2'時只針對月/日,不必管前面年份為何

謝謝!!
作者: Hsieh    時間: 2010-12-29 09:38

本帖最後由 Hsieh 於 2010-12-29 09:49 編輯

回復 5# united7878


    這應該不是自動取代功能
你應該有個對照表
利用chang事件來填寫n3的內容即可
thisworkbook模組
  1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  2. With Sh
  3. If Target.Address = "$F$2" And IsDate(Target) Then
  4. Application.EnableEvents = False
  5. Select Case Format(.[F2], "m/d")
  6. Case "1/1"
  7. x = "王小明"
  8. Case "1/2"
  9. x = "李小華"
  10. Case "1/3"
  11. x = "張小美"
  12. End Select
  13. .[N3] = x
  14. Application.EnableEvents = True
  15. End If
  16. End With
  17. End Sub
複製代碼

作者: united7878    時間: 2010-12-30 05:27

謝謝大大的指導~有了語法果然免去逐一套用函數的步驟,
但在thisworkbook模組下是否會套用到全工作表?如要選定某表可以嗎?
還有如何大量又快速編輯語法內的對照data?
Case "1/1"
x = "王小明"
Case "1/2"
x = "李小華"
Case "1/3"
x = "張小美"

在vba編輯器裡好像無法使用像excel的下拉填滿法..

感恩啦!!
作者: united7878    時間: 2010-12-30 06:25

哈~大量編輯的方法我找到了,把整年度的名字複製貼入某欄例如'G'
然後隨便一欄頭1列輸入Case "1/1"
2列輸入'=G1' ,框起該欄1.2列儲存格一直往下拉就自動填滿了..!
作者: united7878    時間: 2010-12-30 23:17

請問大大~
我已在thisworkbook模組內編輯好所有數值
表中'N3'也會參照'F2'之日期而得到正確的值
但是一但我將工作表保護後,再'F2'輸入日期就會出現偵錯畫面
EXCEL會當掉再重開,沒當掉下解除保護後再輸入日期也無效@@"
想知道是那裡錯了,請大大們不吝指教
謝謝!!
作者: Hsieh    時間: 2010-12-30 23:19

執行
Sub XX()
Application.EnableEvents = True
End Sub
作者: Hsieh    時間: 2010-12-30 23:27

回復 9# united7878
先執行
  1. Sub xx()
  2. Application.EnableEvents = True
  3. End Sub
複製代碼
  1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  2. With Sh
  3. If Target.Address = "$F$2" And IsDate(Target) Then
  4. Sh.Unprotect "0000"
  5. Application.EnableEvents = False
  6. Select Case Format(.[F2], "m/d")
  7. Case "1/1"
  8. x = "王小明"
  9. Case "1/2"
  10. x = "李小華"
  11. Case "1/3"
  12. x = "張小美"
  13. End Select
  14. .[N3] = x
  15. Application.EnableEvents = True
  16. Sh.Protect "0000"
  17. End If
  18. End With
  19. End Sub
複製代碼

作者: united7878    時間: 2010-12-31 00:27

多謝Hsieh 版大的指導
原來少了一道解密還原的程序使得儲存格無法變更
沒腦的我搞半天不得其解
多虧了大大 讓我對VBA有更近一步的認知
謝謝!!




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