トップページ⇒tech
1001コメント307KB

VBプログラマ質問スレ(6.0以前) Part51

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/01/28(日) 10:57:31
ここは Visual Basic 〜6.0 の質問スレです。
質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、
「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。

VB.NETは別物なので専門スレで、VBA、APIの質問もそれぞれのスレで。

○ 質問者の心得
 一.質問する前にMSDNやGoogle、過去ログにも目を通してみる。
 二.VBScript、インストーラーなどはこのスレでOK。
 三.質問は第三者にもわかりやすいよう簡潔かつ具体的に。
 四.荒らしは相手しない。

○ 回答者の心得
 一.答えられない質問は無駄に罵倒せずスルー。無理するな。
 二.代用法を強制しない。
 三.回答する上で必須ではない情報をむやみに聞き返さない。
 四.荒らしは相手しない。
 五.VB情報募集中。
 六.回答は質問者が理解できるよう具体的に。

MSDN Online Japan ホーム
 http://www.microsoft.com/japan/msdn/default.asp
Visual Studio 6.0 Service Pack 6
 http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx
Google
 http://www.google.co.jp/

※「まず自分で調べる」クセを身につけよう。
0253デフォルトの名無しさん2007/02/23(金) 14:45:55
>>247
IFで分岐させればいいじゃない
0254デフォルトの名無しさん2007/02/23(金) 15:44:33
テキストファイルより読み込んだ文字列gstrPrinter(絶対パス&プリンタ名)の
存在チェックをしたいのですが、直接存在チェックを行う方法はあるでしょうか?
関数があるとは思うのですが見つけられないのです。

下記の処理ではローカルマシンに登録されているプリンタが多いとき困るのですが、
ネットで探してもこの方法しか見つけれません。
For Each objprinter In Printers
If gstrPrinter = objprinter.DeviceName Then
blnRet = True
Exit For
End If
Next

この方法以外でありましたら、よろしくお願いします。
0255デフォルトの名無しさん2007/02/23(金) 15:49:23
SetDefaultPrinter()がエラーになったらプリンターが
存在しない。でいいんじゃない?
02562542007/02/23(金) 16:10:48
レスありがとうございます。
SetDefaultPrinter()は通常使うプリンタを取得する関数ですよね。

ただ、今回の処理はどのプリンタを使うかを
テキストファイルより読み込んだ文字列にて決めさせるので、
SetDefaultPrinter()ではだめなのです。

常駐プログラムの中で
 プリンタの存在チェック○→ファイルの印刷→ファイルを削除
 プリンタの存在チェック×→ファイルを移動(退避)
という処理を行いたいのです。
よろしくお願いします。
0257デフォルトの名無しさん2007/02/23(金) 16:17:42
たいして重い処理じゃないだろ
サンプルどおりで良し
0258デフォルトの名無しさん2007/02/23(金) 16:31:53
>>256
SetDefaultPrinter()は通常使うプリンタを取得、ではなくてセットする関数です。
02592542007/02/23(金) 16:45:26
>>258
ありがとうございます。
通常使うプリンタを変更するのは上手くないとのことで、
どちらにしろ使いたくないです。

>>254
間違えて読んでましたすみません。

>>256
結局今のままで行うことにしました。

ありがとうございました。
0260デフォルトの名無しさん2007/02/23(金) 17:27:01
プリンタの一覧に、共有プリンタがあると悲惨なことにw
0261デフォルトの名無しさん2007/02/23(金) 23:54:39
VB6のディストリビューションウィザードでパッケージ化されたアプリケーションは、セットアップ(SETUP.EXE等)で
インストールされるわけですが、そのセットアップ時、アプリケーションユーザが任意に指定するインストール領域を、
アプリケーション側で環境変数として取り込むのはどうすればいいですか?

つまりは、VB6のディストリビューションウィザードで作成されるセットアップ(SETUP.EXE等)は、
環境変数やレジストリキーを、VBアプリケーションにパラメーターとして渡すための「約束ごと」を、
どこで説明てるかどうかということもあるんですが。
0262デフォルトの名無しさん2007/02/24(土) 00:15:53
せっかく質問するなら「書き込む」ボタンをクリックする前に
少しは文章を推敲しようよ。
エスパーでもお手上げだよ、そんな文章w
0263デフォルトの名無しさん2007/02/24(土) 00:18:54
ヒント:外国籍
0264デフォルトの名無しさん2007/02/24(土) 00:23:40
わかりました。
App.Path(予約語)をstring変数に代入すればいいってことですね。

それにしても、なんで"App.Path"で検索してもVBヘルプ(MSDN)で出てこないのか?
こんな環境変数の予約語すら、ヘルプのキーワードで検索できないって・・・・・
呆れるね。やっぱ、マイク?ソフト
0265デフォルトの名無しさん2007/02/24(土) 00:38:03
2CHの、教えモドキスレって、教える能力ないくせに、相手が何も知らないだろうなんて高くくって、
偉そうな口を利く能無しどもの棲家が多いって聞いてるが、ここもその一つだということは理解できた。

1、>VB6のディストリビューションウィザードでパッケージ化されたアプリケーションは
この日本語とMSの用語が理解できないなら、VB6.0の説明なんかできっこないでしょうが。

2、>セットアップ(SETUP.EXE等)でインストールされるわけですが
同上
3、>そのセットアップ時、アプリケーションユーザが任意に指定するインストール領域を、
同上、これが理解できなら、VB6.0でパッケージされたアプリケーションをセットアップのテストしたこともない
のにいっぱしの「VB説明能力を持ってる。」なんて偉ぶってるだけ。
4、>アプリケーション側で環境変数として取り込むのはどうすればいいですか?
1に、同じ
これが理解できないということは、VBとかのローカル言語以前の問題で、
システム開発そのものをしたことがないっていうこと。

>つまりは、VB6のディストリビューションウィザードで作成されるセットアップ(SETUP.EXE等)は、
>環境変数やレジストリキーを、VBアプリケーションにパラメーターとして渡すための「約束ごと」を、
>どこで説明てるかどうかということもあるんですが。
1に同じ

0266デフォルトの名無しさん2007/02/24(土) 00:50:01
そういう、石に躓いても「俺様を躓かせる石が悪い」って感じる性格だから進歩がないんだよ、たぶん。
ま、こういう人になに言ってもムダだろうけどね。
0267デフォルトの名無しさん2007/02/24(土) 03:31:50
>>265
「初夜はどうでした!?」なんてお下品な質問をされ、なんとも言えない、
いや〜な気分で飛行機に乗った」まで読んだ。
0268デフォルトの名無しさん2007/02/24(土) 06:18:56
>>265
君の言うことは正論なんだが
悲しいかなこのスレにいるカスの心には届かんよw
0269デフォルトの名無しさん2007/02/24(土) 06:50:24
いやぁ、自分で自分の書き込みを正論と言われてもねぇ
0270デフォルトの名無しさん2007/02/24(土) 08:54:09
>>265
お母さんがここに来たら駄目だって教えてあげたでしょ!
病院の先生も心配してます!もう、帰りますよ!


皆さん、うちの>>265がご迷惑をおかけしまして、すみません。J('A` )し
0271デフォルトの名無しさん2007/02/24(土) 10:11:17
>>264
PathとかAppとかで探せばMSDNで出てくる気がする
0272デフォルトの名無しさん2007/02/24(土) 10:28:03
>>271
そっとしておいてやれよ。
これ以上弄るのは余りに哀れすぎる。
0273デフォルトの名無しさん2007/02/24(土) 15:43:07
この処理でループの中の処理をしてくれないのですが、どこが悪いのでしょうか?

If State2 = icResponseCompleted Then

GetData = Inet2.GetChunk(2048, icString)

Soucetext2 = Soucetext2 & GetData
Do While GetData = ""
GetData = Inet2.GetChunk(2048, icString)
Soucetext2 = Soucetext2 & GetData
Loop

End If
0274デフォルトの名無しさん2007/02/24(土) 16:08:56
頭
0275デフォルトの名無しさん2007/02/24(土) 16:11:32
フォルダ内にファイルが1000個ほどあって、それぞれ数十MBのそれなりに大きいファイルです。
このファイルのファイル名だけを1つずつ取得したいのです。

やり方は色々あるとは思います。
Dir関数やFSOやAPIや。

ファイルがフォルダ内に大量にある、そしてそれぞれのファイルが大きいことで
やはりパフォーマンスにかなり影響あるでしょうか?
0276デフォルトの名無しさん2007/02/24(土) 16:20:25
あるわけがないが、やってから質問しろよ
プログラマ以前に人間失格なんだよ
0277デフォルトの名無しさん2007/02/24(土) 16:28:12
なんで試さないのさ?
0278デフォルトの名無しさん2007/02/24(土) 16:43:02
死ねよ
0279デフォルトの名無しさん2007/02/24(土) 16:50:13
以下のDimの宣言でVariantにした場合、Set fs = Nothingではメモリ解放されないのでしょうか??
Dim fs As VariantのところをDim fs As Objectにしないとだめでしょうか??
教えてください。

(参考プログラム)
Public Sub Test()

Dim fs As Variant

Set fs = CreateObject("Exce.Application")
:
  (省略)
:
Set fs = Nothing

End Sub
0280デフォルトの名無しさん2007/02/24(土) 17:07:12
fs.Quit
0281デフォルトの名無しさん2007/02/24(土) 20:40:02
実行開始してそのformが開いた時に時間が来たらラベルに
今100秒経過しました
みたいに表示したいんだけど
Label1.Caption = "今m秒経過しました"
のどこがおかしい?
ちなみにmはintegerで宣言した定数で
timerで1秒ごとに変わっていく値です
0282デフォルトの名無しさん2007/02/24(土) 20:46:52
Label1.Caption = "今" & CStr(m) & "秒経過しました"
0283デフォルトの名無しさん2007/02/24(土) 20:47:35
Label1.Caption = "今" & CStr(m) & "秒経過しました"
0284デフォルトの名無しさん2007/02/24(土) 20:52:41
Label1.Caption = "今" & CStr(m) & "秒経過しました"
02852812007/02/24(土) 20:53:07
どうもありがとう
解決しました
02862812007/02/24(土) 20:54:34
どうもありがとう
解決しました
02872812007/02/24(土) 21:08:30
もう一つ聞きたいんですが
例えば10分間の文章入力作業を行わせるとして
それをシステム実行停止にしても何て入力したかを保存しておき
かつ、2分間ごとに区切って
最初の2分間はここまで、次の2分間はここからここまで入力された
みたいな感じで、あとで見たときにそのようなことが分かるように
記録を残しておくようなことって可能ですか?
02882812007/02/24(土) 21:10:54
もう一つ聞きたいんですが
例えば10分間の文章入力作業を行わせるとして
それをシステム実行停止にしても何て入力したかを保存しておき
かつ、2分間ごとに区切って
最初の2分間はここまで、次の2分間はここからここまで入力された
みたいな感じで、あとで見たときにそのようなことが分かるように
記録を残しておくようなことって可能ですか?
0289デフォルトの名無しさん2007/02/24(土) 21:18:47
Label1.Caption = "今" & CStr(m) & "秒経過しました"
0290デフォルトの名無しさん2007/02/24(土) 21:20:52
連投すまん、
Janeでカキコしても失敗と出てて
気づかず同じこと書いてしまった

>>287
可能だけどソース書くにはちと長くて面倒なので
俺は書かない
0291デフォルトの名無しさん2007/02/24(土) 21:22:04
>>288
考え方次第でできるだろうけど
最初の2分の時点の文章から次の二分の文章で必ず追加されているだけでもなく
削除されている可能性もあるわけだから
とりあえずメンドクサク考えずに
2分ごとで、その時点の文章全部保存しちゃえば?
02922812007/02/24(土) 21:30:54
>>291
2分ごとで、その時点までに入力された文章を保存してしまう
というのは、10分の作業の場合だったら
計5個の記録ファイルが残るということですか?
0293デフォルトの名無しさん2007/02/24(土) 21:40:24
>>292
別にファイルに残さなくてもいいし(変数や、コレクションにでも保存すればいいだろうし)
1つのファイルにまとめてもいいし
5つにしてもいいし

そのあとの復帰の仕方次第でいろいろ変わると思うけどなぁ…

なのでレスはそういうやり方もあるね ってことで
02942812007/02/24(土) 21:57:20
>>293
すいません、ありがとうございます

実は入力された文章を保存する方法自体がまだよくわからくて・・・
上の方で似たような質問をされてる方はいるんですが・・・

Open "E:\mydata\sfile.dt" For Append As #1
Write #1, Today; "click(Command1)"
Close

このように、何時何分にどのCommandボタンを押したか
というのを指定したフォルダの中にテキストファイルで記録しておく
みたいなログを残す機能は作ったことはあるんですが
これの応用みたいな感じで、「実行中に入力された文字を記録しておく」
という機能は作れるのでしょうか?
色々調べてもよく分からないので、もし分かる方がいたらよろしくお願いします
0295デフォルトの名無しさん2007/02/24(土) 22:00:58
この世にはキーロガーなんてのもあるんだし
可能か不可能かで言えば可能だよ
いっそキーイベントでログ吐くとかしたら
0296デフォルトの名無しさん2007/02/24(土) 22:24:15
プログラムの途中で待機時間を設定するにはどうすればいいですか?
02972812007/02/24(土) 22:47:48
Open "E:\mydata\sfile.dt" For Append As #1
Write #1, Today; "click(Command1)"
Close
の2行目を
Write #1, Text2.Text
に変えたらテキストファイルに入力内容の記録は残るようになったんですが
例えばaaaaaと入力したら
"a"
"aa"
"aaa"
"aaaa"
"aaaaa"
のように記録が残ってしまうんですが
普通にaaaaaとだけ残すためにはあと何が足りないのでしょうか?
0298デフォルトの名無しさん2007/02/24(土) 22:49:37
ファイル上書き
0299デフォルトの名無しさん2007/02/24(土) 23:09:23
自演乙
03002812007/02/24(土) 23:29:06
>>298
ファイル上書きというのはコード上に何か追加したらできるのですか?
0301デフォルトの名無しさん2007/02/24(土) 23:39:17
書く度にOutputモードでオープンクローズする
03022812007/02/24(土) 23:47:52
ありがとうです
0303デフォルトの名無しさん2007/02/25(日) 00:03:53
VBの条件文で使いたくて
aとbが等しくない場合はcの処理を行う
のような「等しくない」の表現を
≠で書こうとしてもエラーが出てしまうんだが
こういう記述の場合何かVB特有の表現方法はある?
0304デフォルトの名無しさん2007/02/25(日) 00:08:12
if not a = b then
0305デフォルトの名無しさん2007/02/25(日) 00:09:14
>>304
サンクス
メチャクチャ基礎的だったんだね
すんません
0306デフォルトの名無しさん2007/02/25(日) 00:11:12
≠で書ける言語あるのかよw
0307デフォルトの名無しさん2007/02/25(日) 00:23:24
Cじゃね?
0308デフォルトの名無しさん2007/02/25(日) 00:27:47
Cは
!=
0309デフォルトの名無しさん2007/02/25(日) 00:30:52
<>
03102812007/02/25(日) 00:38:42
できたと思ったらまた問題発生です
Open "E:\mydata\sfile.dt" For Output As #1
Write #1, Text2.Text
Close
にしたら普通に入力した文字は保存されるのですが
入力作業時に文字を打ち込む時の感覚がスローモーションぽく
なってしまいます・・・
これは何が問題なんでしょうか?
0311デフォルトの名無しさん2007/02/25(日) 01:04:57
いちいち開いちゃ閉じ開いちゃ閉じしてるからじゃないの
何かあるたびに聞きにこないでぎりぎりまで踏ん張ってみれ
0312デフォルトの名無しさん2007/02/25(日) 04:15:30
Visual C++6.0で作成されたDLLの引数を解析しているのですが
VB6の構造体からC++のclassのメンバ変数への引渡しがどうしても
上手くいきません

他の言語の構造体からは引き渡せてるのですが、VBでは不可能なの
でしょうか?

色々調べましたが上記のような例が掲載されている文献が見当たら
なかったもので・・・
0313デフォルトの名無しさん2007/02/25(日) 05:49:35
VB6.0って買えなくなって久しいのに
なんでこんなに質問あるんだろ?
しかも初心者っぽい質問まであるし
0314デフォルトの名無しさん2007/02/25(日) 09:07:07
>>310
スレッド起こしてそっちでやるんだな
0315デフォルトの名無しさん2007/02/25(日) 09:44:27
>>312
そのDLLに渡すためのDLLを作るんだ。
0316デフォルトの名無しさん2007/02/25(日) 12:23:23
>色々調べましたが上記のような例が掲載されている文献が見当たら
>なかったもので・・・
二重の嘘だなw
0317デフォルトの名無しさん2007/02/25(日) 12:42:40
VBのEvalってしょぼすぎじゃない?
0318デフォルトの名無しさん2007/02/25(日) 14:14:02
>>313
意外とVBAの中での話だたりしてw

つうか、VBってMSDNからタダで落とせないのかな?
0319デフォルトの名無しさん2007/02/25(日) 15:43:27
>>318
今確認してみたらサブスクライバダウンロード出来るね。
掲載日時
 2006-09-08 22:24:08 (UTC)
ファイル
 jp_vb6_ent_cd1.iso ISO-9660 CD Image
ファイル サイズ
 354 MB
SHA-1 ハッシュ
 81872af7762f6a270b0c3d88178e861460a07372
0320デフォルトの名無しさん2007/02/25(日) 15:44:07
あ、ハッシュは載せないほうが良かったかorz
0321デフォルトの名無しさん2007/02/25(日) 16:50:37
>>313
VB.NETからCOM使うのが大変だからかな
0322デフォルトの名無しさん2007/02/25(日) 16:52:23
>>317
なにが不満?
0323デフォルトの名無しさん2007/02/25(日) 18:15:04
>>322
eval("MsgBox ""Hello""")
なんでこれが動かないの?
文字列か数値を返す関数しか呼べないなんて。
0324デフォルトの名無しさん2007/02/25(日) 18:23:52
つScriptControl
0325デフォルトの名無しさん2007/02/25(日) 18:42:29
VB6.0ってコントロールの追加できる?
自分のやつは画面左側のバーに10個くらいしかないんだけど
ネット見てたら6.0って書いてあるのにその倍くらいの数の
コントロールが表示されてるっぽかったから
色々探したけどできないんだよね・・・
0326デフォルトの名無しさん2007/02/25(日) 18:45:25
今更その程度こと知らないならVB6使う意味はまるでないと思うんですが。。。
もうサポートフェーズも終了した開発ツールなんだけどw
0327デフォルトの名無しさん2007/02/25(日) 19:12:19
インストーラー自体もXPで日本語でユーザ名登録されてたら終わりだから
よほどの事が無い限り使わない方がいいな
0328デフォルトの名無しさん2007/02/25(日) 19:27:09
>>327
その程度は自分で設定すれば済む話じゃないか
0329デフォルトの名無しさん2007/02/25(日) 19:53:35
まぁ保守案件ありまくりでVista対応させられる企業もあるだろうし・・・・
企業であれば仕方ないかもしれないな…・

個人でこれから始めようとするのにVB6はちょっと・・・とは思うけど

でも、いきなりドトネトやってクラスの海でおぼれるよりは・・・
と考えればそう悪いものではないかも
VBAにも繋がることだしさ

お勧めと言われればとりあえずC#進めるけどさ・・・
0330デフォルトの名無しさん2007/02/25(日) 20:27:48
今一番主流の言語ってなんだろう???
0331デフォルトの名無しさん2007/02/25(日) 20:32:59
>>330
スレ違いとおもふ
0332デフォルトの名無しさん2007/02/25(日) 22:48:04
なんですと
0333デフォルトの名無しさん2007/02/25(日) 23:55:54
主流はVB6だろう。
そんな事聞くまでも無いだろ・・
0334デフォルトの名無しさん2007/02/26(月) 00:08:18
このスレいかれた奴がいるな6.0以前の意味がわかってないだけとは思えないんだけど
主流がどうかとかもどうでもいいしw
0335デフォルトの名無しさん2007/02/26(月) 09:33:45
このスレの主流はVB6.0だろ。
今出回ってるPCのほとんどにはVB6.0以前が入ってるんだぞ。

VBAとしてだが。
0336デフォルトの名無しさん2007/02/26(月) 10:06:41
バッチファイルの次ぐらいにレガシー
0337へたれです2007/02/26(月) 10:16:08
VB6.0で開発してるソフトのDBをmdbとしたのですが、
このソフトはアクセスの入ってないPCに導入しても動くものなんでしょうか?
0338デフォルトの名無しさん2007/02/26(月) 10:18:46
mdacが入ってれば動くんじゃない?
0339へたれです2007/02/26(月) 10:40:06
mdacですね。
ありがとうございます。
0340デフォルトの名無しさん2007/02/26(月) 12:21:45

ここは普通にVBのランタイムを勧めるべきじゃないの?
0341デフォルトの名無しさん2007/02/26(月) 21:11:29
むしろDAOで行けよwwww
MDBならそっちのがはえぇぞwwww

後でSQL鯖にしますとか言われたらアボーンだけどw
0342デフォルトの名無しさん2007/02/26(月) 22:02:44
やれやれ。
0343デフォルトの名無しさん2007/02/26(月) 22:18:07
すいません、VB2で教えてくだっさい
本を読んで勉強してるんですが、下のところで引数がなんとかってエラーが出てしまいます

Call Msgbox("Hello World!!",%d);

Hello World!!をかえてみたり、本をはじめから読み直してるんですがよくわかりません…
0344デフォルトの名無しさん2007/02/26(月) 22:23:28
>>343
printf ("Hello World!!",%d);

だろ。
帰ったら復習しとけよ。
0345デフォルトの名無しさん2007/02/26(月) 22:23:44
>>343
VB2 ずいぶんふるいの使ってるね。Windows 3.1用?
0346デフォルトの名無しさん2007/02/26(月) 22:41:44
VB 6.0で、ホイールマウスを使っています。
コードを表示しているときにホイールが利くといいなーと思うのですが、どなたか実現されている
方、いませんか?
0347デフォルトの名無しさん2007/02/26(月) 22:43:41
英語版VB6だとホイール使えたっけな
0348デフォルトの名無しさん2007/02/26(月) 22:48:23
MSからアドインでてるから、取得汁。
0349デフォルトの名無しさん2007/02/26(月) 23:14:40
>>348
http://support.microsoft.com/kb/837910/ja にありました。
どうもありがとうございました。これでだいぶ快適になります。
0350デフォルトの名無しさん2007/02/27(火) 00:25:18
OutlookExpressのメール一覧からドラッグされたメールの情報って取得できますか?
一度Explorerにコピーしてからなら普通にファイルとして取得できるのですが、
直接ドラッグして、OLEDragDropイベントで捕まえようとすると
DataオブジェクトのFilesが「データの形式が一致しません。」となってエラーになってしまいます。
0351デフォルトの名無しさん2007/02/27(火) 12:54:10
それよりFontLinkが使いたいな。Courier Newでないと気分が乗らないよw
0352デフォルトの名無しさん2007/02/27(火) 17:12:24
>>323
eval("MsgBox(""Hello"")")
■ このスレッドは過去ログ倉庫に格納されています