Excel VBA 質問スレッド No.206 (解決済)

実行時エラー1004 ファイルにアクセスできませんでした の解決法について

投稿者 : あいまま     投稿日時 : 2021/03/25(Thu) 19:30:55     OS : Windows 10     EXCEL : Excel 2016
VBA初心者です。前任者作成VBAを加工し、csvを読み込みたいのですが
withステートメントの.refreshで実行時エラー1004 ファイルにアクセスできませんでしたとエラーが出てしまいます。
2パターンのcsv(内容は同じだが出力方法により配列が異なる)をファイル名で判定し、
判定結果をwsZyokenに反映、反映結果を元に、
wsseikyuシートのA2セル以降に指定書式で読込みたいのですが。。。

原因分かりますでしょうか。。
--------------------------------------------
Sub wsSeikyuImport()

Dim wsseikyu As Worksheet
Dim wsZyoken As Worksheet
Dim strSeikyu As String
Dim strName As String
Dim intFileNo As Integer
Dim strFileLine As String
Dim result9999 As Boolean
Dim longEndRow As Long
Dim EndCol As Long

Set wsseikyu = Worksheets("見積")
Set wsZyoken = Worksheets("1_条件設定")

Do

MsgBox "「mitsumori_detail.csv」" & vbCrLf & _
"または" & vbCrLf & _
"「見積.csv」を選択してください。", vbInformation, "ファイル選択"

strSeikyu = Application.GetOpenFilename("CSVファイル,*.csv", , "見積csvファイルを選択してください。")

If strSeikyu = "False" Then
MsgBox "キャンセルされました。", vbInformation, "キャンセル"

Exit Sub
End If

intFileNo = FreeFile
Open strSeikyu For Input As #intFileNo
Line Input #intFileNo, strFileLine
Close #intFileNo

If Left(strFileLine, 10) <> "見積番号,請求年月," And Left(strFileLine, 14) <> """見積番号"",""請求年月""," Then
MsgBox "「mitsumori_detail.csv」" & vbCrLf & _
"または" & vbCrLf & _
"「見積.csv」ではありません。", vbCritical, "エラー"
Else
Exit Do
End If
Loop

MsgBox "OK"

result9999 = CheckSource(strSeikyu, "*mitsumori_detail*")

'True:システム False:個別依頼
If result9999 = True Then
strData = "システム"
Else
strData = "個別依頼"
End If
wsZyoken.Range("L1").Value = strData

If strData = "システム" Then

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strCSV, Destination:=Range("A2"))
.TextFileCommaDelimiter = True
.TextFileColumnDataTypes = Array(2, 2, 9, 9, 9, 9, 9, 9)
.TextFileStartRow = 2
.Refresh
End With

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strCSV, Destination:=Range("D2"))
.TextFileCommaDelimiter = True
 .TextFileColumnDataTypes = Array(9, 9, 2, 2, 2, 2, 2, 1)
.TextFileStartRow = 2
.Refresh
End With
Else

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strCSV, Destination:=Range("A2"))
.TextFileCommaDelimiter = True
.TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 1, 2)
.TextFileStartRow = 2
.Refresh
End With
End If

[返信 1] Re : 実行時エラー1004 ファイルにアクセスできませんでした の解決法について
投稿者 : ヘンリー     投稿日時 : 2021/03/25(Thu) 21:41:11
>実行時エラー1004 ファイルにアクセスできませんでした
というメッセージを返してくれているのですから、
「ファイルにアクセスできません」という言葉をそのまま受け止めましょう。


このメッセージがわからなければ、実行時エラー1004について、
ネットで検索してみてください。

ファイルにアクセスできない時ってどんな時?
例えば、ファイルがすでに開かれている場合は、ファイルにアクセスできるが、
読み取り専用になるのでは?
、、、という事は、ファイルが存在しないか破損しているのでは???

それと、ActiveSheet.QueryTablesについても調べてみてください。
TextFileCommaDelimiter は何をしているの?
TextFileColumnDataTypes = Array(2, 2, 9, 9, 9, 9, 9, 9)は何をしているの?
TextFileStartRow = 2は何をしているの?
Refreshは何をしているの?

そして、今回のエラーの原因となっている
ActiveSheet.QueryTables.Addは何をしているの?
ActiveSheet.QueryTables.Addの()の中、つまり引数には何を指定しているの?

前任者の引継ぎをして、VBAを変更するのであれば、
自分で調べてみる力が必要となります。
例えば、ActiveSheet.QueryTables.Addの.(ドット)の意味を
どのように読み取ればよいか解説しているYoutube動画もあります。

最初のうちは、手間がかかり面倒でも、自分で調べる力がある人とない人では、
結果が大きく変わります。

VBAは、人の手でやると、1回300分かかる作業を、10秒でやってしまう
という事もできるのです。

あいまま様も、そのような力がつくよう、応援しています。
是非、頑張ってください。

[返信 2] Re : 実行時エラー1004 ファイルにアクセスできませんでした の解決法について
投稿者 : あいまま     投稿日時 : 2021/04/20(Tue) 18:41:20
@ヘンリーさん

あれから試行錯誤してみたところ原因わかりました。Connectionの参照先
ファイルパスの所で「 strCSV」がいけなかったのですね。
調べて納得です。そして無事作成できました。
ありがとうございました!

当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2021-04-21 06:47:38 )

Page
Top