標題:
[發問]
請問 vba 自製函數 如何列出來
[打印本頁]
作者:
cr123a
時間:
2012-2-12 00:01
標題:
請問 vba 自製函數 如何列出來
請問大家
vba 自製函數太多記不住
有沒有辦法 把自製的函數名稱 全部列出到一個檔案????
謝謝
作者:
Hsieh
時間:
2012-2-12 00:49
回復
1#
cr123a
沒必要這麼麻煩吧!
[attach]9548[/attach]
作者:
cr123a
時間:
2012-2-12 09:15
回復
2#
Hsieh
謝謝您
但是 很多自製函數 日子久了就忘了怎麼用 用法如何??
我是想 把函數名匯出到一個檔案 再打上用法 再印出
以使日後 查尋使用上方便
作者:
Hsieh
時間:
2012-2-12 12:40
回復
3#
cr123a
基本上在撰寫自訂函數同時,就把函數使用說明寫在程式碼中比較合適
可能你要保密你的程式碼,那麼,只需在開啟此檔案時,於插入函數對話框中加入這些字串即可
舉例來說自訂函數都集中在Module1
如圖
[attach]9549[/attach]
以上圖中的樣式加入說明文字
在Thisworkbook模組內輸入
Private Sub Workbook_Open()
Dim cMdl As Object, Ay$, Ay1$, MyName
Set cMdl = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule '函數所在位置
i = cMdl.CountOfLines
ar = Split(cMdl.Lines(1, i), Chr(10))
For i = 0 To UBound(ar)
If ar(i) <> "" And ar(i) Like "Function *" Then
n = InStr(ar(i), " ")
k = InStr(Split(ar(i), " ")(1), "(")
MyStr = Mid(ar(i), n + 1, k - 1)
If Ay = "" Then
Ay = MyStr
Else
Ay = Ay & Chr(10) & MyStr
End If
End If
If ar(i) <> "" And InStr(ar(i), "說明") > 0 Then
If Ay1 = "" Then
Ay1 = Replace(ar(i), "'", "")
Else
Ay1 = Ay1 & Chr(10) & Replace(ar(i), "'", "")
End If
End If
Next
MyName = Split(Ay, Chr(10))
MyStr = Split(Ay1, Chr(10))
For i = 0 To UBound(MyName)
Application.MacroOptions macro:=MyName(i), Category:=10, Description:=MyStr(i)
Next
End Sub
複製代碼
於插入函數時即可出現說明文字(如下圖)
[attach]9550[/attach]
作者:
cr123a
時間:
2012-2-12 20:29
回復
4#
Hsieh
不是為了保密
而是一開始犯了一個致命的錯------一開始使用自製新函數 很熟 也認為沒必要加註明
但久而久之 量大時 很多函數不再常用 就開始遺忘 再加上電腦常出問題的情況下
就忘了之前的設定 ....................
真是謝謝您 您至少給了我 一個好方向
但我還是沒試出來 [attach]9554[/attach]
作者:
Hsieh
時間:
2012-2-12 22:10
本帖最後由 Hsieh 於 2012-2-12 22:14 編輯
回復
5#
cr123a
你是儲存成增益集,那麼必須使用物件類別模組,讓開檔動作能加入說明
物件類別模組
Public WithEvents App As Application
Private Sub App_NewWorkbook(ByVal Wb As Workbook)
Get_Macro
End Sub
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
Get_Macro
End Sub
複製代碼
[attach]9556[/attach]
一般模組
Public xlApp As New Class1 '宣告 xlApp 為上面自訂的物件模組
Sub Auto_Open() 'Auto_Open會在此檔開啟時自動執行
Set xlApp.App = Application
'把自訂模組的 App 設為(也可說連結到)Application物件
End Sub
Sub Get_Macro()
Dim cMdl As Object, Ay$, Ay1$, MyName, i&, k%
Set cMdl = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule '函數所在位置
i = cMdl.CountOfLines
ar = Split(cMdl.Lines(1, i), Chr(10))
For i = 0 To UBound(ar)
If ar(i) <> "" And ar(i) Like "Function *" Then
n = InStr(ar(i), " ")
k = InStr(Split(ar(i), " ")(1), "(")
MyStr = Mid(ar(i), n + 1, k - 1)
If Ay = "" Then
Ay = MyStr
Else
Ay = Ay & Chr(10) & MyStr
End If
End If
If ar(i) <> "" And InStr(ar(i), "說明") > 0 Then
If Ay1 = "" Then
Ay1 = Replace(ar(i), "'", "")
Else
Ay1 = Ay1 & Chr(10) & Replace(ar(i), "'", "")
End If
End If
Next
MyName = Split(Ay, Chr(10))
MyStr = Split(Ay1, Chr(10))
For i = 0 To UBound(MyName)
Application.MacroOptions macro:=MyName(i), Category:=10, Description:=MyStr(i)
Next
End Sub
'以下為你原本自訂函數程式
Function pkaJPreMath(A)
'說明:pka20120211 每一字串加上符號
pkaJPreMath = "$ " & A & " $ "
End Function
Function pkaJPreAddBam03(intA, IntB, A)
'說明:pka20120211 每一字串加上 括號 大 中 小
If intA = 0 Then '不加判別直接加
If IntB = 1 Then
pkaJPreAddBam03 = "( " & A & " ) "
ElseIf IntB = 2 Then
pkaJPreAddBam03 = "[ " & A & " ] "
ElseIf IntB = 3 Then
pkaJPreAddBam03 = "{ " & A & " } "
End If
ElseIf intA = 1 Then 'A為負值才加括號
If IntB = 1 And Mid(A, 1, 1) = "-" Then
pkaJPreAddBam03 = "( " & A & " ) "
ElseIf IntB = 2 And Mid(A, 1, 1) = "-" Then
pkaJPreAddBam03 = "[ " & A & " ] "
ElseIf IntB = 3 And Mid(A, 1, 1) = "-" Then
pkaJPreAddBam03 = "{ " & A & " } "
Else
pkaJPreAddBam03 = A
End If
End If
End Function
複製代碼
[attach]9557[/attach]
載入此增益集後,開新檔案或開啟舊檔後函數類別會多出一個"命令"類別
此處的函數就有說明了
[attach]9558[/attach]
作者:
cr123a
時間:
2012-2-13 01:05
回復
6#
Hsieh
神神神 厲害!謝謝您了
試了好久 終於試出來了(資質愚鈍)
對大大好像很容易 但終於試出來了!
對於上面的程式碼 我是一無所知
需不需要去學習它??
還是遇到問題再尋問呢?
作者:
Hsieh
時間:
2012-2-13 08:22
回復
7#
cr123a
討論區不是求檔區
對於回復的內容應該盡力去理解
轉化成自己的知識
若每次只是想得到解答就好
那就不叫討論了
作者:
cr123a
時間:
2012-2-13 10:32
我了解了
謝謝您的建言
我當竭力去理解!
謝謝!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)