前のログ 次のログ

No.2350 Re:エクセル終了時のダイアログについて    投稿者:ひよっこ [01/6/25(月)23:50分]

まず、〜への変更を保存しますか?のメッセージボックスを出さなくするには

WorkBooks.Closeの引数にTrueかFalseを指定すればOKです。
Falseを指定した場合、保存せずにブックを閉じることになります。

あとはクリップボードですが、これはクリップボードの中身をクリアしていまえば
よいのではないのでしょうか。

No.2349 ADOでの非同期処理について  投稿者:みや [01/6/25(月)20:49分]

みなさん教えてください!!

今回、VBで大量データを扱うPL/SQLを呼び出すプログラムを作成しています。
OracleにADO接続し処理を行うんですが、データが大量なため制御が戻るまで 1時間から1時間半ぐらいかかります。
この間に、せめて画面が固まらないように出来ないかといろいろ試しています。
ADOのコネクションやレコードセットで非同期設定は出来るんですが、結果に現れません。

以下ソースです、

Dim Con As ADODB.Connection
Dim sSQL$

sSQL = "Begin PLSQLFUNCTION; End;" 'PL/SQL呼び出しのSQL文

'PL/SQL実行(非同期処理の指定)
Con.Execute sSQL, , adAsyncExecute '第3引数、非同期処理指定

ご存知の方いらしたら教えてください。

No.2348 エクセル関連  投稿者:みふ。 [01/6/25(月)19:25分]

教えてください。


@エクセルで上書き保存をするとき、
 「〜は読みとり専用です。アクセスできません。」
 というダイアログが出ます。
 VBから読みとり専用を解除する方法を
 教えてください。

Aエクセルで新規ファイルを作成しました。
 シートを追加せずに既存のシートの名前を
 変更したいのですがどうすればよいでしょうか?

ヘルプをくまなく探しましたが、わかりませんでした。
どなたかご存じの方、回答願います。



No.2347 エクセル終了時のダイアログについて  投稿者:プーさん [01/6/25(月)18:57分]

こちらに載っている"エクセルの表をクリップボード経由でVBに貼り付け活用"を参考に

プログラムを作成してみたんですがエクセル終了時の
"xlApp.Quit"時に
「〜への変更を保存しますか」と「クリップボードに大きな情報があります。〜」 という二つのダイアログが表示されます。
この二つのダイアログを表示させないようにすることは可能でしょうか?
できるだけVB上で制御を行いたいのですが…。
よろしくお願いします。

No.2346 RE:保存時のファイル形式限定  投稿者:花ちゃん [01/6/25(月)18:00分]

>excel文書を作成後


どこで(VB.Excel.その他)作成されたのですか?
VBなら、VBでファイルを作成時にCSV形式にしないと、拡張子だけ変えても???
ExcelならExcelの機能で保存されたら出来ますし。

No.2345 DateGridについて  投稿者:たく [01/6/25(月)15:39分]

DateGridについてお聞きしたいのですが

DateGridの幅の変更をできなくしたいと思っています。
プロパティウィンドウで指定するのかと思ったのですが、どうも違うみたいです。
今、DateGridに表示されている画面で列の幅とか行の幅とか変更できてしまいます。
何かよい方法を教えていただけないでしょうか?

No.2344 保存時のファイル形式限定  投稿者:sicks [01/6/25(月)14:24分]

excel文書を作成後、コモンダイアログなどでCSVでしか保存出来ないようにする、という問題で

@コモンダイアログを利用しようとしました。
その問題点は
・VBの入ったマシンでしか認識されない。
・VBの入ったマシンで
Private Sub cbS_Click()
cdS.Filename = "C:\My Documents\勤務表\test\" & Format(Date, "YYYY年M月") & "勤務表.csv"
On Error GoTo ErrorHandler
cdS.ShowSave
ActiveWorkbook.SaveAs cdS.Filename
ErrorHandler:
Exit Sub
End Sub
として保存しても、見かけは"test"フォルダーに2001年6月勤務表.csvファイルが保存されている
(アイコンもcsvファイルのアイコンになっている)がいざ開くと
xlsファイルと何ら変わらない
通常どおりファイルメニューからcsv形式で保存するとそれをメモ帳でも読み込めるが
上記のコードにより保存された(見かけ→)csvファイルを開こうとしてもやはり化ける。

A以上のようにコモンダイアログの難点から、別の方法を探していると
GetSaveAsFilenameというプロパティを見つけましたが
これの対象オブジェクトはApplicationだそうです。
WorkbookやWorksheetは、プロジェクトエクスプローラーでオブジェクト名を確認出来ますが
Applicationというオブジェクトはここでの名前がどうしても見つからない為
このプロパティも使えません。

簡単そうな事なのに、にっちもさっちもいかなくなっております。
何かご存知の方、教えて下さい。

No.2343 ありがとうございます  投稿者:たく [01/6/25(月)13:27分]

ゆうさん、ゆー太郎さんありがとうございます。

早速試してみます。
また何かありましたら、よろしくお願いします。

No.2342 ありがとうございます  投稿者:たく [01/6/25(月)11:54分]

ゆうさん、ゆー太郎さんありがとうございます。

早速試してみます。
また何かありましたら、よろしくお願いします。

No.2341 RE:VBからエクセルのセルの色指定  投稿者:今回匿名 [01/6/25(月)9:34分]

花ちゃんさん、回答ありがとうございました。


colorやRGB、もちろん調べました。
こちらのヘルプも探してみたのですが・・・

これからは気をつけます。
ご迷惑おかけしました。
本当にありがとうございました。


No.2340 RE:リストビューコントロールについて    投稿者:愛飢男 [01/6/25(月)1:42分]

SelectedItem プロパティ で、ユーザーが選択した ListItem オブジェクトへの参照を取得し、

そのオブジェクトに対して適当なプロパティやメソッドを使えばイイでしょう。

No.2339 リストビューコントロールについて  投稿者:保秀 [01/6/24(日)14:16分] http://www.bcap.co.jp/hanafusa/VBdengon/vbdengon.htm

質問ですが、

(例)
1 ----/--/-- --:--
2 ----/--/-- --:--
3 ----/--/-- --:--
4 ----/--/-- --:--
5 ----/--/-- --:--
これが、リストビューに表示されているデータとします。このデータの4番目のデータを選択した場合、
どのように選択された位置のデータの取得や選択されている場所を特定すればいいのか
わかりませんのでどうか教えて頂けませんか。
お願いします。



No.2338 RERE:エクセルの行番号の取得    投稿者:みる [01/6/24(日)7:31分]

花ちゃんさん、レス有難うございます。


ヘルプは読んだのですが、いまいちヘルプってわかり難いんです。

> 文面からは複数のセルか範囲かも判断しかねますので???
私の文章もわかり難くてすみません。
アクティブのセルというのは単一のものをさしています。
アクティブセルの行番号をテキストボックス等に出力したかったのです。

その後、いろいろ試した結果
xxx.ActiveCell.Row で取得がうまく出来ました。
どうもありがとうございました。

No.2337 RE:エクセルの行番号の取得  投稿者:花ちゃん [01/6/24(日)1:51分]

こちらも下記のようにヘルプに載っていますよ


対象となるオブジェクトを指定しない場合は、アクティブウィンドウのアクティブセルが返されます。

アクティブセルと選択セル範囲を混同しないように注意してください。 アクティブセルは、現在の選択セル範囲内の単一セルを指します。
選択セル範囲には、複数のセルが含まれる場合がありますが、アクティブセルはその中の 1 つだけを指します

次に示すコードはいずれもすべて同じアクティブセルを表しています。

ActiveCell
Application.ActiveCell
ActiveWindow.ActiveCell
Application

以上ヘルプより抜粋

MyCell=xlApp.ActiveCell.Address

MyCell=$D$6 が取得できます 複数セルの場合最後に指定したセルが返ります。
何をしたいかも書けば違った回答が返ってくる場合がありますよ。
文面からは複数のセルか範囲かも判断しかねますので???


No.2336 RE:VBからエクセルのセルの色指定  投稿者:花ちゃん [01/6/24(日)1:05分]

ヘルプにもここにも載っていますよ!

まず自分で解かる範囲は調べましょう Color とか RGB とかをヘルプで見るとか!
MyColor = xlSheet.Range("A1:A1").Interior.Color
xlSheet.Range("A3:A4").Interior.Color = MyColor

No.2335 クリスタルレポートの制御  投稿者:あき [01/6/23(土)21:57分]

はじめて書き込みいたします。

クリスタルレポート8のOCXをVB6上で使用してます。
ボタンのイベントで、PrintReportでプレビューがでますが、
プレビューを出したまま画面に戻ってボタンを押すと別にプレビューがでてしまいます。
出来れば一枚だけだしたいのですが、この場合クリスタルレポート側か
VB側で何か制御できるのでしょうか?

過去ログに同じような質問があったのですが、回答がなかったので(苦笑)
どなたかわかる方いるようでしたら教えてください。

No.2334 エクセルの行番号の取得  投稿者:みる [01/6/23(土)21:45分]

VBにてはじめてプログラムを作成しているのですが、

わからない事があるので教えてください。

既に起動しているエクセルの、アクティブになっているセルの
行番号だけを、取得することは出来ないでしょうか?

よろしくご教授お願いします。

No.2333 VBからエクセルのセルの色指定  投稿者:今回匿名 [01/6/23(土)19:21分]

質問です。


既存のエクセルのセルに何色がついているか
判断する方法を教えてください。

よろしくお願いします。

No.2332 RE:MSFlexGrid の複数セル選択不可  投稿者:MIZO [01/6/23(土)0:18分]

強調表示(HighLight)のプロパティをNever(flexHighlightNever)に

設定するだけで選択できなくなりましたが・・・・(^^ゞ
()内はコードで設定する場合のプロパティ。


No.2331 MSFlexGrid の複数セル選択不可  投稿者:おーちゃん [01/6/22(金)22:14分]


こんばんは、いつもお世話になってます。
うえっち様、遅くなりましたがご回答有難うございました。

今、フレックスグリッドを使ってエクセルの用に直接入力を出来る様にしているのですが、
マウスでセルを複数行選択できないようにしたいのです。
本音はそこまでの処理はしたくないので・・・(^.^)

グリッドのフォームを3つ作っているのですが、1つんおフォームだけは
複数のセル選択が出来ないのです。
何度もデザイン時のプロパティをにらめっこしてても何も違いが無いのです。
コードにもプロパティをいじっている所は同じなのです。

挙句の果てには、その「選択できないグリッド」をコピーしていっても
駄目でした。

もう何が違うのかぜんぜんわかりません。
それともただのバグなのでしょうか?

またまた、ご回答お願い致します。




No.2330 RE:SetAttr ステートメント について  投稿者:ゆー太郎 [01/6/22(金)19:20分]

多分、 NTFS特有の圧縮属性の事を聞かれているのだと思います。

SetAttr では無理でしょう。

No.2329 RE:Re:ファイルシステムオブジェクトについて  投稿者:花ちゃん [01/6/22(金)19:09分]

ゆう(U) さんありがとうございました。

おかげさまで、コードがすっきりしました??
ほぼ、エクスプローラーの検索の性能と同等までになりました。
フォルダー取得に配列を使っているので2回目以降は断然エクスプローラーより早く検索できます。

No.2328 SetAttr ステートメント について  投稿者:花ちゃん [01/6/22(金)19:05分]

これでできませんか SetAttr "c:\TESTFILE.TXT", vbArchive


No.2327 re:カーソルを非表示にする  投稿者:ゆー太郎 [01/6/22(金)18:54分]

HideCaret,ShowCaret API関数を調べてみてください。

No.2326 カーソルを非表示にする  投稿者:山さん(匿名) [01/6/22(金)15:06分]

テキストボックスのカーソルを非表示にすることは,可能なのでしょうか?

ヘルプファイルのようなものを作ろうと思い,ラベルを使おうとも考えたのですが, 複数行の文字列を表示するため,スクロールバーが必要とされるのです。そのため, 容易にプログラムを組みたいため,テキストボックスを使用したいのです。 ユーザー操作不可にするため,LockedプロパティをTrueにはしたのですが, カーソルが表示されてしまうのはうれしくないので,何とか非表示にはできないかと思い, 質問してみました。
どなたか分かる方,教えてください。

No.2325 SetAttr ステートメント について  投稿者:ななし [01/6/22(金)14:54分]

あの〜、一つ、教えてもらいたいことが。。。

SetAttr ステートメント で、圧縮属性の設定は出来ないのでしょうか?

NT4.0 SP3
VB5.0 SP3 環境です。


No.2324 re:プログレスバーの使い方  投稿者:ゆー太郎 [01/6/22(金)14:14分]

>Set objFileSystem = CreateObject("Scripting.FileSystemObject") 


処理速度を上げたいのなら、 変数をVariant や Object のような曖昧型で
宣言しない方が良いです。
(特にループ内等で使用頻度の高い変数は)

実行時にオブジェクトを生成するのではなく、
参照設定で Microsoft Scripting Runtime を選択した状態で、
Dim objFileSystem As New FileSystemObject
Dim objFile As TextStream
と明示的に型宣言をすれば、恐らく2倍以上処理速度が上がると思います。

後、
> Set objFile = objFileSystem.GetFile(strFileName)
> Set objFile = objFileSystem.OpenTextFile(strFileName)
同じ変数名を、後で型の違う別のオブジェクトに再割り当てするのは
良くないですよ。
予想外の処理になったり、プログラムが読みにくくなります。

毎回プログレスを更新するのではなく、
例えば10回に1度プログレスを更新するような仕組みにすると、
更に速くなるかも。

No.2323 Re:プログレスバーの使い方  投稿者:ゆう(U) [01/6/22(金)13:26分]

●ちょっと読みにくくなりましたが・・・


主な部分にはコメントがありますので、分からない部分が
分からないのですが???


今回はプログレスバーのことのようなので・・・

ファイルを読み込んでいる状況を表示するのですから、ファイルのサイズ
に対する読み込んだ分のサイズを使えばプログレスバー(状況表示)に必要な
情報は満たされる事は理解されますよね?

ですから・・・
> ProgressBar1.Max = objFile.Size ' プログレスバーの最大値にファイルサイズを代入

> ProgressBar1.Value = lngRecByte '進行状況を示すプログレスバーの現在値
ここがプログレスバー表示の肝要な部分です。

lngRecByteは合計バイト数だろう事はわかると思いますが・・・

LenB(StrConv(strRecBuff, vbFromUnicode)) + Len(vbNewLine)
これが意味不明なのではないかと解釈しました。

VB4.0(32)からは内部的な文字列はUnicodeで処理されています、
これは1文字は全て2バイトとして扱われるため、ファイルサイズで
取得したサイズと異なります(半角1バイト・全角2バイト)。

objFile.ReadLine
で読み込まれた1行のデータはVB内部ではUnicodeなので、実際のバイト数を
換算するのに
LenB(StrConv(strRecBuff, vbFromUnicode))
のコードになるという事です。
※詳しくはヘルプ参照

同様に1行として読まれた時点でその行の改行は読み捨てられた状態になるため
実際には存在している筈の改行のために以下の値を加えています。

Len(vbNewLine)
も本来は上記と同様の手法で行わなければならないのですが、結果として
同じ値になる為、手順を省略しているのでしょう。
※ちなみに何度もLen(vbNewLine)を繰り返すのではなく、先に一度
 その値を求め変数に代入し、その値を使用する方がいいです。
 何度もLen()関数を呼び出すのは無駄です

lngNewLineLength = LenB(StrConv(vbNewLine, vbFromUnicode))
を使用するのがベストだと思います。
※vbNewLineは環境によって変化するので実行時に値を算出する
 詳しくはヘルプをご覧下さい

とまぁ、今のコードでのプログレスバー部分の説明で理解出来なさそうな
部分は以上でしょう・・・



ただ、現在のコードではファイルサイズがプログレスバー コントロールの
Min/Maxプロパティの限界を超えた場合エラーになるはずです。
※ -32,768 〜 32,767

ですから、案としては

ファイル位置/ファイルサイズ
の結果を百分率で計算し、その値で表示すると良いと思います
※実際には1/1000などが良いかも
Min = 0
Max = 1000
Value = Clng((ファイル位置/ファイルサイズ)*1000)

ただこの場合も、前回のValue値と異なる場合にのみ、新しいValue値に
変更すると良いです。

1行読み込む毎にプログレスバーの更新を行っていると、その更新する
時間だけでも馬鹿にならないですから・・・
●現在もそのせいで遅いと感じているのでしょう


この方法の場合テキストファイルのアクセスは「TextStream オブジェクト」では
無く・・・

「Open ステートメント」
「Line Input # ステートメント」
「Close ステートメント」
「Lof 関数」
「Seek 関数」
等で行う事になります。


No.2322 プログレスバーの使い方  投稿者:たく [01/6/22(金)11:03分]

ただいまプログレスバーの使い方について悩んでいます。

今のところつかえるには使えるのですが、どうにもこうにも遅いです。
後でPGを書いておきますが、やりたいことはレコードセットに読み込む時間をプログレスバーで表したいです。
このPGのどこがいけないのでしょうか?
あとできれば一つ一つのコードについても教えていただけたら幸いです。 なんせVBを使ったことがないのにもかかわらず
PGの仕事が回ってきてサンプルをただ利用しているだけなので何をしているのかさっぱりです。
どうぞよろしくお願いします。

strFileName にはファイル名 mySQL にはSQL文が入ります。

'プログレスバーの表示
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objFile = objFileSystem.GetFile(strFileName)
ProgressBar1.Max = objFile.Size
Set objFile = objFileSystem.OpenTextFile(strFileName)

' データベースに接続
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source= " & strFileName & " "
cn.Open
Dim mySQL As String ' SQLステートメント(SQL文を格納する変数)

' レコードセットを取得
Set rs = New ADODB.Recordset
With rs
.ActiveConnection = cn
.CursorLocation = adUseServer
.CursorType = adOpenStatic
.Properties("IRowsetIdentity") = True
.Open mySQL
End With

'プログレスバーの実行
Do Until objFile.AtEndOfStream ' ファイルの最後に達するまでループ
strRecBuff = objFile.ReadLine ' ファイルから1行読み込む
' 読み込んだの合計バイト数
lngRecByte = lngRecByte + LenB(StrConv(strRecBuff, _ vbFromUnicode)) + Len(vbNewLine) '各行末の改行文字の長さを足す
ProgressBar1.Value = lngRecByte '進行状況を示すプログレスバーの現在値
Loop
objFile.Close ' ファイルを閉じる
Set objFileSystem = Nothing ' オブジェクトを解放
Set objFile = Nothing

No.2321 Re:ファイルシステムオブジェクトについて  投稿者:ゆう(U) [01/6/22(金)10:46分]

速度重視の場合は参照設定を行い、実行時バインディングは

行わないほうが高速に動作します。

サンプル)
Private Sub Command1_Click()
Dim myFSO As New FileSystemObject
Dim sngTimer As Single

sngTimer = Timer
Debug.Print Now
List1.Clear
List1.Visible = False
Call sSearchSubFolder(myFSO.GetFolder(Environ("WINDIR")), "*")
List1.Visible = True
sngTimer = Timer - sngTimer
Debug.Print Now, Format$(sngTimer, "#,0.00"), List1.ListCount
End Sub

Private Sub sSearchSubFolder(ByRef myFolder As Folder, ByRef strSearch As String)
Dim mySubFolder As Folder
Dim myFile As File
' Dim strFile As String

With myFolder
If .SubFolders.Count > 0 Then
For Each mySubFolder In .SubFolders
Call sSearchSubFolder(mySubFolder, strSearch)
Next
End If
' strFile = Dir(myFolder.Path & "\" & strSearch, vbHidden Or vbSystem Or vbArchive)
' Do Until (strFile = "")
' List1.AddItem .Path & "\" & strFile
' strFile = Dir
' Loop
For Each myFile In .Files
If myFile.Name Like strSearch Then
List1.AddItem myFile.Path
End If
Next
End With
End Sub

無駄にプロパティを参照している部分がありますので・・・
こんな感じにすると幾らかましになると思います。
※DirのワイルドカードとLikeでの結果で拡張子の部分が関連するので、
 同じ結果を得るにはさらに一工夫が必要です


総ファイル数やサイズ・日付等を必要としないのであれば、ファイル名での
検索だけならファイル:「Dir 関数」、フォルダー:「Folder オブジェクト」
で高速になると思います(確認された通りですね)。
※でも日付など複合検索なら別途APIも選択肢に加えると良いかも・・・

No.2320 エクセル保存の件 お礼  投稿者:みふ [01/6/22(金)9:54分]

こんにちは。

花ちゃんさん、回答ありがとうございました。
またわからないことがあるときは、
よろしくお願いします。
今度は質問の書き方もうまく書けるよう
がんばります。

No.2319 ありがとうございます  投稿者:luck [01/6/22(金)6:47分]

花ちゃん、ご回答ありがとうございました。

環境はOutlook Express です。一度ためしてみます。
またいろいろとおねがいします。

No.2318 VBでファイルをエクスポートする。  投稿者:るみるみ [01/6/21(木)18:46分]

VBA(Access)でファイルをCSV型でエクスポートしたいのですが、

どうしたらよいでしょうか??

No.2317 RE:RE:ファイル読み込み  投稿者:ま〜 [01/6/21(木)16:03分]

花ちゃんさんお返事ありがとうございます。

コピー・アンド・ペーストだけでは困るデータだったので
経験者の方のお知恵を拝借しようと思ったのですが
つまらない質問ですみませんでした。

No.2316 RE:RE:txt(tab区切り)から .csv への変換  投稿者:花ちゃん  投稿者:Shu [01/6/21(木)9:04分]

花チャンさんありがとうございます。私の開発環境は VB6.0 なので split 関数を使用して

何とか解決しました。
どうもありがとうございました。

No.2315 RE:Shell で起動したプログラムを最前面に出す方法  投稿者:ゆうこ [01/6/21(木)8:50分]

花ちゃん さんへ

お礼が かなり遅れてしまいました。
回答ありがとうございました。

No.2314 RE:エクセル保存  投稿者:花ちゃん [01/6/21(木)2:59分]

解かりましたか?

>保存しないで終了したいのですが 

保存しないで終了する方法等どこにも載っていません。
なぜなら保存処理をしなければ保存できないからです。
発想の転換をしましょう。エクセル単独で使用しても同じなのですが、書き換えて保存せずに終了使用とすると 「変更を保存しますか」のメッセージがでてきますがそのメッセージを表示しないようにするか「いいえ」を クリックする方法が解かれば保存せず終了できますよね
だから、質問もそのようにすれば、回答も一回ですみますよね

   オブジェクト.DisplayAlerts = False で非表示になります。

「VBとエクセル間でデータのやりとり」のサンプルの中で使っています。

No.2313 RE:ファイル読み込み  投稿者:花ちゃん [01/6/21(木)2:57分]

エラーが発生するかどうか?大きなダミーファイル(コピー・貼り付けで)を作成し読み込んで下さい。

質問しているより早くて確実です。
どこでエラーが発生するかは環境に大きく影響される場合もありますので。

No.2312 RE:txt(tab区切り)から .csv への変換  投稿者:花ちゃん [01/6/21(木)2:56分]

過去のログ1982番を参考にされるか

Line Input で1行づつ読み込み Instr関数を使ってタブ位置を調べMid関数で変数に取り込めべできますよ
CSVファイルに変換したければエクセルで読み込みCSV形式で保管すればOKです。

No.2311 RE:メールのありか!!??   投稿者:花ちゃん [01/6/21(木)2:54分]

>メールが保存してあるフォルダーが見当たりません。

メールソフトはなんですか?Outlook Express なら
受信トレイを右クリックして、プロパティを見て下さい。
又は拡張子 dbx で検索して見て下さい。

質問の時は環境等を書くとレスが早いですよ?
こうやって調べて回答してもポストペットを使ってますって言われたら!!!

No.2310 ファイルシステムオブジェクトについて  投稿者:花ちゃん [01/6/21(木)1:49分]

ゆう(U)さんありがとうございました。おかげさまで納得できるものが出来そうです。


ファイルシステムオブジェクトの Folders コレクションと Dir 関数の組み合せが一番早いようです。??

以下試作結果

Windows フォルダー以下の全ファイルを列挙
1.APIを使ったやり方(Visual Basic Station樋口さんサンプル)
2.私の上記組み合わせのサンプル
  (エクスプローラーは検索時表示しているが 両サンプルは検索中はリストボックスを非表示で測定)
         1.の場合             2.の場合
全ファイル
ファイル数     23,171 23,170(カレントフォルダー含まず)
所要時間 13.18秒             9.87秒


拡張子検索    1,365ファイル          1,365ファイル
  *.DLL     2.23秒              2.32秒 (エクスプローラー 約2秒)

*A で検索    1.96秒              2.12秒(エクスプローラー 約3秒)
ファイル数 298ファイル           298ファイル(149ファイル???)

A* で検索    1.98秒              2.12秒(エクスプローラー 約3秒)
ファイル数 480ファイル           480ファイル(480ファイル 約5秒)   

ファイルシステムオブジェクトのファイルコレクションでファイルを列挙すると
全ファイル 
ファイル数    21,998(フォルダーは含まれない)
所要時間 69.38秒 

あまりにも遅いので(約7倍)他は試していません。

Set objFilesystem = CreateObject("Scripting.FileSystemObject")
For I = lngStartFolderNo To lngEndFolderNo
Set objCurrentFolder = objFilesystem.GetFolder(strFolder(I))
Set objCurrentFiles = objCurrentFolder.Files
For Each objFile In objCurrentFiles
lngFileMax = lngFileMax + 1&
If OpButtonNo = 1 Then
List1.AddItem strFolder(I) & objFile.Name 'strFile(lngFileMax)
End If
Next
Next I

こんな感じで使って見たのですが、どこか間違っているのでしょうか?
ちなみに検索方法は サブフォルダー以下のフォルダーをすべて配列に読み込みその後一気に配列から ファイルの検索をするというやり方です。
サブフォルダーを探しながらファイルを検索すると遅くなるようです。

フォルダーの検索はAPIを使った方法が早そうですが?ファイルは Dir関数の方が優れているみたいです。
コードが整理できましたらHPの方にUPしたいと思います。その時は、又、ご教授願います。

No.2309 メールのありか!!??  投稿者:luck [01/6/20(水)23:10分]

最近VBを勉強しはじめました。本当に面白いです。

今携帯から使ったお金の情報をマシンに送り、それを読みこんでこずかい帳をエクセルなどで出力するシステムを 作ろうと立ち上げてみましたがいざ作ろうとなったらメールが保存してあるフォルダーが見当たりません。
メールを引き出す方法を知っているからおられましたらどうか教えてください

No.2308 RE:エクセル保存  投稿者:花ちゃん [01/6/20(水)18:31分]

ここのExcel & Word 関係はご覧になりましたか?

まだでしたら、一度見て下さい。それで解からなければ、どこが解からないかを、又質問願います。

No.2307 ファイル読み込み  投稿者:ま〜 [01/6/20(水)18:22分]

また質問させてください(^^;


LineData = StrConv(InputB(LOF(1), #FileNo), vbUnicode)

これを利用してDATファイル内のデータを
LineDataに一気に放り込んでいるのですが
読み込むファイルが大きなものになったら
どうなるのだろうと危惧しております・・・。

やはりあまりに大きなデータを
読み込むとエラーが発生したりするのでしょうか?

よろしくお願いします。

No.2306 RE:RE:フォルダーの存在確認&ファイル書き込み  投稿者:ま〜 [01/6/20(水)18:12分]

花ちゃんお返事どうもありがとうございました。

無事解決で完成を見ました。

No.2305 エクセル保存  投稿者:みふ [01/6/20(水)17:18分]

はじめまして。


VBど素人です。
エクセルを参照して終了するときに
保存しないで終了したいのですが、
どなたかご存じの方、
教えていただけないでしょうか。
よろしくお願いします。

この間のログのバックアップが洩れていました。


No.2304 Inet時のResponseCodeについて  投稿者:そう [01/6/18(月)17:05分]

Inetを使用してFTPよりicErrorを取得したときにResponseCodeを取得すると思うのですが、

そのResponseCodeの詳しいCode一覧はどこに記載されてるのでしょうか?
知ってるかたがいましたら教えてください。

No.2303 データグリッドコントロールの表示形式を変えたい  投稿者:rin [01/6/18(月)16:33分]

VB始めて間もない初心者です。

データグリッドコントロールにDBのデータを表示する際に、時刻型でDBに保存されている
データをデータグリッド上で表示するとWindowsのバージョンによっては午後2:00や14:00
などのように表示形式が変わってしまうのを統一したいと考えています。
ヘルプなどを読んでいたら、DataFormatオブジェクトを使えば出来ると書いてあったので
読んで色々試してみたのですが,よく使い方がわからないのです。

DataGrid1.Columns("時間").DataFormat〜などと書くのかと思ったのですがうまくいきません。
どなたか教えて頂けないでしょうか?

No.2302 マクロの有無を判断  投稿者:たえ [01/6/18(月)14:46分]

いつもお世話になっております。

開こうとしているエクセルファイルにマクロを含んで
いるか判断するよい方法を教えていただけないでしょうか?
本等調べてみたのですが、見つけられませんでした。
どなたかご存知の方いらっしゃいましたら宜しくお願いします。

No.2301 RE:新規保存について  投稿者:花ちゃん [01/6/18(月)10:36分]

保存の場所で下記コードを追加して下さい。


xlApp.DisplayAlerts = False  'メッセージを非表示に
Dim strFileName As String 'ファイル名に保存時の 日時・時間・秒 を不可している
strFileName = "c:\Temp" & Format$(Now, "yyyymmddhns") & ".xls"
xlSheet.SaveAs strFileName  '新規保存

前のログ 次のログ


VBレスキュー(花ちゃん)
Visual Basic6.0  VB6.0