Board logo

標題: 自訂巨集的按鈕是否可以快速從A電腦轉換至B電腦 [打印本頁]

作者: jntseng    時間: 2010-12-14 23:13     標題: 自訂巨集的按鈕是否可以快速從A電腦轉換至B電腦

問題: 在A電腦寫了一些巨集,且已設定了工具列的按鈕,想將A 設定好的巨集可以直接拿至B電腦用嗎? 若可以要如何用呢? 詳細如圖檔所示
作者: mistery    時間: 2010-12-15 09:16

本帖最後由 mistery 於 2010-12-15 09:27 編輯

到 VBE 將模組匯出即可

[attach]4098[/attach]
[attach]4099[/attach]
作者: GBKEE    時間: 2010-12-15 16:29

回復 1# jntseng
將下列的程式碼複製到一般模組內(Module)存檔後到任一PC都可用.(版本要相容的)
請修改 Private Sub Test() 為你設定好的巨集
  1. Option Explicit
  2. Sub Auto_Open()
  3.     On Error Resume Next
  4.     Application.CommandBars("MyBar").Delete
  5.     With CommandBars.Add("MyBar", , , True)
  6.         With .Controls.Add(1)
  7.             .Caption = "自訂指令A"
  8.                 .FaceId = 263
  9.                 .Style = 3
  10.                 .OnAction = "TEST"  '指定設定好的巨集名稱
  11.         End With
  12.         With .Controls.Add(1)
  13.             .Caption = "自訂指令B"
  14.                 .FaceId = 331
  15.                 .Style = 3
  16.                 .OnAction = "TEST"   '指定設定好的巨集名稱
  17.         End With
  18.         .Visible = True
  19.     End With
  20. End Sub
  21. Private Sub Test()  '設定好的巨集名稱
  22.     Dim S$
  23.     Select Case Val(Application.Version)
  24.         Case 12
  25.             S = "Excel 2007"
  26.         Case 11
  27.             S = "Excel 2003"
  28.         Case 10
  29.             S = "Excel 2002"
  30.         Case 9
  31.             S = "Excel 2000"
  32.         Case 8
  33.             S = "Excel 97"
  34.         Case 7
  35.             S = "Excel 95"
  36.         Case 5
  37.             S = "Excel 5.0"
  38.     End Select
  39.     With Application.CommandBars.ActionControl
  40.         MsgBox "電腦名稱  = " & Environ("ComputerName") & vbLf & _
  41.         "使用者姓名 = " & Environ("UserName") & vbLf & _
  42.         "Excel 版本   = " & S, , .Caption
  43.         If .Caption = "自訂指令A" Then
  44.             .FaceId = IIf(.FaceId = 263, 66, 263)
  45.         ElseIf .Caption = "自訂指令B" Then
  46.             .FaceId = IIf(.FaceId = 343, 331, 343)
  47.         End If
  48.     End With
  49. End Sub
複製代碼

作者: mistery    時間: 2010-12-15 19:26

回復 3# GBKEE


    想請教 GBKEE 版主...
    1.您寫的那段VBA程式碼與手動匯出再匯入的結果會是一樣嗎?
    2.是否會將所有自訂的VBA一次自動轉入到新PC?
    3.會包含當初自訂VBA用的按鈕圖案嗎?

     先感謝版主...... (上述的功能我還滿需要的  當然....最大的動機...還是想學習)
作者: GBKEE    時間: 2010-12-15 20:00

回復 4# mistery
1.匯入模組的後還要 存檔後再開檔 或 執行巨集或 手動 才會達到樓主的效果
2.不是自動轉入到新PC,   是隨者檔案跑.
3.會包含當初自訂VBA用的按鈕圖案嗎? . 輸入自定 FaceId No .就行了
紅色數字是按鈕圖案的代號
程式碼  -> FaceId = 263
作者: mistery    時間: 2010-12-15 21:59

我本來以為 jntseng 問的是 ...非針對一特定已存在的檔案
而是一臨時不特定的檔案   巨集可以直接手動執行 (不然應該就不會設自訂按鈕了)
(如果是特定檔案  巨集錄製時就會選擇存在"現用活頁簿"中)

感謝 GBKEE版主的說明...(要花時間來好好研究一下版主的程式)
作者: jntseng    時間: 2010-12-18 10:07

回復 3# GBKEE
Dear GBKEE :

                  謝謝你提供的程式,測試結果可行,但有以下幾各問題請教:
[1] 我直接使用前半段的程式碼即可以執行我想要的結果,(前半段的程式碼如第1圖所示),所以後面 Private Sub Test()  目的為何呢?,沒有此程式碼在什麼條件下會有問題呢?(後段程式碼如第2圖片所示)
[2] faceid 數字的範圍是多少呢? 我要如何知道我有哪些數字可以選擇呢?
[3]第3圖片紅色框框的地方不懂  ,iff(a,b,c)語法不是 當符合a條件時,會顯示b,若不符合a時,會顯示c  嗎? 所以
     .faceid=iff(.faceid=263,66,263 ) 選擇是什麼呢? 是第1個263 ? 還是66? 或者是第2個 263?
作者: GBKEE    時間: 2010-12-18 10:53

本帖最後由 GBKEE 於 2010-12-18 10:56 編輯

回復 7# jntseng
    With CommandBars.Add("MyBar", , , True)  '這是新增加一個工具列   
        With .Controls.Add(1)                         '新增加一個工具列-> 新增指令按鈕
               .Caption = "自訂指令A"               '按鈕名稱
                .FaceId = 263                             '按鈕標題
                .Style = 3                                   '按鈕形式
                你所問的->   "在A電腦寫了一些巨集,且已設定了工具列的按鈕,想將A 設定好的巨集  可以直接拿至B電腦用嗎"
                                   "TEST是示範給你看的 " 修改TEST為你在A電腦寫了一些巨集名稱 "
                                   "存檔後 可以直接拿到其他的電腦用
                .OnAction = "TEST"                     '按下按鈕後所執行的的巨集名稱
              End With
        End With
        .Visible = True
    End With
End Sub
Private Sub Test()  '按下按鈕後所執行的的巨集   
    Dim S$
     '
     '
    With Application.CommandBars.ActionControl    ' 使用中的控制項(按鈕)
        MsgBox "電腦名稱  = " & Environ("ComputerName") & vbLf & _
        "使用者姓名 = " & Environ("UserName") & vbLf & _
        "Excel 版本   = " & S, , .Caption
        If .Caption = "自訂指令A" Then
            .FaceId = IIf(.FaceId = 263, 66, 263)
          '  .FaceId 為控制項(按鈕)按鈕圖示的 ID 數值-> IIf ( 使用中的控制項(按鈕)  當ID=263,傳回66 ,不為263傳回263)
        ElseIf .Caption = "自訂指令B" Then
            .FaceId = IIf(.FaceId = 343, 331, 343)
        End If
    End With
End Sub
FaceId的ID 數值 請看附檔是網路抓下來的
[attach]4137[/attach]




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