C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: ApplicationFilesearchの置換


(過去ログ 128 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■76117 / inTopicNo.1)  ApplicationFilesearchの置換
  
□投稿者/ たかはし (1回)-(2015/06/02(Tue) 16:01:17)

分類:[.NET 全般] 

エクセルで使用しています。2003では動作しておりましたが、2010では動作しません。
FileSystemObjectの使い方がわかりません。。前任者が作成したとのことで、引き継ぎましたが素人の私にはさっぱりです。。
添削よろしくおねがいいたします。
Sub MRDate_Open()
'@-1 FDデータ読込
'今月分
Sheets.Add After:=Worksheets(3)
Worksheets(1).Name = "GHP"
Worksheets(2).Name = "EHP"
Worksheets(3).Name = "電力"
Worksheets(4).Name = "水道"
MsgBox "今月のUSBをセットしてください。"
Dim i As Integer
Dim j As Integer
Dim m As Integer
Dim n As String
For i = 1 To 90
ChDir "G:\"
n = Format(i, "000")
m = 0
Set fs = FileSystemObject 'ファイルの有無
With fs
.LookIn = "G:\"
.Filename = "*." & n
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
For j = 1 To .FoundFiles.Count
m = m + 1
Next j
End If
End With
If m = 0 Then
Else
Workbooks.OpenText Filename:="G:\MR******." & n, _
Origin:=932, StartRow:=1 _
, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
Tab:=True, Comma:=True, _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array( _
3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10 _
, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), _
Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array( _
23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), _
Array(30, 1), Array(31, 1)), TrailingMinusNumbers:=True
Application.Run "PERSONAL.XLS!MR_Cal" '下にプログラム有り
Windows(1).Close False
End If
Next i
'先月分
Dim myYr As Integer 'フロッピーの判別
Dim myMn As Integer
myYr = Workbooks(2).Worksheets(3).Range("B2")
myMn = Workbooks(2).Worksheets(3).Range("C2")
If myMn = 1 Then
myYr = myYr - 1
myMn = 12
Else
myMn = myMn - 1
End If
MsgBox "先月のUSBをセットしてください"
For i = 1 To 10
ChDir "G:\"
Workbooks.OpenText Filename:="G:\MR******.041", _
Origin:=932, StartRow:=
引用返信 編集キー/
■76119 / inTopicNo.2)  Re[1]: ApplicationFilesearchの置換
□投稿者/ WebSurfer (589回)-(2015/06/02(Tue) 16:19:36)
No76117 (たかはし さん) に返信
> エクセルで使用しています。2003では動作しておりましたが、2010では動作しません。

Excel 2003 と Excel 2007 以降(2010 も)ではファイルの形式が違っていて、拡張子
も違いますが、そのあたりはどうなんでしょう?

エラーが出るなら、どのようにした特、どの行で、どういうエラーが出るのか(エラーメ
ッセージは略さないでコピペしてください)を書いていただけませんか?
引用返信 編集キー/
■76121 / inTopicNo.3)  Re[2]: ApplicationFilesearchの置換
□投稿者/ たかはし (2回)-(2015/06/02(Tue) 16:30:41)
No76119 (WebSurfer さん) に返信
> ■No76117 (たかはし さん) に返信
>>エクセルで使用しています。2003では動作しておりましたが、2010では動作しません。
>
> Excel 2003 と Excel 2007 以降(2010 も)ではファイルの形式が違っていて、拡張子
> も違いますが、そのあたりはどうなんでしょう?
>
> エラーが出るなら、どのようにした特、どの行で、どういうエラーが出るのか(エラーメ
> ッセージは略さないでコピペしてください)を書いていただけませんか?

お世話になります。早速のご回答ありがとうございます。
18行目が黄色くエラーは 13 型が一致しません。
です。
もともと、そこには Application Fileserch と記載されていたのですが、ネットで調べた
ら FileSystemObject と置き換えるように書いてあってので、差し替えただけなんです・・・
引用返信 編集キー/
■76122 / inTopicNo.4)  Re[1]: ApplicationFilesearchの置換
□投稿者/ 魔界の仮面弁士 (363回)-(2015/06/02(Tue) 16:34:46)
No76117 (たかはし さん) に返信
> 添削よろしくおねがいいたします。
掲示板投稿時に、
  『半角カナは使用しないでください。文字化けの原因になります。』
という注意書きがあったかと思います。次回以降ご留意下さい。


> FileSystemObjectの使い方がわかりません。。
> Set fs = FileSystemObject

一般的に「FileSystemObject」と言えば、[ツール]-[参照設定]にて、
scrrun.dll (Microsoft Scripting Runtime) を設定して使うオブジェクトを指しますが、
ここで使われている FileSystemObject は、それとは別物のようですね。


前後のコードから判断すると、ここでセットされている FileSystemObject は、
FileSystemObject オブジェクトではなく、FileSearch オブジェクトのようです。


とはいえ、FileSearch オブジェクトを使うには、
 Set fs = FileSearch
あるいは
 Set fs = Application.FileSearch
と書くものであって、FileSystemObject と書く事は無いはず…。奇妙ですね。



> 2003では動作しておりましたが、2010では動作しません。

厄介なことに、FileSearch オブジェクトは 2007 にて廃止されています。
そのため、2003 で動いていたコードが 2010 で動作しなくなっているのでしょう。
(コンパイルエラーにはなりませんが、実行時エラーになってしまうはず)


FileSearch の代替クラスを作成された方がいらっしゃいますので、
そういったものを利用して、コードを書きなおしてみてください。
http://d.hatena.ne.jp/xixiixiiixiv/20120806/1344258369


> 前任者が作成したとのことで、引き継ぎましたが素人の私にはさっぱりです。。
上記のサンプルクラスなどを利用して、自分なりに置き換えていくことになりますが、
それが難しいようであれば、前任者(あるいは懇意のIT業者)に連絡をとって、
有償で修正を依頼された方が良いかも知れません。
引用返信 編集キー/
■76123 / inTopicNo.5)  Re[2]: ApplicationFilesearchの置換
□投稿者/ たかはし (3回)-(2015/06/02(Tue) 16:44:01)
No76122 (魔界の仮面弁士 さん) に返信
> ■No76117 (たかはし さん) に返信
>>添削よろしくおねがいいたします。
> 掲示板投稿時に、
>   『半角カナは使用しないでください。文字化けの原因になります。』
> という注意書きがあったかと思います。次回以降ご留意下さい。
>

大変失礼いたしました。
以後、気をつけたいと思います。御指摘ありがとうございました。

>
>>FileSystemObjectの使い方がわかりません。。
>> Set fs = FileSystemObject
>
> 一般的に「FileSystemObject」と言えば、[ツール]-[参照設定]にて、
> scrrun.dll (Microsoft Scripting Runtime) を設定して使うオブジェクトを指しますが、
> ここで使われている FileSystemObject は、それとは別物のようですね。
>
>
> 前後のコードから判断すると、ここでセットされている FileSystemObject は、
> FileSystemObject オブジェクトではなく、FileSearch オブジェクトのようです。
>
>
> とはいえ、FileSearch オブジェクトを使うには、
>  Set fs = FileSearch
> あるいは
>  Set fs = Application.FileSearch
> と書くものであって、FileSystemObject と書く事は無いはず…。奇妙ですね。
>
>

私の初歩的なミスでございました。御指摘の通り、FileSerchです。

>
>>2003では動作しておりましたが、2010では動作しません。
>
> 厄介なことに、FileSearch オブジェクトは 2007 にて廃止されています。
> そのため、2003 で動いていたコードが 2010 で動作しなくなっているのでしょう。
> (コンパイルエラーにはなりませんが、実行時エラーになってしまうはず)
>
>
まさにその通りでございました。


> FileSearch の代替クラスを作成された方がいらっしゃいますので、
> そういったものを利用して、コードを書きなおしてみてください。
> http://d.hatena.ne.jp/xixiixiiixiv/20120806/1344258369
>
ありがとうございます。一度、拝見してみます。

>
>>前任者が作成したとのことで、引き継ぎましたが素人の私にはさっぱりです。。
> 上記のサンプルクラスなどを利用して、自分なりに置き換えていくことになりますが、
> それが難しいようであれば、前任者(あるいは懇意のIT業者)に連絡をとって、
> 有償で修正を依頼された方が良いかも知れません。
引用返信 編集キー/
■76124 / inTopicNo.6)  Re[3]: ApplicationFilesearchの置換
□投稿者/ たかはし (4回)-(2015/06/02(Tue) 16:44:05)
No76121 (たかはし さん) に返信
> ■No76119 (WebSurfer さん) に返信
>>■No76117 (たかはし さん) に返信
> >>エクセルで使用しています。2003では動作しておりましたが、2010では動作しません。
>>
>>Excel 2003 と Excel 2007 以降(2010 も)ではファイルの形式が違っていて、拡張子
>>も違いますが、そのあたりはどうなんでしょう?
>>
>>エラーが出るなら、どのようにした特、どの行で、どういうエラーが出るのか(エラーメ
>>ッセージは略さないでコピペしてください)を書いていただけませんか?
>
> お世話になります。早速のご回答ありがとうございます。
> 18行目が黄色くエラーは 13 型が一致しません。
> です。
> もともと、そこには Application Fileserch と記載されていたのですが、ネットで調べた
> ら FileSystemObject と置き換えるように書いてあってので、差し替えただけなんです・・・
引用返信 編集キー/
■76125 / inTopicNo.7)  Re[2]: ApplicationFilesearchの置換
□投稿者/ 魔界の仮面弁士 (364回)-(2015/06/02(Tue) 16:59:39)
No76121 (たかはし さん) に返信
> もともと、そこには Application Fileserch と記載されていたのですが、ネットで調べた
> ら FileSystemObject と置き換えるように書いてあってので、差し替えただけなんです・・・

Excel 2003 で正しく動作していたコードを、意味を理解しないまま
別のコードに置き換え、その間違ったコードを提示したという状況なのですね?

……なんとも質問者泣かせな。(^_^;)



> ネットで調べたら FileSystemObject と置き換えるように
何処に書いてあったのか教えてほしいところですが、
その一文が指し示すのは、単純に置き換えれば良いといった話ではなく、
FileSystemObject を使って、同等機能を作りこむ必要がある、のような意味かと。



とりあえず、下記を試してみてください。

(1) No76122 で紹介した FileSearchBook.xls をダウンロードする。

(2) その中にある FileSearch のクラスモジュールを右クリックし、
 FileSearch.cls として「エクスポート」する。

(3) 修正対象の Excel ファイルを開き、そのプロジェクトに、
 先の FileSearch.cls を「インポート」する。

(4) そのプロジェクトの [ツール]-[参照設定]メニューにて、
 No76122 で紹介した Microsoft Scripting Runtime (scrrun.dll) を有効化する。

(5) 呼び出し元のコードで
 Set fs = Application.FileSearch
と書いてあった行を、
 Set fs = New FileSearchClass
に置き換える。

(6) 呼び出し元のコードで、
 If .Execute(SortBy:=msoSortByFileName, _
  SortOrder:=msoSortOrderAscending) > 0 Then
と書いてあった部分を、
 If .Execute() > 0 Then
に置き換える。



これでひとまず、多少はマシになるかと思います。


ただ、このクラスモジュールの実装だと、
ファイル名の大文字/小文字の処置が行われていないため、
たとえば
 .FileName = "*.xls"
のように指定すると、*.xls は拾えますが、*.XLS や *.Xls を取りこぼしてしまいます。


それでは都合が悪い場合は、FileSearchClass モジュール内の Sub runSearch にて、
 If Not (oFile.Name Like FileName) Then
と言う部分を、
 If Not (UCase(oFile.Name) Like UCase(FileName)) Then
のように置き換えてみて下さい。
引用返信 編集キー/
■76129 / inTopicNo.8)  Re[3]: ApplicationFilesearchの置換
□投稿者/ たかはし (5回)-(2015/06/02(Tue) 20:54:53)
No76125 (魔界の仮面弁士 さん) に返信
> ■No76121 (たかはし さん) に返信
>>もともと、そこには Application Fileserch と記載されていたのですが、ネットで調べた
>>ら FileSystemObject と置き換えるように書いてあってので、差し替えただけなんです・・・
>
> Excel 2003 で正しく動作していたコードを、意味を理解しないまま
> 別のコードに置き換え、その間違ったコードを提示したという状況なのですね?
>
> ……なんとも質問者泣かせな。(^_^;)
>

申し訳ありません。
何分、エクセルのマクロというものが初めての経験でして、高校生の頃、学校で実習したポケコン
(シャープ製)であBASICを思い出しつつ触ってみた次第です。

古いXPのパソコンに2003がインストールしてあり、マクロで計算させていたのですが、XPの
サポートが終わったのと、PC本体から異音がするのとで放置されており、なんとか今のPCで
使えるようにできないかと思った次第です。
>
>
>>ネットで調べたら FileSystemObject と置き換えるように
> 何処に書いてあったのか教えてほしいところですが、
> その一文が指し示すのは、単純に置き換えれば良いといった話ではなく、
> FileSystemObject を使って、同等機能を作りこむ必要がある、のような意味かと。
>
>
>
> とりあえず、下記を試してみてください。
>
> (1) No76122 で紹介した FileSearchBook.xls をダウンロードする。
>
> (2) その中にある FileSearch のクラスモジュールを右クリックし、
>  FileSearch.cls として「エクスポート」する。
>
> (3) 修正対象の Excel ファイルを開き、そのプロジェクトに、
>  先の FileSearch.cls を「インポート」する。
>
> (4) そのプロジェクトの [ツール]-[参照設定]メニューにて、
>  No76122 で紹介した Microsoft Scripting Runtime (scrrun.dll) を有効化する。
>
> (5) 呼び出し元のコードで
>  Set fs = Application.FileSearch
> と書いてあった行を、
>  Set fs = New FileSearchClass
> に置き換える。
>
> (6) 呼び出し元のコードで、
>  If .Execute(SortBy:=msoSortByFileName, _
>   SortOrder:=msoSortOrderAscending) > 0 Then
> と書いてあった部分を、
>  If .Execute() > 0 Then
> に置き換える。
>
>
>
> これでひとまず、多少はマシになるかと思います。
>
>
> ただ、このクラスモジュールの実装だと、
> ファイル名の大文字/小文字の処置が行われていないため、
> たとえば
>  .FileName = "*.xls"
> のように指定すると、*.xls は拾えますが、*.XLS や *.Xls を取りこぼしてしまいます。
>
>
> それでは都合が悪い場合は、FileSearchClass モジュール内の Sub runSearch にて、
>  If Not (oFile.Name Like FileName) Then
> と言う部分を、
>  If Not (UCase(oFile.Name) Like UCase(FileName)) Then
> のように置き換えてみて下さい。

詳しい説明をいただきまして、誠にありがとうございます。
明日、じっくりと試してみたいと思います。

もともと、CSVになっているデータを別のサーバーよりFDに書き出し、それを別のPCにて
エクセルで計算させて、必要データを取り出しております。
ですので、取りこぼし等の問題はないかなと思っております。(素人考えなのでアテに
はなりませんが)

お分かりになりやすいように後程、全景をアップしてみます。

ご回答、ありがとうございますm(_ _)m
引用返信 編集キー/
■76151 / inTopicNo.9)  Re[4]: ApplicationFilesearchの置換
□投稿者/ たかはし (6回)-(2015/06/03(Wed) 20:29:19)
こんばんわ。
さっそく、ご教授の通り、ひとつずつ作業いたしましたが、また別のところがひっかかってしまいました。

すぐに解決できるほど、簡単ではないと思い知りました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -