Excel VBA質問箱 IV

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

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


781 / 13645 ツリー ←次へ | 前へ→

【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 発言[未読]

【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

【78326】Re:「FileSearch」代替クラスの作り方
発言  γ  - 16/7/17(日) 10:28 -

引用なし
パスワード
   ▼Gyouko さん:
>「70:書き込みできません」とのエラーが出力されてしまう。

そのエラーが起きたのはどこの行でしょうか。
ステップ実行して、配下の条件に合致したパス名たちの取得ができているかどうか
確認してください。
そのエラーメッセージだけでは原因がわからないと思います。

【78327】Re:「FileSearch」代替クラスの作り方
発言  γ  - 16/7/18(月) 14:36 -

引用なし
パスワード
   書き忘れたけれども、もちろん、こちらでそのコードが
正常に動いていることを確認したうえで、発言しています。

なんらかの環境的なことが悪さをしているものと思います。
それは、そちらで原因追及のトライをしないと分からない性質のものです。
# こちらのテスト実行が不十分の可能性もありますが。

【78335】Re:「FileSearch」代替クラスの作り方
発言  Gyouko  - 16/7/19(火) 7:41 -

引用なし
パスワード
   ▼γ さん:
ご確認いただき、ありがとうございます。

自宅の環境(2000)で実施した場合にエラーが出た為、質問させて頂いたのですが、
その後、試しに会社の環境(2013)で実施したところ、エラーが出ませんでした。

ステップ実行を行いましたが、下記の行を実行した後に表示されます。  
Call MsgBox(Err.Number & ":" & Err.Description)

「配下の条件に合致したパス名たちの取得ができているかどうか
確認してください。」とのことですが、確認方法が分かりません。
申し訳ございませんが、分かりやすくご教示頂けますでしょうか。

【78336】Re:「FileSearch」代替クラスの作り方
発言  β  - 16/7/19(火) 18:10 -

引用なし
パスワード
   ▼Gyouko さん:

横から失礼します。

>ステップ実行を行いましたが、下記の行を実行した後に表示されます。  
>Call MsgBox(Err.Number & ":" & Err.Description)

えっ??

このコードはアップされたコードの中にはありませんが?

【78337】Re:「FileSearch」代替クラスの作り方
発言  Gyouko  - 16/7/19(火) 18:53 -

引用なし
パスワード
   ▼β さん:
>▼Gyouko さん:
>
>横から失礼します。
>
>>ステップ実行を行いましたが、下記の行を実行した後に表示されます。  
>>Call MsgBox(Err.Number & ":" & Err.Description)
>
>えっ??
>
>このコードはアップされたコードの中にはありませんが?

クラスモジュールの中にあるコードのようですね。

【78338】Re:「FileSearch」代替クラスの作り方
発言  γ  - 16/7/19(火) 22:14 -

引用なし
パスワード
   ▼Gyouko さん:
>>>ステップ実行を行いましたが、下記の行を実行した後に表示されます。  
>>>Call MsgBox(Err.Number & ":" & Err.Description)

それはエラーが起きてしまってから、メッセージを出す部分です。
もっと前の段階でエラーが起きているはずなので、
ステップ実行を注意深く行って、
どこでエラーになっているのか、よく観察してみて下さい。

【78339】Re:「FileSearch」代替クラスの作り方
発言  Gyouko  - 16/7/19(火) 23:10 -

引用なし
パスワード
   ▼γ さん:
>▼Gyouko さん:
>>>>ステップ実行を行いましたが、下記の行を実行した後に表示されます。  
>>>>Call MsgBox(Err.Number & ":" & Err.Description)
>
>それはエラーが起きてしまってから、メッセージを出す部分です。
>もっと前の段階でエラーが起きているはずなので、
>ステップ実行を注意深く行って、
>どこでエラーになっているのか、よく観察してみて下さい。


「On Error GoTo ABORT」とあり、ABORTに飛ぶ直前の行は以下の行でした。
これがエラーになっているという理解でよいのでしょうか。
For Each oSubFolder In oFolder.SubFolders

【78340】Re:「FileSearch」代替クラスの作り方
発言  γ  - 16/7/20(水) 7:01 -

引用なし
パスワード
   >「On Error GoTo ABORT」とあり、ABORTに飛ぶ直前の行は以下の行でした。
>これがエラーになっているという理解でよいのでしょうか。
> For Each oSubFolder In oFolder.SubFolders
On Error GoTo ABORT をコメント文にして無効にした上で実行してみてください。
エラーになったときのoFolderの内容をローカルウインドウで
確認してみては?

【78350】Re:「FileSearch」代替クラスの作り方
発言  Gyouko  - 16/7/22(金) 16:55 -

引用なし
パスワード
   ご説明いただいた内容を元に色々と試してみましたが、
今のところ解決に至っておりません。

もう少し格闘してみたいと思います。

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