Excel/VBAでは、MacroOptions関数を使用して、マクロまたは関数に関連する情報を定義することができます。 VBA経由で入力した情報にアクセスすることは可能ですか?ありがとうございましたMacroOptionsの表示
3
A
答えて
1
私はしばらく検索してきましたが、何も素晴らしいものは見つかりませんでした。
私が見つけた唯一の回避策は、チップピアソンによって構築されたコードを使用して、his websiteに記載されています。
このコードでは、プロシージャに関する一般的な情報を得ることができます。
Public Enum ProcScope
ScopePrivate = 1
ScopePublic = 2
ScopeFriend = 3
ScopeDefault = 4
End Enum
Public Enum LineSplits
LineSplitRemove = 0
LineSplitKeep = 1
LineSplitConvert = 2
End Enum
Public Type ProcInfo
ProcName As String
ProcKind As VBIDE.vbext_ProcKind
ProcStartLine As Long
ProcBodyLine As Long
ProcCountLines As Long
ProcScope As ProcScope
ProcDeclaration As String
End Type
Function ProcedureInfo(ProcName As String, ProcKind As VBIDE.vbext_ProcKind, _
CodeMod As VBIDE.CodeModule) As ProcInfo
Dim PInfo As ProcInfo
Dim BodyLine As Long
Dim Declaration As String
Dim FirstLine As String
BodyLine = CodeMod.ProcStartLine(ProcName, ProcKind)
If BodyLine > 0 Then
With CodeMod
PInfo.ProcName = ProcName
PInfo.ProcKind = ProcKind
PInfo.ProcBodyLine = .ProcBodyLine(ProcName, ProcKind)
PInfo.ProcCountLines = .ProcCountLines(ProcName, ProcKind)
PInfo.ProcStartLine = .ProcStartLine(ProcName, ProcKind)
FirstLine = .Lines(PInfo.ProcBodyLine, 1)
If StrComp(Left(FirstLine, Len("Public")), "Public", vbBinaryCompare) = 0 Then
PInfo.ProcScope = ScopePublic
ElseIf StrComp(Left(FirstLine, Len("Private")), "Private", vbBinaryCompare) = 0 Then
PInfo.ProcScope = ScopePrivate
ElseIf StrComp(Left(FirstLine, Len("Friend")), "Friend", vbBinaryCompare) = 0 Then
PInfo.ProcScope = ScopeFriend
Else
PInfo.ProcScope = ScopeDefault
End If
PInfo.ProcDeclaration = GetProcedureDeclaration(CodeMod, ProcName, ProcKind, LineSplitKeep)
End With
End If
ProcedureInfo = PInfo
End Function
Public Function GetProcedureDeclaration(CodeMod As VBIDE.CodeModule, _
ProcName As String, ProcKind As VBIDE.vbext_ProcKind, _
Optional LineSplitBehavior As LineSplits = LineSplitRemove)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GetProcedureDeclaration
' This return the procedure declaration of ProcName in CodeMod. The LineSplitBehavior
' determines what to do with procedure declaration that span more than one line using
' the "_" line continuation character. If LineSplitBehavior is LineSplitRemove, the
' entire procedure declaration is converted to a single line of text. If
' LineSplitBehavior is LineSplitKeep the "_" characters are retained and the
' declaration is split with vbNewLine into multiple lines. If LineSplitBehavior is
' LineSplitConvert, the "_" characters are removed and replaced with vbNewLine.
' The function returns vbNullString if the procedure could not be found.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim LineNum As Long
Dim S As String
Dim Declaration As String
On Error Resume Next
LineNum = CodeMod.ProcBodyLine(ProcName, ProcKind)
If Err.Number <> 0 Then
Exit Function
End If
S = CodeMod.Lines(LineNum, 1)
Do While Right(S, 1) = "_"
Select Case True
Case LineSplitBehavior = LineSplitConvert
S = Left(S, Len(S) - 1) & vbNewLine
Case LineSplitBehavior = LineSplitKeep
S = S & vbNewLine
Case LineSplitBehavior = LineSplitRemove
S = Left(S, Len(S) - 1) & " "
End Select
Declaration = Declaration & S
LineNum = LineNum + 1
S = CodeMod.Lines(LineNum, 1)
Loop
Declaration = SingleSpace(Declaration & S)
GetProcedureDeclaration = Declaration
End Function
Private Function SingleSpace(ByVal Text As String) As String
Dim Pos As String
Pos = InStr(1, Text, Space(2), vbBinaryCompare)
Do Until Pos = 0
Text = Replace(Text, Space(2), Space(1))
Pos = InStr(1, Text, Space(2), vbBinaryCompare)
Loop
SingleSpace = Text
End Function
あなたは、次のようなコードを使用してProcedureInfo関数を呼び出すことができます。
Sub ShowProcedureInfo()
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim CompName As String
Dim ProcName As String
Dim ProcKind As VBIDE.vbext_ProcKind
Dim PInfo As ProcInfo
CompName = "modVBECode"
ProcName = "ProcedureInfo"
ProcKind = vbext_pk_Proc
Set VBProj = ActiveWorkbook.VBProject
Set VBComp = VBProj.VBComponents(CompName)
Set CodeMod = VBComp.CodeModule
PInfo = ProcedureInfo(ProcName, ProcKind, CodeMod)
Debug.Print "ProcName: " & PInfo.ProcName
Debug.Print "ProcKind: " & CStr(PInfo.ProcKind)
Debug.Print "ProcStartLine: " & CStr(PInfo.ProcStartLine)
Debug.Print "ProcBodyLine: " & CStr(PInfo.ProcBodyLine)
Debug.Print "ProcCountLines: " & CStr(PInfo.ProcCountLines)
Debug.Print "ProcScope: " & CStr(PInfo.ProcScope)
Debug.Print "ProcDeclaration: " & PInfo.ProcDeclaration
End Sub
関連する問題
- 1. PERSONAL.XLSB起動時のMacroOptions
- 2. Excel AddinのMacroOptionsを設定するタイミング
- 3. コントローラからの表示/表示/表示
- 4. MVC、表示データの表示
- 5. の表示/非表示ベース
- 6. の表示/非表示DIV
- 7. ブートストラップモデルの表示/非表示
- 8. コンテンツの表示/非表示
- 9. ハイチャートコンテンツの表示/非表示
- 10. 表示/非表示のコンテンツ
- 11. NSToolbarItemの非表示/表示
- 12. jqueryの表示/非表示
- 13. ダイブオンクリックボタンの表示/非表示
- 14. フォームセクションの表示/非表示
- 15. ブラウザのパフォーマンス表示/表示
- 16. トグルワードプレスの表示/非表示
- 17. EclipseコンソールのXMLをプレビュー表示の表示から表示
- 18. 表示ダイアログの表示とオーバーレイの表示windowmanager by android
- 19. 条件を表示/非表示のフィールドを表示/非表示にする
- 20. anglejs内の表示/非表示セクションをすべて表示/非表示
- 21. ラジオの選択の表示/非表示
- 22. プロットの凡例の表示/非表示
- 23. jQueryのヘルプキーアップ時の表示/非表示
- 24. WPFの表示ユーザーコントロール(WPF)の表示ページ
- 25. の表示/非表示テンプレートURLのangularjs
- 26. バックボーンモデルビューの表示/非表示のアプローチ
- 27. SSRSレポートのプロンプトテキストの表示/表示
- 28. GIFの表示と非表示のベストプラクティス
- 29. サファリのJqueryの表示/非表示
- 30. アンドロイドスタジオのダイアログの表示と非表示
をはい、できます。 [MSDN](http://msdn.microsoft.com/en-us/library/aa195786%28v=office.11%29.aspx)以上を参照してください。[ozgrid](http://www.ozgrid.com/VBA /DesciptionToUDF.htm) – JMax
またはもう1つの面白い例:http://www.help-info.de/ja/Visual_Basic_Applications/vba_using_example.htm – JMax
Thx JMax、しかし、私は例として、以前にVBAコード?これらのページでは、情報を追加する方法を示し、コードから読み込む方法は示しません。 – faysou