Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4037 / 76734 ←次へ | 前へ→

【78325】「FileSearch」代替クラスの作り方
質問  Gyouko  - 16/7/16(土) 16:51 -

引用なし
パスワード
   以下状況にてエラーが発生してしまい苦戦しております。
他力本願で恐縮ですが、どうすれば改善出来るかご教示頂けると幸いです。

<前提>
・社内規定によりエクセルファイルにパスワードを設定。
・内部管理の観点より週次でパスワード有無チェックを実施。
・点検の簡素化のために、退職した前任者がマクロを作成。
・今般、エクセル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

4 hits

【78325】「FileSearch」代替クラスの作り方 Gyouko 16/7/16(土) 16:51 質問[未読]
【78326】Re:「FileSearch」代替クラスの作り方 γ 16/7/17(日) 10:28 発言[未読]
【78327】Re:「FileSearch」代替クラスの作り方 γ 16/7/18(月) 14:36 発言[未読]
【78335】Re:「FileSearch」代替クラスの作り方 Gyouko 16/7/19(火) 7:41 発言[未読]
【78336】Re:「FileSearch」代替クラスの作り方 β 16/7/19(火) 18:10 発言[未読]
【78337】Re:「FileSearch」代替クラスの作り方 Gyouko 16/7/19(火) 18:53 発言[未読]
【78338】Re:「FileSearch」代替クラスの作り方 γ 16/7/19(火) 22:14 発言[未読]
【78339】Re:「FileSearch」代替クラスの作り方 Gyouko 16/7/19(火) 23:10 発言[未読]
【78340】Re:「FileSearch」代替クラスの作り方 γ 16/7/20(水) 7:01 発言[未読]
【78350】Re:「FileSearch」代替クラスの作り方 Gyouko 16/7/22(金) 16:55 発言[未読]

4037 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free