トップページ⇒tech
993コメント374KB

VB初心者質問スレ Part4

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
VB初心者質問スレPart3
http://pc.2ch.net/test/read.cgi/tech/1000523122/
0052初心者厨房NGNG
>>50
恐らく、僕が引っかかっているのは、CIntでは整数型の返り値、
Midでは文字型の返り値って言うところでエラーが出ているのではと
思っています。でも、どのようにしてこの問題を解決したらいいのか
分からないのです。
手を煩わして本当に申し訳ありませんがよろしくお願いいたします。
0053デフォルトの名無しさんNGNG
>>51>>52
とりあえず、デバッグで調べてModule1に何が入ってるかを書け
0054デフォルトの名無しさんNGNG
単純に MID をかける文字の開始位置が悪いと思われ
0055デフォルトの名無しさんNGNG
Midの第一引数は文字列型だが、考えられるのは
Module1.C_Dateが数値型だからとか値が入ってないとか
そういうことだと思う。

原因はおそらくこの2行。
da = Split(Date, "/")
L_DATE = da(0) & da(1) & da(2)

システム日付を文字列に変換するなら、
Format(Date,"yyyymmdd")とか使ったほうが確実だよ。

あと「らしい」と書いてるってことは別の人に聞かれてるのかね?
本人に自分で聞くように言ってやんなさい。
0056デフォルトの名無しさんNGNG
禁則処理のサンプルありませんかー?
0057tyuboNGNG
MDIフォーム でアクティブ子フォームの切り替え(Ctrl+Tab)を
抑止したいのですができません。
MDIフォームにはKey_Downイベントもないし
サブクラス化してトラップしようとしてもなぜかWM_KEYDOWNが
取れません
どうしたらいいですか???
0058Kusakabe YouichiNGNG
>>48 31 wrote:
> 先生、そろそろみんなが自作自演であることに気づいちゃいます。

はつみみです。
0059デフォルトの名無しさんNGNG
>>56
APIのDrawTextを使えば勝手にやってくれますが
それじゃ駄目ですか?
0060デフォルトの名無しさんNGNG
>>59
DrawTextは禁則処理してくれるんですね。

今やろうとしてるのはPowerBuilderのデータウィンドウ内のカラムで
やりたいので、できればシンプルなアルゴリズムがあれば
まねしたいな、と思いまして。
PowerBuilderのサンプルなんてないと思ったのでVBスレで
聞いてみました。
006131NGNG
>日下部
先生、文字化けの話から逸れましたが?
それはもういいんですか?
ふふふ。
0062Kusakabe YouichiNGNG
>>61 31 wrote:
> 先生、文字化けの話から逸れましたが?

初耳です。
0063デフォルトの名無しさんNGNG
>>52

たぶん、Module1.C_Dateの中身が空なんだろう。
CInt("") を実行したような状態になってるんじゃない?
CInt(Val("")) ならエラーにならないけど、どっちみち
値が入ってないからプログラム総体としてはエラーな気が。

Moの値が0になっても構わないなら、
Mo = CInt(Val(Mid(Module1.C_Date, 5, 2)) )
とすれば当面エラーは出ないけど、逆にバグ混入させる気がするね。

>>55の言うとおり、da = Split(Date, "/")を止めてFormat使った
方がいい。そもそもDateがyyyy/mm/dd形式で返すっていう保証は無いし。
0064デフォルトの名無しさんNGNG
>>60
PowerBuilderは使ったことが無いので判らないですが、
基本的には、行頭の文字をチェックしてその文字が禁則文字なら前の行に移す
(もしくは前の行の行末文字をもってくる)といった処理を繰り返すしかな
いと思います。
0065初心者厨房NGNG
>>55 遅レスですみません。
Module1の中身は何も入ってませんでした。。(汗)
とりあえず、今まで教えてもらった事を頑張ってやってみます。
ありがとうございます。
0066デフォルトの名無しさんNGNG
>>64
どうもです。
やってみます。バグが恐いですけど。
0067デフォルトの名無しさんNGNG
なんだ、ここでもNGワード設定の対象にしなきゃ...
0068ヒッキー@プログラミングNGNG
>Kusakabe Youichiさん
ワラタ。
ASCII→ASC�U
0069デフォルトの名無しさんNGNG
>>67
俺も NGワードの設定がしたいよ・・・(´Д`)
真面目にゾヌの導入検討しようかな・・・。
0070デフォルトの名無しさんNGNG
>>29です。
>>30さんに、初心者と名乗るようなヤツはダメ、手前で調べろボケ
というようなリンクを示されたので、かなりへこんでいます。
でも、どうしても自力では解決できません。ここ2ヶ月ずーっと悩んでます。
誰か少しでもヒントを下さい。
007167NGNG
>>69
タダで安らぎが手に入るんだもん、是非導入すべき(藁
つーことで作者さんに感謝(ここは見てないだろうが)。
007269NGNG
>>71
というわけで導入してみた。いや、いいなこれ。
まだ全然使いこなせてないけどとりあえずNGワードを設定したら幸せになれたよ(´ー`)ノ

あと、俺にゾヌ導入のきっかけを与えてくれた先生に感謝するよ。ちょっとだけ(藁
0073デフォルトの名無しさんNGNG
>>70
VBの話でなくていいなら、制限付きで出来ます。

SetClipboardData でデータをクリップボードに置くとき、
データのハンドルに NULL を指定します。
そーすると、他のアプリケーションがクリップボードからデータを
読み出そうとしたとき、WM_RENDERFORMAT メッセージが届きます。
このメッセージが届いたら、クリップボードに SetClipboardData でデータを置きます。

制限付きとは、次のようなことです。
WM_RENDERFORMAT は、他のアプリケーションが
クリップボードからデータを取り出すと発生します。
それは、貼り付けのときとは限りません。
ただクリップボードの中身を確認するためだけかもしれないし、
例えばクリップボードビューアが内容を表示するために
読み出す場合もあります。区別は出来ません。

あまり使えない方法ですが、他の方法は知りません。
・・・こんなので良い?
007429ですNGNG
>>73様
まだ良く理解できてませんが、参考にさせていただきます。
Win32APIで可能なのかな???
いえ、ヒントはすでにいただきましたから、後は自分で調べて試して戦います。
とにかく頑張ってみます。ありがとうございました。
0075デフォルトの名無しさんNGNG
フォームをロードしたときにMP3の音楽を
演奏する方法を教えてください
0076デフォルトの名無しさんNGNG
フォームの Load イベントに、
MP3の音楽を演奏するプログラムを書きます。
0077デフォルトの名無しさんNGNG
>>76 ワラタ
0078デフォルトの名無しさんNGNG
すいません、PGモドキのオイラには全然解決出来ない事態に出くわしました。
ご存知の方がいらしたら、どうか教えてください。
VB6(SP5)でACCESS97にDataEnvironmentで接続するソフトをつくり、デイストリビューター
でキャビファイルにして、稼働環境にインストールすることにしました。
キャビファイル作りは問題が無かったのに、インストール中にエラーが発生しました。
ログを見ると

C:\WINDOWS\SYSTEM\msado25.tlb' 中に DllRegisterServer() のエントリポイントが見つかりません。

とのことです。
無視してインストールを続行し、出来たEXEを動かすと、

実行時エラー3706
ADOCE could not find the specified provider.

MSのHPでエラー情報を見てみましたが該当するものはありませんでした。
ソフトそのものは2年近く稼動しているもので、問題はないはずです。
ディストリビューターにかけたときに問題が発生したと思うのですが、
思い当たる方はいらっしゃいますでしょうか?
何卒よろしくお願いします。
0079デフォルトの名無しさんNGNG
>>78 参照設定見直してみるとか
   よくわからんがSP5はADO2.5か?
008078NGNG
>>79
早速ありがとうございます。
参照を見直しましたらADOは2.5でした。
008179NGNG
 おれも経験あるんよ。ソレ。ADO2.0やったけど。
 ADO2.6以上のあったら参照設定をそれに戻してインストーラ
ー作りなおしてみれ。これで直ったら同じ原因かも。
 間違ってたらゴメソ。
008278NGNG
>>81
ありがとうございます。早速やってみます。
このご恩は一生忘れません!
008379NGNG
 とりあえず開発するときはADO何やったんか?開発時と同じヴァ
ージョンのADOに参照設定戻してVBP保存してEXE作ってイン
ストーラー作れば直ると思うが。

 暇だから詳細書くとさ、SP4のマシンで開発(ADO2.5)で
開発しててEXE(�@)作って、一度SP3のマシンにソース持って
って保存して、そのソースをSP4のマシンに戻して�@のEXEでイ
ンストーラー作ったらさぁ、参照設定がSP3だからか知らんけどA
DO2.0になっててさ。でもEXEは2.5でコンパイルしてるや
ん?多分そんな原因かも。

 ※ナゼ暇かというと午前0時にクライアントが日付またぐ処理やる
か監視するまで帰れないんだよよよい (ToT

これも違ったらゴメソ
0084デフォルトの名無しさんNGNG
>>25
aをLongゃCurrencyなどの桁数の多い型で宣言するとよい。
「7」はInteger型と解釈されているので、「7&」などと表記してVBにLong型と解釈させるとよい。

>>29
ヘルプで「Clipboard オブジェクト」を調べるとよい。
0085デフォルトの名無しさんNGNG
どなたかVBで標準DLL作る方法知ってる方います?
0086デフォルトの名無しさんNGNG
>>85

標準EXEでつくって拡張子を.dllに変える。
0087デフォルトの名無しさんNGNG
>>85

VBでつくろうとするのが間違い。
おとなしくVC++でつくれ。
0088デフォルトの名無しさんNGNG
>>85
86はウソ。
VBで標準DLLは作れない。
ActiveXDLLで我慢してください。
0089デフォルトの名無しさんNGNG
まずはCのパーザを書いて以下略
0090デフォルトの名無しさんNGNG
>>86
ありがとうございます。
009186NGNG
>>90

おいおい、ネタsageしたやつに礼を言うもんじゃないぞ。
0092デフォルトの名無しさんNGNG
>>91
ほんとはC++で作ったんですけどねえ。やっぱり無理かあ。ちぇ。
009378NGNG
>>83
もう一度参照設定を確認してみました。
MS DataBinding Collection VB6.0
MS DataEnvironment Instance 1.0
MS DataFormatting Object Library 6.0
ここら辺が全部(SP4)になってました。
SP5は開発後に(今年になって)ダウンロードしてます。
開発時の環境は今確認できませんが、ご指摘が「図星」だったかもしれません。
どうもありがとうございました。
009479NGNG
>>93
 直るといいね。ガンバレ(・∀・!
 んじゃ。
0095デフォルトの名無しさんNGNG
>>29
正直、その実装にどのような意味があるのかわからない。
俺だったら、必要なデータをテキストファイルに出力して、
それをエディタで読み込むが・・・。

ペーストとペーストの間に何か手入力したりするの?
やりたい事を実現する方法は、他にあったりしない?
それが仕様なら仕方無いけどね(^^;
0096デフォルトの名無しさんNGNG
すみません、
a(0)
a(1)
a(2)
・
・
・
みたいな感じで配列の要素をa(0)から最後の要素まで1行ずつ
ファイルに書き出していくにはどうすれば宜しいでしょうか?
0097VB厨房NGNG
Dim a(100) as integer

for(0..100)a(i)=a(i)+1;

File open処理 #2 ’テキトー

for i =0 to 99
print a(i) & vbCrlf ’vbCrLFがポイント
next

close #1
0098デフォルトの名無しさんNGNG
>>96

Dim a(100) as String '文字列型じゃないと駄目よん

.....

Open "hoge.txt" for output as #1
Print #1, Join(a,vbCrLf)
Close #1

…多分真似しない方が良いと思われ。
0099デフォルトの名無しさんNGNG
CSVファイルのデータを2次元配列に格納することはできないんでしょうか??
0100Kusakabe YouichiNGNG
>>99 デフォルトの名無しさん wrote:
> CSVファイルのデータを2次元配列に格納することはできないんでしょうか??

できますよ。
0101名無しさん@EmacsNGNG
>100
ということにしたいのですね。
0102デフォルトの名無しさんNGNG
>>99
データの形式が分からないけど、
テキストファイルとして1行ずつ読み込んで、
一時格納用配列にSplitで入れて、
それから目的の配列に入れたら?

泥臭い?
0103 NGNG
CSVを個々の変数に展開する場合
・Input
・Line Input後、自分でバラす
どっちが早いんでしょ?
0104デフォルトの名無しさんNGNG
>>103
ベンチマークソフト組んでみたら?
0105デフォルトの名無しさんNGNG
Inputで出来るならそっちの方が楽なので稼働日は「早く」なるけど、
LineInputじゃなくて全体(あるいはいくつかに分けて)を
一気に読みこんでバラした方が動作は「速い」かな。(作り方にもよるけど)
LineInputよりDB経由の方が速かったりもするよ。
0106103NGNG
レスありがよやんす。

>LineInputじゃなくて全体(あるいはいくつかに分けて)を
>一気に読みこんでバラした方が動作は「速い」かな。(作り方にもよるけど)

あー、そうですね。
チョト面倒臭いけど。

>LineInputよりDB経由の方が速かったりもするよ。

これどーゆー意味ですか?
最終的にはバラした後DBに登録するのが目的なんですが・
0107デフォルトの名無しさんNGNG
>106
だいたいのDBはCSVを直に取り込んだりリンクしたりする機能があるから
そっち使った方が早い場合もあるって事だと思う。
細かい入力チェックがやりにくくなるけどな。
0108:デフォルトの名無しさんNGNG
コマンドボタンを押すと効果音(.wav)が出るようにするには
どうすればよいのでしょうか。
あちこちのHPや本を調べて試してみましたが、どうしても上手くいきません。
ご存知の方がいらっしゃいましたら教えてやってください。
0109デフォルトの名無しさんNGNG
>>108
Private Sub Command1_Click

  PlaySound "hoge.wav", 0&, SND_ASYNC

End Sub
0110デフォルトの名無しさんNGNG
>>100-102
ありがとうございます。格納することはできたみたいです。
ただ、行数が未知のCSVファイル(Exel)のデータを
二次元配列に格納するには、どのようにすればよいでしょうか?
↓みたいにやっても上手くいかないみたいなんで…

For i = 0 To UBound(Book1.csv)
For j = 0 To 2
Line Input #1, vntBook1(i)(j)
Next
Next
0111110NGNG
間違えた…
For i = 0 To UBound(Book1.csv)
For j = 0 To 2
Input #1, vntBook1(i, j)
Next
Next

です。
0112かをるNGNG
スタックでプッシュとポップの分岐のプログラムってのをやってるんですが良くわかりません。
ちなみにそれは、適当な数字をA列に積み上げ、途中で数字をポップしてC列に積んでいくというものなんです。
スタックは5回で良いのですが。
0113デフォルトの名無しさんNGNG
>>110-111
Open "Hoge.csv" For Input as #1
Do Until EOF(1)
Input #1, vntBook(i,0), vntBook(i,1)
i = i + 1
Loop
Close #1
UBoundの引数は配列変数ね。
0114VB厨房@NGNG
>>110,111
俺の場合は、1行ずつ読み込んでから、","を
分解してそれを一旦dim buff as Stringに保存して、
あとから、一気に書き込むというやり方、(独学だけど)
それに君のそのソース、CSVのカンマ区切り文字が勝手に配列に入ってくるものと誤解してない?
For i = 0 To UBound(Book1.csv)
は、最後の行まで読み込むというのは分かるけど、
For j = 0 To 2
で、列のそれぞれの要素を読み込んでいないだろ。

>>112
PUSHと、POPって要するに、配列の移動でしょ?(あんましらん)
DIM A(10) as integer
DIM B(10) as integer
Static ai,bi as integer 'もしくはPublicでSUBの外に置く

PUSH 処理で
ai=ai+1
A(ai)=K

POP 処理で Bに積み上げ、Aは一つ省くので

bi=bi+1
B(bi)=A(ai)
ai=ai-1

タブン、君の場合、A,B,Cのスタックを積み上げている位置を
DIMとかで宣言して、位置を記憶してないかと思う。
Static及び、SUBの外側で、Public宣言するとよろしい。
0115デフォルトの名無しさんNGNG
>110
最初に改行コードの数(=行数)を数えてから読み込むとか。
BinaryでOpenしてから数えればン万行でも瞬時に数えられるよ。
0116112NGNG
すみません。書き方が悪かった様なので。
「データの格納と取り出しの分岐のプログラム」てのをやってまして、その前に
「inputbox関数を用いてデータをA列の1行目から5つ格納する。」
For num = 1 To 5
myval = InputBox("データを入力してください。")
Cells(num, 1) = myval
Next num
と言うのと、
「A列の1番下の行(5行目)のデータから1つずつ取り出してC列の1行目から順に移動する」
For num = 1 To 5
Cells(num, 3) = Cells(6 - num, 1)
Cells(6 - num, 1) = ""
Next num
と言うのをやったので、その延長のプログラミングと思われるのです。
まず、yourval = InputBox("データ格納の場合は1、データ取り出しの場合は2を入力してください。")
を出して、1か2を打ち、1の場合はmyvalでPUSHする数字を打つんです。
んで、PUSHはA列、POPした物ははC列に置くと言うのを5回やるのですが・・・。
難しいっす。
0117VB厨房@NGNG
>>116
ちょっと見たかんじでは、配列の使い方おかしくない?
宣言は
 Dim Cells(3,5)
こうしたら?君の場合おそらく
Dim Cells(5,3)
としてる。
 Dim Cells(行、列)
と考えたら分かりやすいかと思うが、
For num = 1 To 5
 Cells(num, 3) = Cells(6 - num, 1)
 Cells(6 - num, 1) = ""
Next num
だと、
num=1
Cells(num, 3) = Cells(6 - num, 1) 、1行目の3列目に、5行目の1列目を代入
num=2
Cells(num, 3) = Cells(6 - num, 1) 、1行目の3列目に、4行目の1列目を代入
num=3
Cells(num, 3) = Cells(6 - num, 1) 、1行目の3列目に、3行目の1列目を代入
num=4
Cells(num, 3) = Cells(6 - num, 1) 、1行目の3列目に、2行目の1列目を代入

となっている、配列がおかしい。
0118VB厨房@NGNG
ちょい訂正

num=1
Cells(num, 3) = Cells(6 - num, 1) 、1行目の3列目に、5行目の1列目を代入
num=2
Cells(num, 3) = Cells(6 - num, 1) 、2行目の3列目に、4行目の1列目を代入
num=3
Cells(num, 3) = Cells(6 - num, 1) 、3行目の3列目に、3行目の1列目を代入
num=4
Cells(num, 3) = Cells(6 - num, 1) 、4行目の3列目に、2行目の1列目を代入
0119VB厨房@NGNG
すまん、配列はこれでもいいか。?

受け取った数字を判定して、PUSHかPOPするとしたら。
yourval = InputBox("データ格納の場合は1、データ取り出しの場合は2を入力してください。")
受け取った文字を
if yourval="1" then
処理
elseif yourval="2" then
処理
end if

とすればいいだけじゃないの?
0120デフォルトの名無しさんNGNG
初心者です。お願いします。
jpgの画像をbmpに変換させたいのですが、
どうすればいいのでしょうか?
やさしく解説していただければと思います。
検索したのですが、よくわからなくて・・・
0121デフォルトの名無しさんNGNG
>>120
LoadPictureとSavePictureではいかんの?使い方はMSDN参照。
0122☆☆☆☆NGNG
仕事ばっかりで疲れたー。
3徹中です。目閉じたら寝ちゃいます。

クリスマスイヴあたりは
ロマンチックな神戸行って
ルミナリエとか行きたいなぁ
0123デフォルトの名無しさんNGNG
>>122
誤爆?
0124デフォルトの名無しさんNGNG
>>123
寂しいプログラマの夢じゃねーの?
疲れてるんだろ。寝かせておいてやろうぜ。

イイ夢見ろよ……。
0125120NGNG
121さん
ありがとうございます。調べてみます。
0126ハムはむNGNG
API関数を利用してモニタの電源を切る方法を調べておりますが、
見つからずに困っております。

御存知でしたら教えて頂けないでしょうか。
0127デフォルトの名無しさんNGNG
>>126
SetMonitorPowerState()かな?
詳しくはMSDN参照。
0128ハムはむNGNG
SetMonitorPowerState()というのはAPI関数の事なのでしょうか?
済みません、素人なので意味が分かってません。
また、MSDNで参照してみましたが、SetMonitorは「使用中のモニタタ
イプを設定する」となっておりました。
見ているところが根本的に違っているのでしょうか?
0129デフォルトの名無しさんNGNG
>>128
モニタの電源を切るのはOS側がACPIを管理してやってるっぽいので
ソフト側からは無理なのではないかな、と。うろ覚えですが。

あと、127はネタです。sageてるし。
そんなAPIあったら使ってみたい。
0130デフォルトの名無しさんNGNG
>>128
モニタの電源コードにスイッチつけて、
シリアルでもパラレルでもいいからスイッチを操作する。
0131デフォルトの名無しさんNGNG
>>130
いっそ仕様を拡張してモニタの電源 "も" 切るようにしたらどうだろう。
0132デフォルトの名無しさんNGNG
どこぞからのコピペ
>画面の設定でモニタの能力を超える解像度設定を行えば、真っ黒になりますが
0133デフォルトの名無しさんNGNG
少し外れるがこんなのもあるな

ttp://www.vbvbvb.com/jp/gtips/0651/gSystemParametersInfoSpiSetPoweroffTimeout.html
0134デフォルトの名無しさんNGNG
これも少し外しているか

ttp://www.vbvbvb.com/jp/gtips/0651/gSystemParametersInfoSpiSetPoweroffActive.html
0135デフォルトの名無しさんNGNG
少し近くなったかな

ttp://www.vbvbvb.com/jp/gtips/0301/gSetSystemPowerState.html
0136デフォルトの名無しさんNGNG
Putting Your Monitor in Power Saver Mode

To turn off the monitor:

SendMessage(AnyForm.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2&)

Standby monitor:

SendMessage(AnyForm.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, 1&)

To turn on the monitor:

SendMessage(AnyForm.hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, -1&)

Where

Const WM_SYSCOMMAND = &H112
Const SC_MONITORPOWER= &HF170
0137デフォルトの名無しさんNGNG
ADOにてレコードセットを作成し1件ずつ表示しています。
取ってくるデータが以下のようにあったとします。

AA
BB
CC
DD

カレントがDDの時にMoveNextすると、EOFがTrueになりますが
CCからMoveNextして、DDを表示した時点でEOFをTrueにしたいのですが
方法が分かりません。そもそも無理なのでしょうか?
0138デフォルトの名無しさんNGNG
やっと見つけたっぽい ttp://member.nifty.ne.jp/my2project/vb/souko.txt

================================================================================
モニタの電源を切る(モニタ省電力に対応した環境の場合のみ)
================================================================================

---------以下フォームモジュールへ記述
Option Explicit

Private Sub Form_Load()

Timer1.Interval = 3000
Timer1.Enabled = True

End Sub

Private Sub Timer1_Timer()

Timer1.Enabled = False
Call Y_PowerOffMonitor(Me.hWnd)

End Sub


---------以下標準モジュールへ記述

Option Explicit

'ウインドウにメッセージを送る
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Const WM_SYSCOMMAND = &H112&
Public Const SC_MONITORPOWER = &HF170&

Public Sub Y_PowerOffMonitor(hWnd As Long)
'************************************************************
'機能 : モニターの電源を切る
'************************************************************

Dim sw As Long

' sw = 1 '省電力モード
sw = 2 '電源を切る

Call SendMessage(hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, ByVal sw)

End Sub
0139デフォルトの名無しさんNGNG
>>137
その処理の必要性について詳細をキボンヌ。
どういうことを実現したいの?
0140デフォルトの名無しさんNGNG
>>137
処理前に SELECT COUNT(*) でレコード件数取得後、その件数分だけループすれば?
あえて提供されている方法を使わない意図は全く不明だが。
0141デフォルトの名無しさんNGNG
>>137
ムリがどうかはともかく、EOFの使い方として間違っていると思います。

カレントレコードが最後のレコードかどうか調べるなら、
AbsolutePosition = RecordCount かを判定すればいいとかと。
ただし RecordCount はカーソルタイプによっては使用できないので要注意です
が。
0142137NGNG
>>139

AA
BB
CC
DD


CCからMoveNextし、DDを表示した時点で「次へ」ボタンの「Enabled = False」にしたいんです。
現状だとCCからMoveNextしてカレントがDDに移った時点では、「Enabled = True」なので
「次へ」ボタンが押せてしまいます。
カレントがDDの時に、「次へ」ボタンを押してやっとEOFになり
「Enabled = False」になるのですが、1タイミング遅いんです。
EOFで判定するのが間違いなのでしょうか。
0143デフォルトの名無しさんNGNG
>>147
了解。
データを取得してからもう一度MoveNextして、EOFで無ければそのまま。
EOFならボタンをEnable Falseする。
そのあとMovePreviousする。これで希望通りにはなる。

でも、非効率的な処理だしレコード開きっぱなしはよくないかも知れないので、
一度レコードの中身をすべてType型変数に格納してそれを表示するようにして、
最終データかどうかをメンバー変数に持たせるなり、レコード数を変数に保持しておいて
表示時にカウンタなどで判別するほうがいかも。
0144137NGNG
>>143さんの考え方で出来ました!
しかし、いきなりDDレコードが呼び出された時等に不具合がありましたので
>>141さんの「AbsolutePosition」で判定して「Enabled = False」に出来ました。

逆のMovePrevious場合も同じ考え方で出来ました。
ありがとうございました。

P.S. 143さんの「Type型変数に格納し〜〜」の部分なのですが
漏れには理解不能のため非効率な処理でいきました。
0145141NGNG
>>144
>141さんの「AbsolutePosition」で判定して「Enabled = False」に出来ました。

お役に立てて幸いです。

> P.S. 143さんの「Type型変数に格納し〜〜」の部分なのですが
> 漏れには理解不能のため非効率な処理でいきました。

ADO の recordset で処理するのではなく、ユーザー定義型の配列か何かに
すべて読み込んで、自前で処理しろということではないかと。
0146143NGNG
>>145
そのことです。
補足ありがとうございました。
0147デフォルトの名無しさんNGNG
>>113-114
お答えいただきありがとうございます。
上の方にCSVファイルの中身を二次元配列に入れる方法はおかげでわかったのですが、
今度はCSVファイルのデータをコレクションのプロパティに格納する方法について
アドバイス頂けないでしょうか。何度もすみません(汗

日にち  終了  開始
4    8   2
7    15   6
10    13   11
・
・
・
↑こんな感じの行数未知・列数3のCSVファイル(Scedule.csv)のデータを…
Public Date As Integer '番号の値が入る
Public Start As Integer '開始の値が入る
Public Length As Integer '長さ(終了−開始+1の値が入る)
↑のように作成したSceduleクラスの各プロパティに一行ずつ格納したいのです。
(1行目の「日にち」「終了」「開始」以外)

続きます
0148デフォルトの名無しさんNGNG
Dim Scedules As New Collection '日程コレクション
Dim NewScedule As Scedule '新規作成した日程
Dim i As Integer '繰り返し処理用カウンタ変数
i = 1

Open "C:\WINDOWS\デスクトップ\Scedule.csv" For Input As #1
Do Until EOF(1)
'新規日程オブジェクト作成
Set NewScedule = New Scedule

'値をセット
Input #1, NewScedule.Date,  ’この辺りの記述がわかりません。。

'コレクションへ新規日程を追加
Scedules.Add NewScedule

Loop
Close #1

↑このようにとりあえずコードを書いてみたのですが…

Scedules(0).Dateに4、
Scedules(0).Startに2、
Scedules(0).Lengthに7
Scedules(1).Dateに7、
Scedules(1).Startに6、
Scedules(1).Lengthに10…というようにCSVファイルの最後の行のデータまで
格納するにはどうすれば良いでしょうか。
長いうえに分かりにくくて済みませんが、どうか助言お願い致します。
0149”NGNG
すいません。軽い質問です。
文字「”」を参照するときはどう記述すればいいんでしたっけ?

if XXX = """" Then
でOK?
0150デフォルトの名無しさんNGNG
>>149
そのとーり。
0151”NGNG
ありがと
■ このスレッドは過去ログ倉庫に格納されています