{"id":74,"date":"2011-07-07T22:51:18","date_gmt":"2011-07-07T13:51:18","guid":{"rendered":"http:\/\/knowhow.hirohiro716.com\/?p=74"},"modified":"2011-07-07T22:51:18","modified_gmt":"2011-07-07T13:51:18","slug":"vb%e3%81%a7%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e9%96%8b%e3%81%8f%e3%83%bb%e4%bf%9d%e5%ad%98%e3%83%80%e3%82%a4%e3%82%a2%e3%83%ad%e3%82%b0","status":"publish","type":"post","link":"https:\/\/weblog.hirohiro716.com\/?p=74","title":{"rendered":"VB\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u30fb\u4fdd\u5b58\u30c0\u30a4\u30a2\u30ed\u30b0"},"content":{"rendered":"<p>WindowsAPI\u3092\u4f7f\u7528\u3059\u308b<\/p>\n<pre class=\"brush: vb; title: ; notranslate\" title=\"\">\n\n#If VBA7 Then\n    Private Declare PtrSafe Function GetOpenFileName Lib &quot;comdlg32.dll&quot; Alias &quot;GetOpenFileNameA&quot; (pOpenfilename As OPENFILENAME) As Long\n    Private Declare PtrSafe Function GetSaveFileName Lib &quot;comdlg32.dll&quot; Alias &quot;GetSaveFileNameA&quot; (pOpenfilename As OPENFILENAME) As Long\n    Private Type OPENFILENAME\n        lStructSize As Long\n        hwndOwner As LongPtr\n        hInstance As LongPtr\n        lpstrFilter As String\n        lpstrCustomFilter As String\n        nMaxCustFilter As Long\n        nFilterIndex As Long\n        lpstrFile As String\n        nMaxFile As Long\n        lpstrFileTitle As String\n        nMaxFileTitle As Long\n        lpstrInitialDir As String\n        lpstrTitle As String\n        flags As Long\n        nFileOffset As Integer\n        nFileExtension As Integer\n        lpstrDefExt As String\n        lCustData As Long\n        lpfnHook As LongPtr\n        lpTemplateName As String\n    End Type\n#Else\n    Private Declare Function GetOpenFileName Lib &quot;comdlg32.dll&quot; Alias &quot;GetOpenFileNameA&quot; (pOpenfilename As OPENFILENAME) As Long\n    Private Declare Function GetSaveFileName Lib &quot;comdlg32.dll&quot; Alias &quot;GetSaveFileNameA&quot; (pOpenfilename As OPENFILENAME) As Long\n    Private Type OPENFILENAME\n        lStructSize As Long\n        hwndOwner As Long\n        hInstance As Long\n        lpstrFilter As String\n        lpstrCustomFilter As String\n        nMaxCustFilter As Long\n        nFilterIndex As Long\n        lpstrFile As String\n        nMaxFile As Long\n        lpstrFileTitle As String\n        nMaxFileTitle As Long\n        lpstrInitialDir As String\n        lpstrTitle As String\n        flags As Long\n        nFileOffset As Integer\n        nFileExtension As Integer\n        lpstrDefExt As String\n        lCustData As Long\n        lpfnHook As Long\n        lpTemplateName As String\n    End Type\n#End If\n\nPrivate Const OFN_HIDEREADONLY = &amp;H4        &#039;\u8aad\u307f\u53d6\u308a\u5c02\u7528\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u975e\u8868\u793a\nPrivate Const OFN_FILEMUSTEXIST = &amp;H1000    &#039;\u30d5\u30a1\u30a4\u30eb\u306e\u5b58\u5728\u78ba\u8a8d\n\nPublic Function fileOpenDialog(ByVal hwnd As Long, ByVal initialDirectory As String, ByVal initialFileName As String, ParamArray fileFilters() As Variant) As String\n    Dim openFile As OPENFILENAME\n    Dim result As Long\n    fileOpenDialog = &quot;&quot;\n    openFile.lpstrFilter = createFilterString(fileFilters)\n    openFile.nFilterIndex = 1\n    openFile.hwndOwner = hwnd\n    openFile.lpstrFile = String(201, 0)\n    #If VBA7 Then\n        openFile.nMaxFile = LenB(openFile.lpstrFile) - 1\n        openFile.lStructSize = LenB(openFile)\n    #Else\n        openFile.nMaxFile = Len(openFile.lpstrFile) - 1\n        openFile.lStructSize = Len(openFile)\n    #End If\n    openFile.lpstrFileTitle = openFile.lpstrFile\n    openFile.nMaxFileTitle = openFile.nMaxFile\n    openFile.lpstrInitialDir = initialDirectory\n    openFile.lpstrFile = initialFileName &amp; String(201 - Len(initialFileName), Chr(0))\n    openFile.lpstrTitle = &quot;\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f&quot;\n    openFile.flags = OFN_HIDEREADONLY + OFN_FILEMUSTEXIST\n    result = GetOpenFileName(openFile)\n    If result &lt;&gt; 0 Then\n        fileOpenDialog = Trim(Left(openFile.lpstrFile, InStr(1, openFile.lpstrFile, vbNullChar) - 1))\n    End If\nEnd Function\n\nPublic Function fileSaveDialog(ByVal hwnd As Long, ByVal initialDirectory As String, ByVal initialFileName As String, ByVal fileExtension As String) As String\n    Dim openFile As OPENFILENAME\n    Dim result As Long\n    fileSaveDialog = &quot;&quot;\n    openFile.lpstrFilter = fileExtension &amp; &quot;\u30d5\u30a1\u30a4\u30eb (*.&quot; &amp; fileExtension &amp; &quot;)&quot; &amp; Chr(0) &amp; &quot;*.&quot; &amp; fileExtension\n    openFile.nFilterIndex = 1\n    openFile.hwndOwner = hwnd\n    openFile.lpstrFile = String(201, 0)\n    #If VBA7 Then\n        openFile.nMaxFile = LenB(openFile.lpstrFile) - 1\n        openFile.lStructSize = LenB(openFile)\n    #Else\n        openFile.nMaxFile = Len(openFile.lpstrFile) - 1\n        openFile.lStructSize = Len(openFile)\n    #End If\n    openFile.lpstrFileTitle = openFile.lpstrFile\n    openFile.nMaxFileTitle = openFile.nMaxFile\n    openFile.lpstrInitialDir = initialDirectory\n    openFile.lpstrFile = initialFileName &amp; String(201 - Len(initialFileName), Chr(0))\n    openFile.lpstrDefExt = fileExtension\n    openFile.lpstrTitle = &quot;\u30d5\u30a1\u30a4\u30eb\u306e\u4fdd\u5b58&quot;\n    openFile.flags = 0\n    result = GetSaveFileName(openFile)\n    If result &lt;&gt; 0 Then\n        fileSaveDialog = Trim(Left(openFile.lpstrFile, InStr(1, openFile.lpstrFile, vbNullChar) - 1))\n    End If\nEnd Function\n\nPrivate Function createFilterString(ByVal fileFilters As Variant) As String\n    Dim filterString As String\n    filterString = &quot;&quot;\n    For i = 0 To UBound(fileFilters)\n        Dim filter() As String\n        filter = Split(fileFilters(i), &quot;|&quot;)\n        If Len(filterString) &gt; 0 Then\n            filterString = filterString &amp; Chr(0)\n        End If\n        If UBound(filter) = 1 Then\n            filterString = filterString &amp; filter(0) &amp; Chr(0) &amp; filter(1)\n        ElseIf UBound(filter) = 0 Then\n            filterString = filterString &amp; filter(0)\n        End If\n    Next i\n    createFilterString = filterString\nEnd Function\n\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>WindowsAPI\u3092\u4f7f\u7528\u3059\u308b #If VBA7 Then Private Declare PtrSafe Function GetOpenFileName Lib &quot;comdlg32.dll&quot; Al [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-74","post","type-post","status-publish","format-standard","hentry","category-vb-vba"],"views":3240,"_links":{"self":[{"href":"https:\/\/weblog.hirohiro716.com\/index.php?rest_route=\/wp\/v2\/posts\/74","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/weblog.hirohiro716.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/weblog.hirohiro716.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/weblog.hirohiro716.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/weblog.hirohiro716.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=74"}],"version-history":[{"count":0,"href":"https:\/\/weblog.hirohiro716.com\/index.php?rest_route=\/wp\/v2\/posts\/74\/revisions"}],"wp:attachment":[{"href":"https:\/\/weblog.hirohiro716.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=74"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/weblog.hirohiro716.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=74"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/weblog.hirohiro716.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=74"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}