|
▼ピッポ さん:
こんにちは
アップされたコードそのままで上で申し上げたようなことを加味してみました。
拡張子を限定するならDIR関数のほうがやや使いやすいとも思いますが、とりあえずFSOのまま。
で、私が書くとすれば、さらにシェープの場所のチェックのループを無くしたものにするかもしれませんが
とりあえず。cntには、オリジナルのコードのとおり、何もセットしていません。
また、問題有り、なしの条件はオリジナルコードから推測して、たぶん、こんな分岐だろうとあたりをつけていますが
勘違いあれば指摘してください。
Sub Sample()
Dim myFso As Object
Dim MyOb As Object
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim c As Range
Dim oFold As String
Dim fName As String
Dim i As Long
Dim myFile As Object
Dim i2 As Long
Dim e As String
Dim 捺印数 As String
Dim cnt As Long
Dim fWb As Workbook
Dim fSh As Worksheet
Application.ScreenUpdating = False
Set myFso = CreateObject("Scripting.FileSystemObject")
Set sh1 = Sheets("一覧表")
Set sh2 = Sheets("元保管場所(データベース)")
For Each c In sh1.Range("F11", sh1.Range("F" & sh1.Rows.Count).End(xlUp))
i = c.Row
捺印数 = sh1.Range("AF" & i).Value
With sh1.Range("J" & i)
.ClearContents
.Font.ColorIndex = xlAutomatic
End With
fName = ""
'F列にハイパーリンクなければスキップ
If c.Hyperlinks.Count > 0 Then
oFold = ThisWorkbook.Path & "\" & c.Hyperlinks(1).Address
'リンク先フォルダが存在するものだけ
If myFso.FolderExists(oFold) Then
For Each myFile In myFso.GetFolder(oFold).Files
e = LCase(myFso.getextensionname(myFile.Name))
If e = "xls" Then
fName = myFile.Name
'ブックオープンし、リンク先フォルダのxlsファイルに図形があるか判定
Set fWb = Workbooks.Open(oFold & "\" & fName)
For Each fSh In fWb.Worksheets
i2 = 0
For Each MyOb In fSh.Shapes '
If MyOb.Type = msoPicture Then '
If Not Intersect(MyOb.TopLeftCell, fSh.Range("A1:BV9")) Is Nothing Then
'左上角指定で選択されたシートのみを対象にする
'このifが無いとシート全体が対象になる
i2 = i2 + 1
End If
End If
Next
fWb.Close False
If i2 <> 捺印数 Then Exit For
Next
If i2 <> 捺印数 Then Exit For
End If
Next
With sh1.Range("J" & i)
.Value = "問題" & IIf(i2 = 捺印数, "なし", "あり")
.Font.ColorIndex = IIf(i2 = 捺印数, xlAutomatic, 3)
End With
End If
End If
Next
Application.ScreenUpdating = True
MsgBox cnt & " 個のファイルが捺印されています。", vbInformation
End Sub
|
|