Board logo

標題: [發問] (謝謝多位版主的大力幫忙,完成)如何將定義延伸成可以手動修改?(自訂表單) [打印本頁]

作者: av8d    時間: 2012-6-22 11:28     標題: (謝謝多位版主的大力幫忙,完成)如何將定義延伸成可以手動修改?(自訂表單)

本帖最後由 av8d 於 2012-6-23 16:35 編輯

Sub test()
    Dim rng As Range, cell As Range
    Application.ScreenUpdating = False
    w = "家用,早餐,午餐,晚餐"
End Sub



我執行都是用Call test

希望可以w的的限制可以不要寫死~可以新增刪除修改~

我該怎麼做呢? 我是否要再製作一個UserForm呢?
作者: oobird    時間: 2012-6-22 12:57

w = InputBox("輸入字串,用豆號分開:")
    If w = "" Then End
作者: av8d    時間: 2012-6-22 23:35

本帖最後由 av8d 於 2012-6-22 23:50 編輯
w = InputBox("輸入字串,用豆號分開:")
    If w = "" Then End
oobird 發表於 2012-6-22 12:57



  w是否的值是否能固定?
每當需要新增刪除修改的時候在讀取功能鍵
作者: Hsieh    時間: 2012-6-22 23:58

回復 3# av8d


    這應該是公用變數設置的技巧就能解決
你是在此主程式中要引用w變數
在一般模組宣告公共變數w
  1. Public w$
複製代碼
開啟檔案時先將w給值
  1. Sub auto_open()
  2. w = "家用,早餐,午餐,晚餐"
  3. End Sub
複製代碼
執行修改程序
  1. Sub 修改()
  2. w = InputBox("輸入逗點分隔字串", , w)
  3. End Sub
複製代碼
主程式
  1. Sub test()
  2. MsgBox w
  3. End Sub
複製代碼
[attach]11460[/attach]
作者: av8d    時間: 2012-6-23 00:20

本帖最後由 av8d 於 2012-6-23 00:25 編輯

回復 4# Hsieh


    謝謝大大~這方法很好用~可是

起始資料-->家用,早餐,午餐,晚餐
修改後-->家用,早餐,午餐,晚餐,特別費
關閉Excel
開啟Excel
資料變成起始資料-->家用,早餐,午餐,晚餐
而不是修改後的資料-->家用,早餐,午餐,晚餐,特別費

不知道這是什麼原因?
是不是因為只要是記憶的部分都必須在儲存格上才能儲存?如 A1  B1  C1 等等
作者: GBKEE    時間: 2012-6-23 08:37

本帖最後由 GBKEE 於 2012-6-23 08:47 編輯

回復 5# av8d
關閉Excel 變數就歸0了,可用定義名稱保留住
  1. Option Explicit
  2. Sub Auto_Open()
  3. Dim Msg As Boolean, n As Name
  4. With ThisWorkbook
  5.     For Each n In .Names
  6.         If n.Name = "w" Then Msg = True: Exit For
  7.     Next
  8.     If Msg = False Then .Names.Add "w", "家用,早餐,午餐,晚餐"
  9. End With
  10. End Sub
  11. Sub 修改()
  12.     Dim A As String
  13.     A = InputBox("輸入逗點分隔字串", , [w])   
  14.     If A <> "" Then ThisWorkbook.Names("w").Value = A   '可預防   取消InputBox 或是  = ""  
  15.     MsgBox [w]   '定義名稱內容
  16. End Sub
複製代碼

作者: av8d    時間: 2012-6-23 13:33

本帖最後由 av8d 於 2012-6-25 08:43 編輯

回復 6# GBKEE


    大大謝謝,請問我該如何和我的程式碼做結合呢
Sub test()
    Dim rng As Range, cell As Range
    Application.ScreenUpdating = False
    w = "家用,早餐,午餐,晚餐"
End Sub

由於   w = "家用,早餐,午餐,晚餐"  下方還有很多程式碼
作者: GBKEE    時間: 2012-6-23 15:15

回復 7# av8d
  1. Option Explicit
  2. 'Public xlTheW  As String   'Public 所有模組皆可用的變數
  3. Private xlTheW As String    'Private 或 Dim    只有這模組可以用的變數
  4. Sub Auto_Open()   '此程序用意在如沒有定義名稱 新增定義名稱
  5.     Dim Msg As Boolean, n As Name
  6.     'Boolean 資料型態   預設為 False
  7.     'Boolean 變數係以 16 位元( 2 個位元組)數字的形式儲存,但只能是 True 或是 False。Boolean 變數的值不是 True 就是 False ( 在使用 Print 的時候 ),或是 #TRUE# 和 #FALSE# ( 在使用 Write # 的時候 )。使用關鍵字 True 與 False 可將 Boolean 變數指定為這兩個狀態中的一個。
  8.     '當轉換其他的數值型態為 Boolean 時,0 會轉成 False,而所有其他的值則變成 True。當轉換 Boolean 值為其他的資料型態,時,False 成為 0 ,而 True 成為 -1。
  9.     With ThisWorkbook                                   ' With  這活頁簿
  10.         For Each n In .Names                            '.Names : 這活頁簿的定義名稱集合
  11.             If n.Name = "w" Then Msg = True: Exit For    '找到w : Msg = True
  12.         Next
  13.         If Msg = False Then .Names.Add "w", "家用,早餐,午餐,晚餐"
  14.         '沒找到w : Msg = False   ;'.Names.Add : 活頁簿中新增定義名稱
  15.     End With
  16. End Sub
  17. Sub 修改()   '這程序 用於你的修改
  18.     Dim A As String
  19.     A = InputBox("輸入逗點分隔字串", , [W])
  20.     If A <> "" Then ThisWorkbook.Names("w").Value = A   '可預防   取消InputBox 或是  = ""
  21. End Sub
  22. Sub test()    '你要於程式中取得名稱的值
  23.     Dim A
  24.     xlTheW = [W]                                        '將名稱的值傳給 xlTheW
  25.    ' xlTheW = Evaluate(ThisWorkbook.Names("W").Value)    '將名稱的值傳給 xlTheW
  26.     MsgBox xlTheW
  27. End Sub
複製代碼

作者: Hsieh    時間: 2012-6-23 15:30

回復 7# av8d
這個問題已經回答到這程度,你應該要去了解變數是如何運作的
既然已經用到定義名稱來儲存字串
那麼,w變數就是該定義名稱的內容
之後在整個活頁簿內要調用這個字串
只要呼叫該名稱即可
  1. Sub auto_open() '開啟檔案時觸發此程序
  2. Dim n As Name
  3. For Each n In ThisWorkbook.Names '檢查活頁簿內的名稱
  4.    If n.Name = "逗點分隔字串" Then Exit Sub '如果此名稱存在就離開程序
  5. Next
  6. ThisWorkbook.Names.Add "逗點分隔字串", "家用,早餐,午餐,晚餐", 0 '加入隱藏的名稱
  7. End Sub

  8. Sub 主程序()
  9. w = [逗點分隔字串] '取出名稱內容賦給變數
  10. MsgBox w
  11. End Sub
  12. Sub 修改()
  13. Dim mystr$
  14. mystr = InputBox("輸入逗點分隔字串", , [逗點分隔字串]) '輸入新字串
  15. If mystr = "" Then MsgBox "字串不得為空白": Exit Sub '避開空字串取代原定義內容
  16. Names("逗點分隔字串").Value = mystr '將新字串寫入名稱
  17. End Sub
複製代碼





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