質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

59943閲覧

自身が存在している同じフォルダのフォルダを開きたい

pro-poke5

総合スコア46

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/04/20 01:41

こんにちわ

Excelでマクロ(VBA)をかいています

実行するとまずファイルを選択するダイヤログを開くのですが、そのファイルを自身が存在しているフォルダと同じフォルダがデフォルトで表示されるようにしたいです
同じフォルダが開けばよくて、ファイルまでは指定しません

VBA

1Sub Run() 2 Dim OpenFileName As String 3 Dim wb As Workbook 4 5 'ファイルを開くダイアログ 6 'OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") 7 Workbooks.Open Filename:=ThisWorkbook.Path & "Microsoft Excelブック,*.xls" 8 9 'If OpenFileName = "False" Then 10 'Exit Sub 11 'End If 12 13 Set wb = Workbooks.Open(OpenFileName) 14 15 Dim nameFile As String 16 Dim Filenum As Long 17 Dim msg As String 18 19 nameFile = Format(Now(), "yyyymmdd") & ".csv" 20 nameFile = ActiveWorkbook.Path & "\" & nameFile 21 22 '同じファイル名があるとき警告 23 If Dir(nameFile) <> "" Then 24 msg = "同じ名前のファイルが存在します。上書きしますか?" 25 If MsgBox(msg, vbYesNo) = vbNo Then wb.Close 26 Exit Sub 27 28 End If 29 30 Filenum = FreeFile() 31 Open nameFile For Output As #Filenum 32 33 34--省略--- 35 36End Sub 37

もともと、今コメントアウトしているOpenFileNameをつかっていたときはエラーがなく稼働してました
調べてWorkBook~を記述したのですがエラーが出てうまく動きません

何が原因でしょうか?
何かが足りないのでしょうか?

アドバイスお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

方法はいくつかあると思いますが、2つほど紹介しておきます。

まず元々使われていたGetOpenFilenameを使う方法です(なぜやめてしまったのでしょうか)
これは他の回答にもあるように事前にカレントフォルダを移動しておけば解決です。

VBA

1' ワークブックがあるフォルダをカレントフォルダにする 2ChDir ThisWorkbook.Path 3 4'ファイルを開くダイアログ 5OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")

但し、カレントフォルダを移動することになるので、それを嫌うのであれば次の方法で。

Applicationオブジェクトに含まれるFileDialogを使う方法です。
こちらの方が細かくダイアログの制御ができそうですが、手間は増えてしまいます。

VBA

1'ファイルを開くダイアログ 2With Application.FileDialog(msoFileDialogOpen) 3 .AllowMultiSelect = False 4 .Filters.Clear 5 .Filters.Add "Microsoft Excelブック", "*.xls; *.xlsx", 1 6 .InitialFileName = ThisWorkbook.Path & "\" 7 .Show 8 OpenFileName = .SelectedItems(1) 9End With

※どちらの場合でもキャンセルの制御は必要です。

投稿2018/04/20 02:49

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pro-poke5

2018/04/20 05:16

回答ありがとうございます また別で質問するべきだとは思いますがファイルを開いたときそのエクセルを非表示にさせたいです ' ワークブックがあるフォルダをカレントフォルダにする ChDir ThisWorkbook.Path 'ファイルを開くダイアログ OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") ActiveWindow.Visible = False ←これ 付け足したのですが非表示なりません 場所がわるいのでしょうか…
ttyp03

2018/04/20 05:18

「そのエクセル」って何でしょう? 自分自身?
pro-poke5

2018/04/20 05:29

自分自身ではなく、フォルダから選択して開いたExcelです 画面上に表示されてしまうのですが非表示にさせたいです
ttyp03

2018/04/20 05:30

ファイル選択ダイアログはファイルを選択しファイル名を得るだけですので、Excelファイルはオープンされていません。 Openで開いた後にVisible=Falseをやればよいと思います。 なので順番としては、以下でよいはず。 ChDir ThisWorkbook.Path OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") Set wb = Workbooks.Open(OpenFileName) ActiveWindow.Visible = False
ttyp03

2018/04/20 05:35

以下のような書き方の方がアクティブウィンドウに影響されずに済みのでよいかもしれません。 Application.Windows(wb.Name).Visible = False
pro-poke5

2018/04/20 06:01

回答ありがとうございます ファイルを開く前に非表示にしようとしてたのでできなかったみたいです アクティブウィンドウに影響されない方法で解決いたしました!
guest

0

カレントディレクトリを移動するんじゃなかったかな

vba

1ChDir ThisWorkBook.Path & "¥" 2'ファイルを開くダイアログ 3OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")

元に戻したい場合はCurDirで予めとっておいて元に戻せばいいと思う

投稿2018/04/20 02:20

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pro-poke5

2018/04/20 05:14

回答ありがとうございます シンプルに解決いたしました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問