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

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

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

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

433閲覧

For Eachでエクセル以外のデータを確認したい【VBA】

yumeno

総合スコア27

VBA

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2019/01/29 09:13

前提・実現したいこと

はじめまして。昨日から業務でVBAに携わっています。
For Each を使用して、現在開いているwindow内(.impexファイル)に指定のファイル名(strBookName)がないか探したいのですが
下記のコードではエクセルしか見てくれず困っています。

どうしたらよいか教えていただきたいです。
なにとぞ、よろしくお願いします。

該当のソースコード

VBA

1For Each objBook In **Workbooks** ←たぶんここが正しくない 2If objBook.Name = strBookName Then

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

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

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

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

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

mattuwan

2019/01/29 10:26

>現在開いているwindow内 どのアプリケーションで開いているのですか? Excelで開いているなら、それは、workbookでしょうが、 他のアプリケーションで開いているファイルをエクセルVBAで、認識できるかは定かではありませんので、他の方の回答をお待ちください。
guest

回答2

0

下記内容に読み替えての回答となります、違う場合は無視して下さい。

現在開いているwindow内(.impexファイル)に指定のファイル名(strBookName)がないか探したい

→対象のディレクトリ内に指定のファイル名(strBookName)がないか探したい

私の知識では、上記内容以外は解りかねます

Option Explicit

Sub Search()
Call FileSearch("対象ディレクトリPath")
End Sub

Sub FileSearch(Path As String)
Dim FSO As Object
Dim Folder As Variant
Dim File As Variant

Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If LCase(File.Name) Like "*.impex" Then Debug.Print File.Path End If Next File

End Sub

投稿2019/01/30 02:15

atsunofu

総合スコア59

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

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

yumeno

2019/01/30 06:00

回答ありがとうございます!解決することができましたが、今後の学びのためにも再現させていただきます。本当にありがとうございます。
guest

0

自己解決

Dim wd As Object, ts As Object
Dim r As Long, p As Integer
Dim key As String
'ファイルが展開していない場合はフラグが0
key = 0

'ワードを、エクセルで扱えるようにする
Set wd = CreateObject("Word.Application")

'ワードの機能である、タスクマネージャ(「Tasks」)の中身を1つずつ調べる
r = 0
For Each ts In wd.Tasks
'「impex」ファイルだけ処理したいので、見つかった「ts」に「.impex」という文言が入っているか調べるのに必要です。
p = InStr(ts, ".impex")
'もし、起動している(「Visible」)プログラムで、なおかつ、「.impex」という文字を含んでいれば、1 行カウント
If ts.Visible = True And p > 0 Then
r = r + 1
'MsgBox ts & "あった : " & Right(datFile, 24)
'ファイル名と一致するか否か確認 ※文字数に合わせて数値の変更:Right(datFile, ★)
If Left(ts, 17) Like Left(Right(datFile, 24), 17) Then
'エラーメッセージを表示してシナリオ終了
MsgBox "同一名称の.impexファイルが開いています。ファイルを閉じてから再度実行してください。"
Exit Sub
Else
'MsgBox Left(ts, 17) & ":" & Left(Right(datFile, 24), 17) & "は一致しない"
End If
'実際に「ts.Name」の値は、「ファイル名」+「表示しているアプリケーション」になってしまうので、「Mid()」関数によって、後ろの部分を削除しています(正確には、「ts.Name」の1文字目から、「.impex」までをセルに書き込んでいます)。
Cells(r, 1).Value = Mid(ts.Name, 1, p + 3)
End If
Next

'ファイルを展開
Open datFile For Output As #1

'ワードを終了
wd.Quit
Set wd = Nothing

投稿2019/01/30 05:59

yumeno

総合スコア27

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問