Excel VBA質問箱 IV

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

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


11779 / 13646 ツリー ←次へ | 前へ→

【14043】コンパイルエラー sakurabudoh 04/5/19(水) 2:32 質問[未読]
【14044】Re:コンパイルエラー IROC 04/5/19(水) 8:40 回答[未読]
【14097】Re:コンパイルエラー sakurabudoh 04/5/20(木) 22:05 質問[未読]
【14099】Re:コンパイルエラー Asaki 04/5/20(木) 22:14 回答[未読]
【14115】Re:コンパイルエラー ichinose 04/5/21(金) 0:23 発言[未読]
【14119】Re:コンパイルエラー Asaki 04/5/21(金) 9:45 発言[未読]
【14195】Re:コンパイルエラー sakurabudoh 04/5/23(日) 7:58 質問[未読]
【14196】Re:コンパイルエラー ichinose 04/5/23(日) 10:44 発言[未読]
【14222】Re:コンパイルエラー sakurabudoh 04/5/24(月) 1:29 お礼[未読]

【14043】コンパイルエラー
質問  sakurabudoh  - 04/5/19(水) 2:32 -

引用なし
パスワード
   ”Sub プロシージャを呼び出す時に、かっこを使うことはできません。”
”コード800A0414”
というエラーが出ます。
他のプログラムでSubとかっこを使っているのはエラーが出ないので、原因が分かりません。

【14044】Re:コンパイルエラー
回答  IROC  - 04/5/19(水) 8:40 -

引用なし
パスワード
   コードを掲載してみて下さい。

【14097】Re:コンパイルエラー
質問  sakurabudoh  - 04/5/20(木) 22:05 -

引用なし
パスワード
   call fileinfo(objfolder)

sub fileinfo(objfolder)

for each objfile in objfolder.files
  objexcel.cells(introw, 1).value = objfile.name
  objexcel.cells(introw, 2).value = objfile.datecreated
  objexcel.cells(introw, 3).value = objfile.datelastmodified
  objexcel.cells(introw, 4).value = objfile.path
  introw = introw + 1
next

for each objsubfolder in objfolder.subfolders
  call fileinfo(objfolder)
next

end sub

VBSの本に載っていたサンプルプログラムを丸写ししたものです。

【14099】Re:コンパイルエラー
回答  Asaki  - 04/5/20(木) 22:14 -

引用なし
パスワード
   こんばんは。

>call fileinfo(objfolder)
↑これ、Sub 〜 End Sub とか Function 〜 End Function
とかの中にあるわけではなくて、いきなり書いてありますか?
もしそうなら、それはエラーになります。

どうやって、
fileinfo
の関数を起動するか、手段をお考え下さい。

【14115】Re:コンパイルエラー
発言  ichinose  - 04/5/21(金) 0:23 -

引用なし
パスワード
   ▼sakurabudoh さん:
こんばんは。
これ、VBAではなくて、VBSの話ですよね?
objexcelとか、objfolderに何がセットされているかわかりませんが、


>call fileinfo(objfolder)
rem たぶん↑が原因ではないと思います
>
>sub fileinfo(objfolder)
>
>for each objfile in objfolder.files
>  objexcel.cells(introw, 1).value = objfile.name
rem        ↑だと思いますが・・・
>  objexcel.cells(introw, 2).value = objfile.datecreated
>  objexcel.cells(introw, 3).value = objfile.datelastmodified
>  objexcel.cells(introw, 4).value = objfile.path
>  introw = introw + 1
>next
>
>for each objsubfolder in objfolder.subfolders
>  call fileinfo(objfolder)
>next
>
>end sub
>
>VBSの本に載っていたサンプルプログラムを丸写ししたものです。

もうちょっと、簡単なコードにしましょう


call test(1)
sub test(byval aaa)
  msgbox aaa
  abc(1,1) 
  if aaa+1 <= 10 then
   aaa=aaa+1
   call test(aaa)
   end if
end sub

****(これ適当な名前と言う意味です).vbsというファイル名で保存して
これを実行してみて下さい(同じ内容のエラーになります)

abcをプロシジャーだと解釈しているからです。
本当にプロシジャーなら、 call abc(1,1)
と記述しなければならないんですが・・(勿論、abcというプロシジャーがあったとして)。

上のコードのabc(1,1)を削除して再確認してください。
正常に作動するはずです。

上記の例を参考にして頂いて、
>objexcel.cells(introw, 1).value = objfile.name

この辺のコードに問題がないか確認して下さい。


それから、このサイトは、VBAの質問箱ですから、
いきなりコードだけ記述されてしまうとVBAだと思ってしまいます。
(もっとも上記のコードをVBAでどうやって実行するのかわかりませんが)

VBSのご質問もVBAに役に立つ事もあるので、私個人としては、良いと思いますが、
このコードをどういう手順で実行したかとか、
エラーの発生した行とかの情報も記述して下さいね

【14119】Re:コンパイルエラー
発言  Asaki  - 04/5/21(金) 9:45 -

引用なし
パスワード
   >これ、VBAではなくて、VBSの話ですよね?
>それから、このサイトは、VBAの質問箱ですから、
>いきなりコードだけ記述されてしまうとVBAだと思ってしまいます。

あれ、そうなんですか!?
VBSは判りませんので、退散です。。。m(_ _)m

【14195】Re:コンパイルエラー
質問  sakurabudoh  - 04/5/23(日) 7:58 -

引用なし
パスワード
   on error resume next

strpath = "C:調べるパス”

set objFS = createobject("scripting.filesystemobject")

set objfolder = objFS.getfolder(strpath)
if err.number <> 0 then
  msgbox("エラーno."&err.number&vbcr&err.description)
  wscript.quit
end if

set objexcel = createobject("excel.application")
set objbook = objexcel.workbooks.add
objexcel.visible = true

objexcel.cells(1,1).columuwidth =15
objexcel.cells(1,2).columuwidth =15
objexcel.cells(1,3).columuwidth =15
objexcel.cells(1,4).columuwidth =35

objexcel.cells(1,1)value ="ファイル名"
objexcel.cells(1,2)value ="作成日"
objexcel.cells(1,3)value ="最終更新日"
objexcel.cells(1,4)value ="ファイルのパス"

introw = 2

call fileinfo(objfolder)

sub fileinfo(objfolder)

for each objfile in objfolder.files
  objexcel.cells (introw, 1).value = objfile.name
  objexcel.cells (introw, 2).value = objfile.datecreated
  objexcel.cells (introw, 3).value = objfile.datelastmodified
  objexcel.cells (introw, 4).value = objfile.path
  introw = introw + 1
next

for each objsubfolder in objfolder.subfolders
  call fileinfo(objfolder)
next

end sub

VBSの質問をしてしまって、すいませんでした。
上が全文です。行22 文字20 エラーとなります。
このサンプルスクリプトは、フォルダ内のすべてのファイルの情報をエクセルの表として出力します、と書いてあります。


>call test(1)
>sub test(byval aaa)
>  msgbox aaa
>  abc(1,1) 
>  if aaa+1 <= 10 then
>   aaa=aaa+1
>   call test(aaa)
>   end if
>end sub
>
上記も試してみましたが、abc(1,1)を削除した後、行3 文字1で文字が正しくありませんという、エラーになってしまいます。

【14196】Re:コンパイルエラー
発言  ichinose  - 04/5/23(日) 10:44 -

引用なし
パスワード
   ▼sakurabudoh さん、こんにちは。
VBSは、私も良く知りません(もっともVBAだってまだまだなんですが)。

まず、前回投稿した

call test(1)
sub test(byval aaa)
  msgbox aaa
  abc(1,1) 
  if aaa+1 <= 10 then
   aaa=aaa+1
   call test(aaa)
   end if
end sub

私の投稿をメモ帳等にコピーしてますよね?
頭の空白( msgbox aaa等)に別の文字が入ってしまっています。
これを半角空白に打ち直して下さい。
もしくは、全コードをご自分で打ち直すかしてみて
再度確認して下さい。

私は、普段は、
ExcelのVBAを編集するVBEに一旦、コードを貼り付けた後、これをコピーして
メモ帳等に貼り付けるという方法をとっています。
(もっと良い方法があったらどなたか教えて下さい)

それから提示頂いたコードですが、いくつか間違いあります。
サンプルコードを忠実に再現されていますか?

作り直してみました。
On Error Resume Next

strpath = "D:\My Documents\TESTエリア"
rem    これは、適当フォルダパスに変えてください
Set objFS = CreateObject("scripting.filesystemobject")

Set objfolder = objFS.getfolder(strpath)
If Err.Number <> 0 Then
  MsgBox "エラーno." & Err.Number & vbCr & Err.Description
  wscript.Quit
End If

Set objexcel = CreateObject("excel.application")
Set objbook = objexcel.Workbooks.Add
objexcel.Visible = True

objexcel.Cells(1, 1).ColumnWidth = 15
objexcel.Cells(1, 2).ColumnWidth = 15
objexcel.Cells(1, 3).ColumnWidth = 15
objexcel.Cells(1, 4).ColumnWidth = 35
rem columuwidth になっていました
objexcel.Cells(1, 1).Value = "ファイル名"
objexcel.Cells(1, 2).Value = "作成日"
objexcel.Cells(1, 3).Value = "最終更新日"
objexcel.Cells(1, 4).Value = "ファイルのパス"
rem objexcel.Cells(1, 4)Valueになっていました
introw = 2

Call fileinfo(objfolder)

Sub fileinfo(objfolder)

For Each objfile In objfolder.Files
  objexcel.Cells(introw, 1).Value = objfile.Name
  objexcel.Cells(introw, 2).Value = objfile.datecreated
  objexcel.Cells(introw, 3).Value = objfile.datelastmodified
  objexcel.Cells(introw, 4).Value = objfile.Path
  introw = introw + 1
Next

For Each objsubfolder In objfolder.subfolders
  Call fileinfo(objsubfolder)
rem         objfolderになっていましたこのままだと永久ループ・・
Next
end sub


これもエラーが発生した場合、頭の空白を打ち直してみて下さい。
上記のコードで私の環境では、うまく作動しています。
確認してみて下さい。

【14222】Re:コンパイルエラー
お礼  sakurabudoh  - 04/5/24(月) 1:29 -

引用なし
パスワード
   ありがとうございます!
直していただいている時に分かったでしょうが、VBSとVBAの違いも分からなかった初心者です。今後はここで聞きづらくなりますが、使いやすく見やすい場所でしたので、またお願いするかもしれません。

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