次の方法で共有

Excel2013でファイル選択の画面が呼び出せない

Anonymous
2015-06-18T04:17:28+00:00

はじめまして。

初質問で解りづらい点がありましたらご容赦ください。

下記のようなマクロを作成し、ファイル選択の画面を呼び出してデータの読み込みを行っていたのですがExcel2013(64bit)で実行させるとファイル選択の画面が表示されず困っています。(Excel2010(64bit)では動作確認済み)

詳細としては下記モジュール2を実行した時、ファイル選択の画面が表示されず、キャンセル扱い(pubGetOpenFileName()=""で返ってきてしまいます)となってしまい「データを開くをキャンセルしました」のメッセージが表示されてしまいます。

64bit環境のExcel2013で下記のマクロを実行するにはどのようにすればいいでしょうか?

[使用環境]

OS:windows8.1 Pro 64bit

office:Excel2013

VBAVer:Microsoft Visual Basic for Applications 7.1

以下サンプルコード

'----標準モジュール1--------------------------------------------------------------------

'ファイルを開く

Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" _

                 (pOpenfilename As OPENFILENAME) As Long

'comdlg32に渡す構造体

Private Type OPENFILENAME

    lStructSize         As Long             'この構造体の長さ

    hwndOwner           As Long             '呼び出し元ウインドウハンドル

    hInstance           As Long

    lpstrFilter         As String           'フィルタ文字列

    lpstrCustomFilter   As String

    nMaxCustrFilter     As Long

    nFilterIndex        As Long

    lpstrFile           As String           '選択されたファイル名(フルパス)

    nMaxFile            As Long             'lpstrFileのバッファサイズ

    lpstrFileTitle      As String

    nMaxFileTitle       As Long

    lpstrInitialDir     As String           '初期フォルダ名

    lpstrTitle          As String           'コモンダイアログのタイトル名

    flags               As Long             'フラグ

    nFileOffset         As Integer

    nFileExtension      As Integer

    lpstrDefExt         As String           'ファイル名の入力時、拡張子が省略された時の拡張子

    lCustrData          As Long

    lpfnHook            As Long

    lpTemplateName      As String

End Type

'フラグの定数

Const OFN_READONLY = &H1

Const OFN_OVERWRITEPROMPT = &H2             '上書き確認を出す

Const OFN_HIDEREADONLY = &H4

Const OFN_NOCHANGEDIR = &H8

Const OFN_SHOWHELP = &H10

Const OFN_ENABLEHOOK = &H20

Const OFN_ENABLETEMPLATE = &H40

Const OFN_ENABLETEMPLATEHANDLE = &H80

Const OFN_NOVALIDATE = &H100                'ファイル名に無効文字を許可

Const OFN_ALLOWMULTISELECT = &H200          '複数ファイルの選択を許可

Const OFN_EXTENSIONDIFFERENT = &H400        '拡張子チェック

Const OFN_PATHMUSTEXIST = &H800

Const OFN_FILEMUSTEXIST = &H1000            '既存ファイルのみ取得可能

Const OFN_CREATEPROMPT = &H2000

Const OFN_SHAREAWARE = &H4000               'ファイル共有違反を無視

Const OFN_NOREADONLYRETURN = &H8000

Const OFN_NOTESTFILECREATE = &H10000

Public Function pubGetOpenFileName() As String

'機能:comdlg32.dllを使用してファイル選択ダイアログを呼び出す。

Dim tpOpenFName As OPENFILENAME

Dim ret         As Long

Dim NULLPos     As Long

Dim RetFileName As String

    On Error GoTo ErrByeBye:

    With tpOpenFName                                    'GetOpenFileName関数に渡す構造体を設定

        .lStructSize = Len(tpOpenFName)

        .flags = OFN_FILEMUSTEXIST                      '既存ファイルのみ取得可能

        'ファイルの種類

        .lpstrFilter = "データファイル(*.ri2)" & vbNullChar & "*.ri2" _

        & vbNullChar

        .nMaxFile = 256                                 'ファイル名の長さ(パス含む)

        .lpstrFile = String(256, vbNullChar)            'ファイル名を格納する文字列を初期化

    End With

    ret = GetOpenFileName(tpOpenFName)                  'ファイル選択ダイアログ表示

    NULLPos = InStr(tpOpenFName.lpstrFile, vbNullChar)  'NULL削除

    RetFileName = Left(tpOpenFName.lpstrFile, NULLPos - 1)

ExitByeBye:

    On Error Resume Next

    pubGetOpenFileName = RetFileName

    On Error GoTo 0

    Exit Function

ErrByeBye:

    'エラーの場合

    RetFileName = vbNullString                          '普通はエラーを渡すが(Err.Description)

                                                        'ここでは、キャンセルクリックと同じにする

    Resume ExitByeBye

End Function

'----標準モジュール2--------------------------------------------------------------------

Sub ファイルを開く()

    Dim data(8) As String           'テキストファイルの読み込み用のバッファー

    Dim FileName As String

    FileName = pubGetOpenFileName()        'モジュール1を実行している。

    If FileName = "" Then

        MsgBox "データを開くをキャンセルしました", , "中  止"

        Exit Sub

'    Else

'        MsgBox FileName

    End If

    Open FileName For Input As #1      '※5 テキストファイルを開く

    Input #1, data(1), data(2), data(3), data(4), data(5), data(6), data(7), data(8),  '※5、4 テキストファイルを読み込む

 '  ※4 読み込んだ値をセルに写す

    Range("h3").Value = data(1)

    Range("b4").Value = data(2)

    Range("d5").Value = data(3)

    Range("d6").Value = data(4)

    Range("d7").Value = data(5)

    Range("e7").Value = data(6)

    Range("d8").Value = data(7)

    Range("d9").Value = data(8)

    Close #1                 ' テキストファイルを閉じる

End Sub

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2015-06-23T03:33:20+00:00

​ウィンドウズスクリプトプログラマ さん、いつもアドバイスありがとうございます。

宗円亮太 さん、こんにちは。

マイクロソフト コミュニティをご利用いただき、ありがとうございます。

こちらで調べてみた範囲では紹介ができそうな情報を見つけることができませんでした。

当フォーラムでは、 Excel の設定や利用方法、起動時のトラブルなどの一般的な質問についてやり取りされていることが多いです。

VBA に関する質問については、開発者の方々が情報交換を行っている MSDN の VBA フォーラムがありますので、こちらで情報を集めてみてはいかがでしょうか。

Msdn フォーラム - Visual Basic for Application(VBA)

せっかくこちらのフォーラムに質問を投稿していただいたのに、他のフォーラムのご紹介のみとなってしまい、ごめんなさい。

返信お待ちしています。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2015-06-23T23:51:11+00:00

    大沢 孝太郎様

    ご回答ありがとうございます。

    ご紹介いただいたフォーラムを利用してみようと思います。

    アドバイスありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2015-06-18T23:30:12+00:00

    ウィンドウズスクリプトプログラマ様

    ご回答ありがとうございます。

    紛らわしいサンプルと説明不足で申し訳ありませんでした。

    ErrByeBye:

        'エラーの場合

        RetFileName = vbNullString                          '普通はエラーを渡すが(Err.Description)

                                                            'ここでは、キャンセルクリックと同じにする

    上記の部分が実行されキャンセル扱いになっている状態ではないことは確認済みです。

    (エラーが出ているわけではないです)

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. 削除済み

    この回答は当社の行動規範に違反したため削除されました。 アクションを実行する前にこの回答を手動で報告したか、自動検出機能により特定しました。 詳細については、当社の行動規範を参照してください。


    コメントはオフになっています。 詳細情報