ACCESSのVBAで、GetOpenFilename メソッドを使いたいのですが、VBAで記述を行うとエラーになってしまいます。EXCELのVBAでは、記述できます。ACCESSのVBAでは、使用できないのでしょうか?
どなたか、教えて下さい。
(ACCESSは、Office XPです)

このQ&Aに関連する最新のQ&A

A 回答 (1件)

要はファイルを開くダイアログが出たらOKなのですよね?


GetOpenFileNameはAPI関数にあります。エクセルで使用していたGetOpenFileNameはEXCEL関数のようですね。
同じ名前なので、とまどいました。
AccessではAPIでやる必要があるようです。

以前に作成したサンプルの抜粋です。よかったら参考にしてください。

Public Const MAX_PATH = 260

Public Type OPENFILENAME
  lStructSize As Long     '構造体のサイズ
  hwndOwner As Long      'Me.hWnd(0 のとき、表示位置は左上隅)
  hInstance As Long      'App.hInstance(0 可能)
  lpstrFilter As String    'ファイルパターン(Chr(0)で区切る)
  lpstrCustomFilter As String 'カスタムフィルター
  nMaxCustFilter As Long   '同、バッファのサイズ
  nFilterIndex As Long    'フィルターのインデックス
  lpstrFile As String     'ファイル名用バッファ
  nMaxFile As Long      '同、サイズ
  lpstrFileTitle As String  'フルパス用バッファ
  nMaxFileTitle As Long    '同、サイズ
  lpstrInitialDir As String  'ディレクトリ指定
  lpstrTitle As String    'ダイアログボックスのタイトル
  flags As Long        'OFN_xxx
  nFileOffset As Integer   'フルパス中のファイル名までのオフセット
  nFileExtension As Integer  '拡張子までのオフセット
  lpstrDefExt As String    'デフォルトの拡張子
  lCustData As Long      'lpfbHookで渡すデータ
  lpfnHook As Long      'フック関数のポインタ
  lpTemplateName As String  'ダイアログテンプレート名
End Type

Public Const OFN_EXPLORER = &H80000 'エクスプローラ形式
Public Const OFN_HIDERREADONRY As Long = &H4
Public Const OFN_ENABLEHOOK = &H20 '
Public Const OFN_FILEMUSTEXIST = &H1000 '指定のファイル名は存在しなければならない
Public Const OFN_CREATEPROMPT = &H2000 '指定のファイル名がない時メッセージボックスを表示
Public Const OFN_ALLOWMULTISELECT = &H200 '複数ファイルを選択可能にする

Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Public Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Private Sub Command1_Click()
  Dim strIniFolder  As String  '初期表示フォルダ
  Dim strTitle    As String  'ダイアログタイトル
 
  Dim strFilter    As String  'フィルタ
  Dim strIniFile   As String  '初期表示のファイル
 
  Dim stsStr     As String  '選択されたファイル
 
  Dim wkStr  As String
 
'  With Me
    wkStr = String(MAX_PATH, vbNullChar)
    Call GetWindowsDirectory(wkStr, MAX_PATH)
    wkStr = Left(wkStr, InStr(1, wkStr, vbNullChar) - 1)
 
    '初期状態のセット(全て空でもいいです)
    strIniFolder = wkStr          '初期フォルダ
    strTitle = "ここにタイトルを設定します" 'タイトル
  
    strFilter = _
          "画像ファイル(*.bmp;*.jpg;*.gif)" & vbNullChar & "*.bmp;*.jpg;*.gif" & _
          vbNullChar & "BMPファイル(*.bmp)" & vbNullChar & "*.bmp" & _
          vbNullChar & "JPEGファイル(*.jpg)" & vbNullChar & "*.jpg" & _
          vbNullChar & "GIFファイル(*.gif)" & vbNullChar & "*.gif" & _
          vbNullChar & "ウィルスファイル(*.ウィルス)" & vbNullChar & "*.ウィルス" & _
          vbNullChar & "全てのファイル(*.*)" & vbNullChar & "*.*"          'ファイルの絞込み種類(表示名/フィルタ方法 の並びでセット)
     
    strIniFile = "アイーン志村 こんなファイル あるわけないか・・・" '初期表示ファイル
  
    '表示
    stsStr = OpenFile_Pic(0, strIniFolder, strFilter, strIniFile, strTitle)
    If stsStr = "" Then
      MsgBox "(T▽T) 未選択"
    Else
      MsgBox "(゜▽゜*)♪ " & stsStr
    End If
'  End With
End Sub

'ファイルオープン表示ルーチン
Public Function OpenFile_Pic(inOwnerWnd As Long, inDefDir As String, inFiter As String, inDefFile As String, inTitle As String) As String
  Dim Ret     As Long
 
  Dim fileInf   As OPENFILENAME

  With fileInf
    .lStructSize = Len(fileInf)
    .hwndOwner = inOwnerWnd
    .nFilterIndex = 1
    .lpstrFile = LeftB(inDefFile & String(MAX_PATH, 0), MAX_PATH)
    .nMaxFile = Len(.lpstrFile) - 1
    .lpstrFileTitle = .lpstrFile
    .nMaxFileTitle = .nMaxFile
    .lpstrInitialDir = inDefDir & vbNullChar
    .lpstrFilter = inFiter
    .lpstrTitle = inTitle & vbNullChar
    .flags = OFN_EXPLORER Or OFN_HIDERREADONRY Or OFN_ENABLEHOOK Or OFN_FILEMUSTEXIST
   
    Ret = GetOpenFileName(fileInf)
    If Ret = 1 Then
      OpenFile_Pic = Left(.lpstrFile, InStr(.lpstrFile, vbNullChar) - 1)
    End If
  End With
End Function

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=157966
    • good
    • 1
この回答へのお礼

回答ありがとうございました。
又、コーディングサンプルを頂き、早速試してみて解決致しました。
御礼、申し上げます。

お礼日時:2002/01/10 09:43

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3コピー元ワークシート3

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = Workbooks.Add

'ここからが実際のコピー処理です。
'単純に3回コピーメソッドを呼び出して3回コピーしています。
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)
masterSh.Copy before:=copyWb.Sheets(1)

End Sub

今どういうコードを書いているのか不明なので、とりあえず
「1つのシートを別のブックに複数回コピーする」ための参考ソースを書きます。
コピー元のブックに下記ソースを貼り付けて実行してもらえば
新規ブックにコピー元のシートが3枚コピーされると思います。
(新規ブックを追加しているのでシート数は3枚より多くなります)

Sub copySheet()
Dim masterWb As Workbook
Dim masterSh As Worksheet
Dim copyWb As Workbook

Set masterWb = ThisWorkbook
Set masterSh = masterWb.Sheets(1)
Set copyWb = W...続きを読む

QEXCEL VBA SaveAsメソッドについて

お世話になります。
現在、ネットワーク内の2サーバー間でvbsを使用してExcelピボットを更新して別名で保存する処理
を作成しています。この時、Server1からExcelマクロ実行用のvbsをキックしてServer2のExcel
マクロ内のSaveAsメソッドを実行してExcelを別名で保存すると、
作成されるべきファイルと拡張子無しの16進数のようなファイル名のファイルが2つ出来上がってしまいます。
Excelのバージョンは2003でServer2のExcelマクロを手動で実行した場合はこのようなことは発生しませんでした。
どなたか原因がわかる方がいればご教示いただきたく存じます。
何卒よろしくお願いいたします。

Aベストアンサー

【この回答は経験から考えた想像です、参考になれば】

SaveAsで指定したファイルが正しく作成されており、16進数のようなファイルが作成されることに困っている、と質問を読み取りました。

「16進数のようなファイル名」は、Excelのテンポラリファイルのような気がします。
それが残る原因となると

・VBA実行環境(アカウント等)に削除権限が無い

のでは?という気がしますが、如何でしょうか?

QEXCEL VBA ワークシートのコピーについて

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピー先BOOKに

         ワークシート名
ワークシート1 処理1ワークシート 
ワークシート2 処理2ワークシート
ワークシート3 処理3ワークシート

という具合にワークシートを複数コピーしたいのですが

処理ごとにデータを代入し、コピー処理はできるのですが。

コピー先BOOK

ワークシート3 処理3ワークシート

だけしかコピーされてないBOOKが作成されます。
上書きされているのだと思われます。

対処法が調べましたが見つけられていません。

すいませんが対処法及び参考VBA等ご教授宜しくお願いいたします。

seaclearsky8です。

一つのブックに何枚ものワークシートを追加して保存するVBAについて
ご教授、よろしくお願いします。

コピー元 

MASTER Book MASTER Workseets

コピー先

Copy Book copy Worksheets


コピー元にはワークシートがMASTERワークシートの一枚しかありません。

その一枚のワークシートに値をVBAで入れていき処理し

コピー先のコピーBOOKにワークシートをコピーしていきたいです。

しかし、MASTERBOOKの処理が何通りかあり、

コピー元の一枚のワークシートに
処理別にデータを写し

コピ...続きを読む

Aベストアンサー

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめる。
 新規ブックのオープンをtestwriteを呼ぶ前に1度だけ行い、
 testwriteの中ではその新規ブックに対してシートを追加していく。
 そしてtestwriteの処理が全部終わったら、
 新規ブックの全シートを1度に「記録シートYYYY/MM/DD.xls」にコピーする。

それでも駄目でしたら、以下の回答No.1を試してみてください。
http://oshiete.goo.ne.jp/qa/1822561.html

> 配列にワークシートのオブジェクトを入れることとか可能なのでしょうか?

それは多分できないと思います。


> 複数のセル・シートを何回もコピーする場合にでるらしいです。

多分、メモリをたくさん使っちゃってるせいでしょうね。
まず、メモリ使用を減らすようにしましょうか。

・testwriteの最後にオブジェクト変数のメモリ解放を行う。
 具体的には以下のように書く。もうやってたらすみません。
Set cbook = Nothing
Set mastersheet = Nothing
・testwriteの中でのブックオープンおよび保存をやめ...続きを読む

QVBAのGetOpenFilenameについて

VBAのGetOpenFilenameについての質問です。
このメソッドを使用すると一番初めは"マイドキュメント"内のdirが表示されるのですが、このデフォルトの指定を変更することは可能でしょうか。
一度ファイルを指定してやると、次回からはそのファイルのdirが
はじめに開くので、できると思うのですが、方法がどこにも載ってません。
ご存知の方、よろしくお願いします。

Aベストアンサー

ChDir / ChDrive で、ドライブ名とパスをセットしてからGetOpenFilenameを実行すると任意のフォルダを開く事が出来ます。

Dim WorkPath As String
WorkPath = ActiveWorkbook.Path
ChDir = WorkPath
ChDrive = WorkPath

QEXCELのVBAでシートコピーをしたとき元のマクロを削除するには?

VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか?
どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。
シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

Aベストアンサー

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け
Sheets("Sheet1").Name = "コピー"
Application.CutCopyMode = False
Application.SheetsInNewWorkbook = sc
ActiveWorkbook.Close
ThisWorkbook.Activate
End Sub

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け...続きを読む

QACCESS2000 VBA どなたか教えてください。

いつもお世話になっております。
どなたか教えてください。

OS:WinXP
開発環境:ACCESS2000

以上の環境で、あるACCESSのシステムを作りました。
システム自体は単純で、.csvのデータを取り込み、
テーブルに保存し、加工して、.xlsファイルをアウトプットする・・といったものなのですが、
これを海外のOS(WinXP英語版)でも動くようにする事に
なり、実際、VirtualPCでWinXP英語版の環境を作り、
Office2000の英語版をインストールし、日本語環境で作成
した.mdbファイルを開いたところ、エラーが出てしまいました・・・。

テーブル、フィールド等はすべて半角英字に変えたのですが、エラーの内容がよくわかりません。やはりフォーム・テーブル・マクロ等、最初から英語環境で作成しないといけないのでしょうか??

下記にエラーメッセージを列記します。□の部分は化けている個所です。誰か助けて下さい。

*****************************************
The expression On Load you entered as the event property setting
profuced the follwing error'
A problem occurred while □□□□□□□□ was communicationg with the OLE
or ActiveX Control.


The expression may not result in name of a macro,the name of a
user-defined function,or [Event procedure].
There may have been an error evaluating the function,event,or macro.
******************************************

いつもお世話になっております。
どなたか教えてください。

OS:WinXP
開発環境:ACCESS2000

以上の環境で、あるACCESSのシステムを作りました。
システム自体は単純で、.csvのデータを取り込み、
テーブルに保存し、加工して、.xlsファイルをアウトプットする・・といったものなのですが、
これを海外のOS(WinXP英語版)でも動くようにする事に
なり、実際、VirtualPCでWinXP英語版の環境を作り、
Office2000の英語版をインストールし、日本語環境で作成
した.mdbファイルを開いたところ、エラーが...続きを読む

Aベストアンサー

process9です。

エラー文言でマクロやユーザ定義関数、イベントプロシージャで
名称でエラーが起こってるって書いてあるので

マクロやユーザ定義関数、イベントプロシージャ名
で日本語名称で使われているのがないですか?

QVBAのワークシートの追加とコピーなんですが。

VBAのワークシートの追加とコピーなんですが。


sheet1の原紙をすべてコピーして、

新しくワークシートを追加してそのシートに貼り付けるプログラムを

教えてください。

Aベストアンサー

With ActiveWorkbook
  aaa = .Sheets("Sheet1").Cells(9, 4).Value 'aaaは社員
  bbb = .Sheets("Sheet1").Cells(9, 5).Value 'bbbは4月
  .Sheets("Sheet1").Copy After:=.Sheets(.Sheets.Count)
End With
ActiveSheet.Name = aaa & bbb

QVBAのGetOpenFilenameについて

VBAのGetOpenFilenameについての質問です。
(1)このメソッドを使用すると一番初めは"マイドキュメント"内のdirが表示されるのですが、このデフォルトの指定をサーバーのディレクトリーに変更することは可能でしょうか。
ネットワークドライブをZ等に設定すると出来た(例参照)のですが、ネットワークドライブを設定せずに直接ディレクトリ指定出来ないでしょうか。
(例)
ChDrive "z:\"
ChDir"z:\test"
(2)下記の通りvbaを組むと「引数は省略できません」のエラーになります。過去の質問url(http://oshiete1.goo.ne.jp/qa3023085.html)では出来ましたとお礼が書かれていましたが、理由が分からないので、教えて下さい。
Dim WorkPath As String
WorkPath = ActiveWorkbook.Path
ChDir = WorkPath
ChDrive = WorkPath

Aベストアンサー

(1)

ネットワークドライブにChDriveする
http://officetanaka.net/other/extra/tips15.htm

をご参考にされては。

QEXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法

 EXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法
 普通のやり方では、セルの数字、値だけで、通常は、中身の重要な"関数式"であったり、VBA等のプログラムまで、コピーされることは、ありませんので、そこまで、出来る方法を教えて下さい。

Aベストアンサー

コピー元のBookとコピー先Bookをどちらも開いて
Excel画面上に並べます(左右に並べる方が作業しやすいと思います)

Ctrlキーを押しながら、コピーしたいシートのタブ部分を
クリック長押しすると、+マークと▲マークが出てきます。
マークが出てきたら、新しいBookにドラッグ&ドロップ で
シートコピーが出来ます。

全く同じシートがコピーされ、マクロもコピーされます。

Q既存Excel VBAソフトがOffice2007でマクロエラーが発生

初めて投稿させて頂きました。
Excel VBAで開発されたソフトの改造を行っているのですが、初めてのVBAで悪戦苦闘しております。

<開発環境>
・WindowsXP Pro SP3
・Celeron 540(1.8GHz)
・メモリ1GB
・Microsoft Office2007 SP1

改造元ソフトはOffice2000で開発されており、Office2007で動作するとマクロエラーが発生する処理があります。
因みにまだソフト改造はしてなく、そのままOffice2007で動作させるだけでマクロエラーが発生します。
発生する箇所はVBAコードで定義されており、下記のマクロ実行時です。

Application.Run ("macro1")

マクロエラーの内容は下記になります。

-------------------------------
マクロエラー
[dbg.xls]マクロ(excel4.0)BV25
-------------------------------

この「macro1」はVBAのコードにはありません。
Excelの開発タブのマクロ一覧にはあります。
マクロ一覧で「macro1」を選択して、"編集"ボタンを押しても、マクロ一覧画面が消えるだけで何も表示されません。
この「macro1」がどこに定義されているか調べても全く判らず、ここで質問させて頂いた次第です。

Office2000やOffice2003ではマクロエラーが発生せずに正常に動作します。
Office2007のマクロセキュリティ設定を「すべてのマクロを有効にする」にしてます。
開発者向けのマクロ設定を「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」にチェックしても改善しません。

Office2000やOffice2003では動作しているので「macro1」はどこかに定義されているのだと思いますが、VBAコードにはありませんでした。
マクロ一覧にありますが、マクロ一覧の編集ボタンを押してもマクロが表示されません。
このマクロ「macro1」はどこで定義されているか、ご教授して頂けると助かります。

判りにくい説明で申し訳ありませんが、よろしくお願いします。

初めて投稿させて頂きました。
Excel VBAで開発されたソフトの改造を行っているのですが、初めてのVBAで悪戦苦闘しております。

<開発環境>
・WindowsXP Pro SP3
・Celeron 540(1.8GHz)
・メモリ1GB
・Microsoft Office2007 SP1

改造元ソフトはOffice2000で開発されており、Office2007で動作するとマクロエラーが発生する処理があります。
因みにまだソフト改造はしてなく、そのままOffice2007で動作させるだけでマクロエラーが発生します。
発生する箇所はVBAコードで定義されており、下記のマクロ...続きを読む

Aベストアンサー

エラーがexcel4.0となってますからマクロシートが使われているのでは?
シートタブにマクロシートは表示されてませんか。
あったらそれをアクティブにすればそこに4.0マクロが書かれていると思いますが。
マクロシートが見当たらなければ、非表示になっていると思われますので、表示してみてください。

外しましたらご容赦!


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報