投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/11/13 21:06:02
>> .Object プロパティを忘れずに
> これをつけてませんでした。
> なんというミス、、、
ActiveX コントロールを VB のフォーム上に貼ると、[Name プロパティ]や[Index プロパティ]など、
VB で管理するために追加拡張が加えられ、素のコンポーネントとは別のオブジェクトとなります。

.Object プロパティを用いることで、VB で拡張される前の素のオブジェクトを取得できます。


> OraDynasetを全データをLoopにてClipで
> セットしている感じです。
> (データ量もそれなりにあるためこれが脅威的に遅いのです。。。)
Clip は、複数セルに対して一括してデータを転送できるので、
それ自体にかかる時間は、さほど多くないと思います。

もしかして、ループ中で
 S = S & Col1 & vbTab & Col2 & vbCr
のような文字列連結を行っていませんか? だとすると、これは御法度です。

この場合、
 1. [S & Col1]に相当するメモリ領域[1]を一時確保し、そこに S & Col1 を転記。
 2. [1 & vbTab]に相当するメモリ領域[2]を一時確保し、そこに [1] & vbTab を転記。
 3. 使い終わったメモリ作業領域[1]を破棄する。
 4. [2 & Col2]に相当するメモリ領域[3]を一時確保し、そこに [2] & Col2 を転記。
 5. 使い終わったメモリ作業領域[2]を破棄する。
 6. [3 & Cr]に相当するメモリ領域[4]を一時確保し、そこに [3] & vbCr を転記。
 7. 使い終わったメモリ作業領域[3]を破棄する。
 8. 変数 S 上に、[4]に相当するメモリ領域を確保し、そこに [4] の内容を転記。
 9. 使い終わったメモリ作業領域[4]を破棄する。
という、メモリの確保と解放が繰り返されます。

このため文字列が長くなるにつれ、メモリ操作にかかるコストが無視できなくなってしまいます。