0

私は、ExcelダッシュボードからMS Wordテンプレートにデータを書き込むための新しいスクリプトの基礎として、しばらく前に書いたコードユーザー@Alainを使用しています。ここで元の投稿と解決策を確認してください。コンパイルエラーが1つあり、完全に取り除くことはできません。

GenerateDocumentation問題は、モジュール内のコード行、特にsrcPath文字列に関するものです。

FindConstant("")VBAコードとして認識しません。私が知っていることからfindConstantJavaコマンドです。[ツール]>[参照]にライブラリを選択するのを忘れていますか?実際、私が認識していないサブや機能がいくつかあるようです。たとえば CreateDocGenPathGetNextEndorsementNumberなどです。これらの関数は他のライブラリ、またはカスタムサブの機能ですか?

srcPath = Application.GetSaveAsFilenameこの行を次のように書き直して、ディレクトリを選択するためのダイアログボックスを表示できるはずです...これは機能しますか?

4

2 に答える 2

1

ユーザー@Alainのカスタム定義関数を複製する可能性が高い関数を作成したと思いますFindConstants("Message Here"). VBA でディレクトリ パスを呼び出す方法は、Windows API を使用することです。この関数は、ファイル DLL を呼び出してディレクトリ ブラウザを表示します。次に、選択内容を に保存しDirPath()ます。これらの宣言を 64 ビット マシンで呼び出す方法がわかりません。これは、Windows 7 を実行していることを前提としています。

Option Explicit
Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type


'32-bit API declarations
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
  Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) _
  As Long


Declare Function SHBrowseForFolder Lib "shell32.dll" _
    Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

Function DirPath(Optional Msg) As String
    Dim bInfo As BROWSEINFO
    Dim path As String
    Dim r As Long, x As Long, pos As Integer
     bInfo.pidlRoot = 0&  

'   Window title information   
 If IsMissing(Msg) Then
        bInfo.lpszTitle = "Select a folder."
   Else
       bInfo.lpszTitle = Msg
   End If

'   Directory information to return
   bInfo.ulFlags = &H1

'   Display the browsing dialog
   x = SHBrowseForFolder(bInfo)

'   Parse
path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal path)
If r Then
    pos = InStr(path, Chr$(0))
    DirPath = Left(path, pos - 1)
Else
    DirPath = "" ' Saves no directory if nothing is selected!
End If
End Function

上記の関数をテストする Sub は次のとおりです。

Sub Test()
Dim Msg As String
Msg = "Please select a template repository."
MsgBox GetDirectory(Msg)
End Sub

少し面倒で申し訳ありませんが、Markdown でコード ブロックをクリーンアップする方法がわかりません...これは完全な答えではなく、API を介した呼び出しに慣れていないため、到達するのに時間がかかりました。さらに、MSDN は C+ を念頭に置いて書かれていますが、それは私にはわかりませ。そのため、C+ の宣言を VBA の宣言と同一視するテーブル化されたリソースを見つける必要がありました (As Long と *FAR など)。アランのコードで見つけた関数をアドオンまたはよく知られた UDF として誰かが貢献または特定できる場合に備えて、質問を開いたままにします。作成して学習するにつれて、この回答をさらに編集します。

于 2013-04-01T19:08:11.473 に答える
0

アランがどこかの設定のリストからパスを返すために書いた関数だと思いますFindConstant()が、SrcPathがどこでも使用されていることはわかりません。あなたが言及する他のルーチンもユーザー提供です。

于 2013-03-19T20:20:50.817 に答える