|
以下状況にてエラーが発生してしまい苦戦しております。
他力本願で恐縮ですが、どうすれば改善出来るかご教示頂けると幸いです。
<前提>
・社内規定によりエクセルファイルにパスワードを設定。
・内部管理の観点より週次でパスワード有無チェックを実施。
・点検の簡素化のために、退職した前任者がマクロを作成。
・今般、エクセル2003から2013にアップデートしたところ、
マクロが正常に作動しなくなったので修正したい。
<質問事項>
WEBで調べた結果、Office2007以降FileSearchオブジェクトが
使用不可となった為、作動しなくなったものと思われる為、
以下URLを参考に、クラスモジュールへのインポート及び
「With Application.FileSearch」を「With New FileSearchClass」へ
変更したところ、「70:書き込みできません」とのエラーが出力されてしまう。
d.hatena.ne.jp/xixiixiiixiv/20120806/1344258369
<マクロ>
Option Explicit
Sub samples()
Application.EnableEvents = False
Application.DisplayAlerts = False
ActiveWorkbook.UpdateLinks = xlUpdateLinksNever
Application.ScreenUpdating = False
Dim f, buf As String, cnt, rc As Long, FSO 'As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
With Application.FileSearch
.NewSearch
buf = "*.xls"
If buf = "" Or buf = "False" Then Exit Sub
.FileName = buf
buf = GetFolder("検索を開始するフォルダを指定してください")
If buf = "" Then Exit Sub
.LookIn = buf
.SearchSubFolders = True
If .Execute() > 0 Then
For Each f In .FoundFiles
cnt = cnt + 1
rc = kensaku(f)
Cells(cnt, 1) = f
If rc = 1 Then
Cells(cnt, 2) = "パスワード有り"
Else
Cells(cnt, 2) = "パスワード無し"
End If
Next f
Else
MsgBox "見つかりませんでした"
End If
End With
Set FSO = Nothing
Application.ScreenUpdating = True
End Sub
Function GetFolder(msg As String)
Dim Shell, myPath
Set Shell = CreateObject("Shell.Application")
Set myPath = Shell.BrowseForFolder(&O0, msg, &H1 + &H10)
If Not myPath Is Nothing Then
GetFolder = myPath.Items.Item.Path
Else
GetFolder = ""
End If
Set Shell = Nothing
Set myPath = Nothing
End Function
Function kensaku(ByVal f As String) As Integer
Dim xlApp As Application
Dim xlbook As Workbook
Set xlApp = CreateObject("Excel.Application")
Set xlbook = Nothing
On Error Resume Next
Set xlbook = xlApp.Workbooks.Open(f, Password:="", UpdateLinks:=0, ReadOnly:=True, _
IgnoreReadOnlyRecommended:=True, Notify:=False)
If Err.Number <> 0 Then
If Err.Number = 1004 Then
kensaku = 1
Else
kensaku = 0
Application.DisplayAlerts = False
xlbook.Close savechanges:=False
Application.DisplayAlerts = True
End If
Else
End If
On Error GoTo 0
Application.DisplayAlerts = False
'xlbook.saved =true
xlApp.Quit
Application.DisplayAlerts = True
Set xlApp = Nothing
Set xlbook = Nothing
End Function
Private Sub commanbutton1_click()
Application.Run "点検ツール.xls!sheet1.samples"
End Sub
|
|