VBプログラマ質問スレ(Ver.6.0 まで) part57at TECH
VBプログラマ質問スレ(Ver.6.0 まで) part57 - 暇つぶし2ch1:デフォルトの名無しさん
11/04/30 01:50:27.76
ここは Visual Basic ~6.0 の質問スレです。
質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、
「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。

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

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

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

MSDN Online Japan ホーム
 URLリンク(www.microsoft.com)
Visual Studio 6.0 Service Pack 6
 URLリンク(msdn.microsoft.com)
Google
 URLリンク(www.google.co.jp)

※「まず自分で調べる」クセを身につけよう。

2:デフォルトの名無しさん
11/04/30 01:50:49.55
Part 1 URLリンク(piza2.2ch.net)
Part 2 URLリンク(piza2.2ch.net)
Part 3 URLリンク(piza2.2ch.net)
Part 4 URLリンク(pc.2ch.net)
Part 5 URLリンク(pc.2ch.net)
Part 6 URLリンク(pc.2ch.net)
Part 7 URLリンク(pc.2ch.net)
Part 8 URLリンク(pc.2ch.net)
Part 9 URLリンク(pc.2ch.net)
Part10 URLリンク(pc.2ch.net)
Part11 URLリンク(pc.2ch.net)
Part12 URLリンク(pc3.2ch.net)
Part13 URLリンク(pc3.2ch.net)
Part14 URLリンク(pc3.2ch.net)
Part15 URLリンク(pc3.2ch.net)
Part16 URLリンク(pc3.2ch.net)
Part17 URLリンク(pc3.2ch.net)
Part18 URLリンク(pc3.2ch.net)
Part19 URLリンク(pc3.2ch.net)
Part20 URLリンク(pc2.2ch.net)
Part21 URLリンク(pc2.2ch.net)
Part22 URLリンク(pc2.2ch.net)
Part23 URLリンク(pc2.2ch.net)
Part24 URLリンク(pc2.2ch.net)
Part25 URLリンク(pc2.2ch.net)
Part26 URLリンク(pc2.2ch.net)
Part27 URLリンク(pc2.2ch.net)
Part28 URLリンク(pc2.2ch.net)
Part29 URLリンク(pc2.2ch.net)

3:デフォルトの名無しさん
11/04/30 01:51:19.26
Part30 スレリンク(tech板)
Part31 スレリンク(tech板)
Part32 スレリンク(tech板)
Part33 スレリンク(tech板)
Part34 スレリンク(tech板)
Part35 スレリンク(tech板)
Part36 スレリンク(tech板)
Part37 スレリンク(tech板)
Part38 スレリンク(tech板)
Part39 スレリンク(tech板)
Part40 スレリンク(tech板)
Part41 スレリンク(tech板)
Part42 スレリンク(tech板)
Part43 スレリンク(tech板)
Part44 スレリンク(tech板)
Part45 スレリンク(tech板)
Part46 スレリンク(tech板)
Part47 スレリンク(tech板)
Part48 スレリンク(tech板)
Part49 スレリンク(tech板)
Part50 スレリンク(tech板)
Part51 スレリンク(tech板)
Part52 スレリンク(tech板)
Part53 スレリンク(tech板)
Part54 スレリンク(tech板)
Part55 スレリンク(tech板)
Part56 スレリンク(tech板)

4:デフォルトの名無しさん
11/04/30 01:52:22.06
クラス間の依存性は減るけど、XMLへの依存が強いってことは何の問題もないの?

5:デフォルトの名無しさん
11/04/30 01:53:44.88
素人は黙ってネンネしなさい

6:デフォルトの名無しさん
11/04/30 01:57:13.01
>>1000
だからDIはそれを使いやすくフレームワークに
まとめた仕組みのことを言うんだよ。

具体的にはオブジェクトの生成部分を
コード内に書かないでフレームワークに任せる。

多態を使ってても、オブジェクトの生成は
コードに書いてしまうだろ。それじゃだめだってこと。

7:デフォルトの名無しさん
11/04/30 02:02:05.11
>>4
依存をなくすのではなくて依存を分離するのが目的。
クラスから依存が減る。それはなくなるという意味ではなく
XMLに分離するということ。

あなたの言っていることは問題ではなくて、
そもそもそういうふうにしたい事、つまり目的だよ。

8:デフォルトの名無しさん
11/04/30 02:09:57.79
なるほどね

9:デフォルトの名無しさん
11/04/30 02:17:09.59
こういう感じのとは違うん?

Private Sub Command1_Click()
Dim fso As Object
Dim objname$, pth$
objname = "Scripting.FileSystemObject"
Set fso = CreateObject(objname)
pth = CallByName(fso, "BuildPath", VbMethod, "c:\windows", "test.ini")
Debug.Print pth
End Sub



10:デフォルトの名無しさん
11/04/30 02:28:44.10
>>9
やってることはそれに近いけど、それでは
それは普通のやり方よりコードが増えて、面倒になってる。
そういう面倒事をやってくれるのがDIコンテナ

public fso As IFileSystemObject
Private Sub Command1_Click()
pth = fso.BuildPath("c:\windows", "test.ini")
Debug.Print pth
End Sub

これだけじゃ動かない? たしかにfsoがNothingだからね。
でこれを動くようにしてくれるのがDIコンテナ。

11:デフォルトの名無しさん
11/04/30 02:35:52.78
コンパイラがDIコンテナを使うってことか

12:デフォルトの名無しさん
11/04/30 02:39:04.11
>>11
なんかとんでもない勘違いをしてるぞw

13:デフォルトの名無しさん
11/04/30 02:43:07.62
眠いので頭が正常に働いてないのかも
明日昼間もういちど前スレから読み直してみる
ありがと

14:デフォルトの名無しさん
11/04/30 02:54:27.75
実際には、FileSystemObjectはIFileSystemObjectインターフェースを
継承してないから、fsoにFileSystemObjectそのものを入れることはできない。
入れることができるようにした「FileSystemObjectっぽいもの」を作る必要がある。
でもそれは既存のクラスの問題であって、自分で作るクラスには関係ない話。

重要なのは、このコードには new FileSystemObjectっぽいもの というコードが入ってないから
fsoには「FileSystemObjectっぽいもの」だけではなく、たとえば
テスト用のFileSystemObjectを入れたり、ネットワーク対応のFileSystemObjectを入れたりできる。
実際に入れる作業をするのはDIコンテナだけどね。

特にテスト用のFileSystemObjectを入れられるところが重要で、
FileSystemObjectを使わずに単体テストができる
それでいてコードが前と殆ど変わってないところも注目するところ。

で、最初の質問に答えると、VB6用のDIコンテナは知らないが(多分ないと思う)
DIコンテナを作ることは可能

15:デフォルトの名無しさん
11/04/30 02:59:09.66
Windows Script Host Object Model (wshom.ocx)
Microsoft Sripting Runtime (scrrun.dll)
の両方にFileSystemObjectあるけど未だに違いがわからん

16:デフォルトの名無しさん
11/04/30 03:02:52.11
むしろ、継承はないがインターフェースはあるVB6には
DIはぴったりだと思うな。

DIが出てきた背景には(昔の)EJBの継承を強要するやり方は
複雑でテストしにくい。POJO(継承使ってない単純なオブジェクト)を
使いましょう。ってのがあるし。

VBはもともと継承が使えない。

17:デフォルトの名無しさん
11/04/30 03:05:08.26
VB6での新規案件なんかあるのか?

18:デフォルトの名無しさん
11/04/30 03:10:07.03
ああ、コンパイラじゃなくて
別のとこでfsoに代入するコードが書かれてるってことか


19:デフォルトの名無しさん
11/04/30 03:18:52.07
>>18
そう。書かれてる。

ただしDIコンテナというフレームワークが
やってくれるところだから見るべきところではない。
勝手に入れてくれるという認識でOK

ただし、VB6用のDIコンテはないw

20:デフォルトの名無しさん
11/04/30 03:22:28.04
よくわかった

21:デフォルトの名無しさん
11/04/30 08:47:23.24
一応、開発にはimplements使ってる。
ListViewとかTreeViewへの表示にはimplementsしたクラスを
利用してる。これだけでもだいぶ助かるけど…

Javaだとインターフェースはインターフェースだけで
その場でインターフェースをnewして、しかもその場で
実装を書くことが可能。

VB6やってて不便に思うのは…
引数付きコンストラクタが無い事と、インターフェースのnew実装か。

22:デフォルトの名無しさん
11/04/30 11:45:40.71
インターフェースをnewするって意味が分からないけど・・・

引数付きコンストラクタは、適当な関数でも作ればいいと思う。
newして引数を設定する関数でも、newしてクラスのメソッドを呼び出す関数でも。

23:デフォルトの名無しさん
11/04/30 11:47:30.26
> Javaだとインターフェースはインターフェースだけで
> その場でインターフェースをnewして、しかもその場で
> 実装を書くことが可能。

あ、無名クラスのことか。
正確にはインターフェースをnewしてるんじゃなくて
名前がないクラス作ってるんだけどな。


24:デフォルトの名無しさん
11/04/30 12:34:59.22
VBの場合インターフェース無くても同名のメソッドあれば参照できるんじゃなかったっけ?



25:デフォルトの名無しさん
11/04/30 12:52:17.30
Dim c1 As New Class1 'Public Sub Hoge() を持ってる
Dim c2 As New Class2 'Implements Class1 をして Hoge()をオーバーライド
Dim c3 As New Class3 'Public Sub Hoge() を持ってるClass1とは別物
Dim c4 As New Class4 'Implements Class1 してる且つ独自にPublic Sub Hoge()を持ってる
Dim obj As Object
Dim ic1 As Class1

Set obj = c1: obj.Hoge 'OK
'Set obj = c2: obj.Hoge 'Error (Class1_Hogeは呼ばれない)
Set obj = c3: obj.Hoge 'OK
Set obj = c4: obj.Hoge 'OK 自前Hogeが呼ばれる
Set ic1 = c1: ic1.Hoge 'OK
Set ic1 = c2: ic1.Hoge 'OK
'Set ic1 = c3: ic1.Hoge 'Error (クラスが別物で代入できない)
Set ic1 = c4: ic1.Hoge 'OK Class1_Hogeが呼ばれる

26:デフォルトの名無しさん
11/04/30 22:42:11.86
インターフェースなくても同名メソッド使えるっていうのは嫌だな。
かといって、インターフェースかぶせても、

インターフェース名_メソッド名

が、メソッド名になるのも、はっきりいってうっとおしい。

27:デフォルトの名無しさん
11/05/01 02:54:20.11
引数の型をObjectやVariantにせず、ちゃんとインターフェース用のクラスの型を設定すればいいし
Javaとかだとインターフェース無しでインターフェース用のメソッドにアクセスできるんだっけか?
interface Class1 { void hoge(); }
class Class2 implements Class1 { public void hoge(){} }

Class2 c2 = new Class2; c2.hoge();ができちゃうけど
VBだとちゃんとインターフェースかまさなきゃhogeできないのは優秀なんじゃね?

28:デフォルトの名無しさん
11/05/01 02:56:19.90
どうでもいいことだけど、些細なミスnew Class2();ね

29:デフォルトの名無しさん
11/05/01 04:16:08.27
>>26
> インターフェースなくても同名メソッド使えるっていうのは嫌だな。
そういう言語は他にもあるし(例 JavaScript、Perl)

> インターフェース名_メソッド名
インターフェース名::メソッド名 や インターフェース名.メソッド名
と大差ない

まだまだ経験が足りないようだなw

30:デフォルトの名無しさん
11/05/01 04:22:24.58
Javaって
インターフェース名_メソッド名 に
ならないから、
複数のインターフェースで同名のメソッドがあった場合に
困るんだっけ?count()とかありがちなメソッド

31:デフォルトの名無しさん
11/05/01 04:38:54.04
vbは優秀だな

32:デフォルトの名無しさん
11/05/01 14:16:00.62
まあVB6はともかく、VB.NETのインターフェイスの仕組みは良くできてる。
こればっかりはC#より良い。

33:デフォルトの名無しさん
11/05/01 15:20:47.28
VB6のインターフェイスはCOM相互運用のための機能だからああゆう形になるのは仕方が無いね。
VB6のインターフェイスの宣言は中身(実装)の無いクラスを使うことが多いけど、
IDLも使えるあたりもろにCOM相互運用のためのものと分かる。
>>32
VB.NETのインターフェイスは実装のときに
C#の明示的実装のような書き方になるのであんまり好きじゃないけど、
良くできてると思うのはなぜ?

34:デフォルトの名無しさん
11/05/01 15:47:40.04
>>33
例えばC#の場合、インターフェイスのメンバーを、

(1) 同じ名前のシグネチャのメソッドとして実装した場合、どれがインターフェイスを
実装したメソッドか明示的に分からない。(これは個人的に気持ち悪い)

(2) 明示的実装を使った場合は、そのメソッドはインターフェイスを通してしか
呼び出せない。

という問題があるけど、VBの場合はこれがない。
一つのメソッドが普通のクラスメンバでありつつ、同時にインターフェースの
明示的な実装でもありうる。

URLリンク(www.atmarkit.co.jp)

35:デフォルトの名無しさん
11/05/02 00:04:56.75
なんか珍しくオブジェクト指向っぽいスレの流れになってるので
この流れで質問させてほしい。

マイクロソフト系言語には、プロパティつうものの存在があって
プロパティ用のアクセッサの書き方があるけど、

普通にゲッタとセッタで実装できそうなのに、なんでプロパティ用の
アクセッサの書き方があるの?

36:デフォルトの名無しさん
11/05/02 00:34:33.44
一つはプロパティという概念を導入した方がクラスの構造がわかりやすくなるから。
変数名などa, b, c, ....でも「実装できそうなのに」分かり易い名前を付けるのと同じ動機。

もう一つはプロパティとメソッドが機械から区別できた方がいい事があるから。
例えばVB6でも.NETでもGUIアプリのデザインをデザイナでデザインできるのはこのため。

37:デフォルトの名無しさん
11/05/02 05:27:47.95
>>35
メソッドと同じ書式でいちいちゲッタセッタを書くのが面倒だから。
プロパティならとりあえず変数として宣言しておいて、
あとで気が変わったときにゲッタセッタ(プロパティ)を書けば済む。

38:デフォルトの名無しさん
11/05/02 13:55:12.47
>>37
答えになってないでしょ。
何故Bが必要かと聞いているのに、何時でもAはBに変更できるからってそれ何だよ。

39:デフォルトの名無しさん
11/05/03 15:41:07.99
レスキュー花ちゃんはありがたいね

40:デフォルトの名無しさん
11/05/03 15:51:32.83
わざわざ上げてまで今それを言う理由が理解できない。

あそこは今でも一部tipsは有料でやってるのかな。
そりゃ人がどんな商売しようと自由だけど、個人的にはケツの穴が小さいなと思わずにいられない。

41:デフォルトの名無しさん
11/05/05 16:01:42.55
コマンドライン引数で日本語パス・ファイル名を受け付けないソフトって諦めるしかない?
渡すファイルを、一旦、日本語を使わないパス・ファイル名にコピーしてから渡す回避策はあるけれど

42:デフォルトの名無しさん
11/05/05 19:21:33.46
>>35
> 普通にゲッタとセッタで実装できそうなのに、なんでプロパティ用の
> アクセッサの書き方があるの?

人間の感覚だろうなぁ。

プログラム言語とは関係ないUMLだって、
メソッドとは別に属性(プロパティ)というものがある。

だけど、これ、ゲッタ、セッタで置き換え可能。
つまり実装するにあたって属性というものは必要ないということになるが、
やっぱり属性ってのは、メソッドとは別ものと人間は考えてしまうようだ。


43:デフォルトの名無しさん
11/05/05 22:11:51.68
>>35
オブジェクト指向の話になるとオブジェクト指向論と
オブジェクト指向言語の実装についての話がごっちゃになるんだが
メッセージパッシングをメソッド呼び出しで実装したと考えれば
外部公開属性はやっぱ別にしたい


44:デフォルトの名無しさん
11/05/07 02:18:50.27
ゲッタ・セッタでは

object.property++ なんて書き方ができない

object.setProperty(object.getProperty()+1) こうなる。

45:デフォルトの名無しさん
11/05/07 03:06:00.34
VB6にインクリメントの演算子なんてあったっけ?

46:デフォルトの名無しさん
11/05/07 15:30:58.47
>>44
>object.property++ なんて書き方ができない

この書き方をしたいならメンバ変数をPublicにすれば良いだけ。

>object.setProperty(object.getProperty()+1)

この方が安全といえば安全と思う。

47:デフォルトの名無しさん
11/05/07 21:07:10.24
安全とか危険とか何意味不明なこと言ってるんだw
インクリメント演算子なんてものはないにしても、>>44の言いたいことはまあ半分は分かる。

要するに、
>object.setProperty(object.getProperty()+1)
こういうのは見難いし醜いということ。

ついでに変数をPublicにしたのでは値の取得または設定時に動作を絡ませることができない。

48:デフォルトの名無しさん
11/05/08 00:32:37.20
インターフェースを変えることなく、
感覚通りに名前をつけられるのが
プロパティのいいところ。

49:デフォルトの名無しさん
11/05/08 01:42:29.37
>object.setProperty(object.getProperty()+1)
こういうのは
object.addProperty(1)
を作ればいいのでは

50:デフォルトの名無しさん
11/05/08 17:27:14.50
>>49
まあそれが妥当だろうね。

51:デフォルトの名無しさん
11/05/08 18:03:11.90
どこが妥当だよw

属性(プロパティ)が100あったら、100ごとにセッタ、ゲッタ、>>49相当のものを
一々書くのかw

書く手間のことを言ってるんじゃない。
各属性ごとにその3つなら3つのメソッドを管理するの?
やってられるかよ。

ちなみにaddHogeでは「Hogeを足す」になってしまわないか?

52:デフォルトの名無しさん
11/05/08 19:09:44.58
必要なメソッドは必要な時に記述

53:デフォルトの名無しさん
11/05/09 00:15:16.20
まずプロパティが100あるっていう前提からしてアホっぽいが
>addHogeでは「Hogeを足す」
まさにそういうメソッドだろう

54:デフォルトの名無しさん
11/05/09 00:25:56.79
いい歳こいて日本語の「てにをは」が使えないのは恥ずかしいよ。
「Hogeに足す」と「Hogeを足す」の違い分かる?

55:デフォルトの名無しさん
11/05/09 00:37:15.56
んなもんHogeが実際なんなのかによるだろうと思うが
気にいらんかったらaddHogeValueでもaddHogeCountでも
好きに作ったらええがな

56:デフォルトの名無しさん
11/05/10 13:59:16.81
VB2003の質問はここでよろしいでしょうか?

57:デフォルトの名無しさん
11/05/10 15:32:38.22
ここはVB6まで

58:デフォルトの名無しさん
11/05/13 21:57:56.25
プロパティに自由にアクセスできてしまうっていうのはどうかと思うぞ。


59:デフォルトの名無しさん
11/05/14 01:39:31.35
>>58
それは、ゲッターとセッターの両方をつけるのと何が違うんだ?

60:デフォルトの名無しさん
11/05/14 06:46:10.74
>>59
ゲッター/セッターなら、変な値を設定できないようにしたり、
読み出された回数数えたりできるよ。

61:デフォルトの名無しさん
11/05/14 09:34:59.88
フレックスグリッドコントロールを使ってるんですが、
エクセルみたいにセルの下や右だけ罫線の色を変える、みたいなことはできないんですか?


62:デフォルトの名無しさん
11/05/14 10:15:51.49
付属のMSフレックスグリッドでは出来ないけど
フレックスグリッド系コントロールの中には、それが出来るものもある
当然、無料じゃないけどな

あとはラインとかピクチャーコントロールとかに色つけて重ねて
擬似的に実装するとかな

63:デフォルトの名無しさん
11/05/14 16:42:05.71
>>60
プロパティプロシージャでもできるやろ

64:デフォルトの名無しさん
11/05/14 18:15:27.31
>>63
>>59

65:デフォルトの名無しさん
11/05/14 18:23:24.27
>>58以降の流れはどれも何が言いたいのかさっぱり分からん。
特に>>64
個人的にはこういうのは他人がエスパーだと思ってるとしか思えん。

66:デフォルトの名無しさん
11/05/14 18:55:36.41
理解したくなければ放置しとけば言いし、
理解したいなら「どういうこと?」って聞けばいいのに。

67:デフォルトの名無しさん
11/05/16 13:19:30.97
ファイルサイズ取得ってこんな感じで問題ない?問題ある?

With New FileSystemObject
filesize = .GetFile(filepath).Size
End With

68:デフォルトの名無しさん
11/05/16 13:33:41.86
実装してみて実際のファイルサイズを取得してみて合ってるならそれでいいのでは?

69:デフォルトの名無しさん
11/05/16 13:53:05.69
okわかった。ありがと

70:デフォルトの名無しさん
11/05/16 17:31:59.11
ちゃんと8Gオーバーくらいのサイズで試さないとね

71:デフォルトの名無しさん
11/05/16 19:44:45.24
>>67
またWithでNewか。いいけど。

72:デフォルトの名無しさん
11/05/17 00:06:52.59
えー、With Newって書き方は初めて見た。
これって、End Withで解放されるの?
ガーベジコレクション的にも大丈夫?

ところで皆さんはガーベジコレクションって言いますか?
ガーベッジコレクションって言いますか?

73:デフォルトの名無しさん
11/05/17 18:55:36.37
>>72
End Withの後、アクセスしようが無くなって、たぶんメソッド抜けた時点で開放されるかな。

74:デフォルトの名無しさん
11/05/17 22:21:37.18
そういうメモリから解放されたかどうかって知るすべあるの?

75:デフォルトの名無しさん
11/05/18 07:15:17.07
>>74
自作クラスでやるなら、簡単だよな?

76:デフォルトの名無しさん
11/05/18 17:14:53.76
おせーてくらさい

77:デフォルトの名無しさん
11/05/18 19:38:30.99
>>76
terminateイベントプロシージャにDebug,Print "hoge"とでも書けば

78:デフォルトの名無しさん
11/05/19 01:03:58.16
㌧㌧
なるほど

79:デフォルトの名無しさん
11/05/19 01:08:41.62
'Class1
Public Sub Hoge()
Debug.Print "hoge"
End Sub
Private Sub Class_Initialize()
Debug.Print "initialize"
End Sub
Private Sub Class_Terminate()
Debug.Print "terminate"
End Sub

'Form1
Private Sub Command1_Click()
Debug.Print "click"
With New Class1
Debug.Print "call hoge"
.Hoge
Debug.Print "aftre call hoge"
End With
Debug.Print "end sub"
End Sub

'Result
click
initialize
call hoge
hoge
aftre call hoge
terminate
end sub

80:デフォルトの名無しさん
11/05/20 15:31:26.12
VBを今のところ、ただ勉強目的で始めたいのですが、VBの何をまずダウンロードすればいいのか、わかりません。教えてください。

自宅でWindows7を使っています。インターネット接続環境はありません。そのため、ネットカフェでダウンロードして、自宅でそれをインストールしたいのですが、オフラインの自宅でインストールは可能でしょうか?

また何というものをダウンロードすればいいのですか?

いろいろ調べたら、単なる勉学者は、Express Editionとかいうのをダウンロードすればいいみたいですが、詳しくはわかりません。

以上を踏まえ、どなたか何とぞ、お教えねがいます。

81:デフォルトの名無しさん
11/05/20 16:06:07.83
>>80
スレ違い

ダウンロード出来るのは、VBではなくVB.NET

VB.NET質問スレ(Part36)
スレリンク(tech板)

82:デフォルトの名無しさん
11/05/20 16:15:50.20
fURLリンク(ftp.microsoft.com)
このサイトのMSLFILESにあるVB6用のサンプルプログラムってVB6やるからには見ておいたほうがいいの?

83:デフォルトの名無しさん
11/05/20 17:55:11.04
fURLリンク(ftp.microsoft.com)のdeveloprフォルダ

84:デフォルトの名無しさん
11/05/20 17:58:13.02
fURLリンク(ftp.microsoft.com)でゲームでも探して炉

85:デフォルトの名無しさん
11/05/20 18:06:50.49
なにがしたいんだよ

86:デフォルトの名無しさん
11/05/21 23:03:28.32
フォーム上のコマンドボタンを押すと1行目に『ビート』、2行目に『たけし』とリストボックスに追加されるプログラムがある。【①】、【②】を埋めて完成させよ。リストボックスのオブジェクト名は『List1』とする。

Private Sub Command1_Clic()

List1.【 ① 】
List1.【 ② 】

End Sub


87:デフォルトの名無しさん
11/05/21 23:11:50.42
動的配列を使い、コマンドボックスを押すたびに配列の数が増えるプログラムを【】を埋めて完成させよ。

Private Max As Long 'データ数を保存する変数
Private Hairetu() As Long '配列


Private Sub Form_Load()
Max = 0 'データ数初期化
End Sub

Private Sub Command1_Click()

Max = Max + 1 'データ数を1つ増やす
【 】'実際に配列の範囲を変更

End Sub

88:デフォルトの名無しさん
11/05/21 23:24:53.29
先生、コマンドボックスってなんですか?

89:デフォルトの名無しさん
11/05/21 23:46:50.70
Redim Preserveだが…なんでこんな問題作ってんの?

90:デフォルトの名無しさん
11/05/22 00:57:54.89
学校の宿題なんだろ

91:デフォルトの名無しさん
11/05/22 01:13:59.00
「値を保持したまま」とは書いてないから、ReDimだけで良いのでは?
値の保持が必要ないなら、ReDim Preserveは遅いだけだし

92:デフォルトの名無しさん
11/05/22 03:21:05.03
Hairetu()(笑)

93:デフォルトの名無しさん
11/05/22 16:34:01.94
Haiyoru(笑)

94:デフォルトの名無しさん
11/05/22 17:11:34.88
ググればすぐわかるような基本構文問題には答えんなよw

95:デフォルトの名無しさん
11/05/22 20:22:20.71
>>86
先生!なに入れてもコマンドボタンが反応しません!

96:デフォルトの名無しさん
11/05/22 21:00:12.41
確かにあれじゃ反応しないなw
なんてマのヌケた出題なんだろう…

97:デフォルトの名無しさん
11/05/24 23:15:18.09
1つの配列の中に重複するデータが多数ある
重複するデータを抜き出したい
A,B,A,B,A,A,C,F,C....
欲しいデータは重複データなので上記の場合
A,B,Cとなります
unique以外を取得したいのです

98:デフォルトの名無しさん
11/05/25 01:01:19.38
>>97
ソートしてから、2つ以上同一の値が連続しているものを抜粋する
Filter掛けて、戻り値のUBoundが1以上のものを列挙する
連想配列を利用する

いろいろ方法はあるので、お好きな物をどうぞ

99:デフォルトの名無しさん
11/05/25 01:02:11.41
便利なコマンドがVB6以前に存在するのかを尋ねているのか
最速アルゴリズムを尋ねているのか

100:デフォルトの名無しさん
11/05/25 01:30:36.51
じゃあ両方で

101:デフォルトの名無しさん
11/05/25 01:34:08.95
99に期待

102:97
11/05/25 07:51:55.31
>>98
連想配列でぐぐってきた!
連想配列が何か分かったけど、どうアルゴリズム化していいかわかんねw

>>99
uniqueの逆の関数があれば1番良かったんですけど、なさそうなのでアルゴリズムです

103:97
11/05/25 12:53:49.58
自己解決

l = Ubound(hogeArray)
For i=0 TO l
For j=i+1 TO l
If hogeArray(i) = hogeArray(j) Then
'同値の場合の処理
end if
next
next

msgbox hoge


104:97
11/05/25 12:59:17.07
>>103
最後のmsgboxはゴミです


105:デフォルトの名無しさん
11/05/25 18:19:25.53
それだけだと、A,B,A,B,A,A,C,F,Cの場合
BやCみたいに2つの場合はいいけど、Aみたいに4つの場合は6回(3+2+1回)実行されちゃうよ
3つの場合は3回(2+1回)、5つの場合は10回(4+3+2+1回)だ

つまり、「A,B,A,B,A,A,C,F,C」が「A,A,A, B, A,A, A, C」になってしまうので、
それで問題ないなら構わないけど、「A,B,C」にしたいという最初の条件とは違うよね

106:デフォルトの名無しさん
11/05/25 19:45:31.84
perlだと1行で簡単にできる式があったような気がしたw

107:デフォルトの名無しさん
11/05/25 19:53:16.45
で?

108:デフォルトの名無しさん
11/05/25 19:54:26.43
そういや7年くらい前にperlの連想配列と同じことができるVBのクラスを作った記憶があるw

109:デフォルトの名無しさん
11/05/25 20:05:42.48
>>107 で?じゃないだろ?

Private data As Object
Set data = CreateObject("Scripting.Dictionary")

For i = 0 To l
 data(hogearray(i)) = data(hogearray(i)) + 1
 If data(hogearray(i)) = 1 Then
  '新しい配列に追加
 End If
Next i

110:デフォルトの名無しさん
11/05/25 20:42:36.81
何、この子?

111:デフォルトの名無しさん
11/05/25 23:23:18.20
ほうほう。それでそれで?

112:デフォルトの名無しさん
11/05/26 01:59:56.98
Private data As Object
Set data = CreateObject("Scripting.Dictionary")

For i = 0 To l
 data(hogearray(i)) = data(hogearray(i)) + 1
Next i

For Each k In data.Keys
 if k>1 then
  '処理
 end if
Next k

113:デフォルトの名無しさん
11/05/26 02:06:32.87
>>97
>>103を見るかぎりhogeArrayの中身は

114:97
11/05/26 08:41:35.84
>>105
重複処理でuniqueします

115:デフォルトの名無しさん
11/05/26 13:00:44.16
VBで動的連想配列ってできるんですか?
ググっても見付かりません

116:デフォルトの名無しさん
11/05/26 13:12:22.09
URLリンク(7ujm.net)

117:デフォルトの名無しさん
11/05/26 15:41:14.52
x^3-7*x+1の式でニュートンラフソン法を用い、初期解と繰り返しの回数を入力したら
近似解が求められるプログラミングを作りたいんですが、どう作ればよいですか?

もしスレチでしたらすみません

118:デフォルトの名無しさん
11/05/26 20:51:24.73
>>117
スレリンク(tech板)

119:デフォルトの名無しさん
11/05/28 15:26:54.34
VB6でマルチスレッド作るの無理だよね・・?

120:デフォルトの名無しさん
11/05/28 15:47:14.47
複数プロセス起動すれば良い

121:デフォルトの名無しさん
11/05/28 18:11:35.77
>>119
実用的じゃないけど、可能だよ。

122:デフォルトの名無しさん
11/05/28 18:50:02.37
訂正

可能だけど、実用的じゃないよ。

123:デフォルトの名無しさん
11/05/28 19:11:31.96
>>122
ちょwww
訂正って、それじゃ意味変わってないだろ。

訂正するなら「不可能だけど、実用的だよ」か
「可能だし、実用的だよ」のどちらかだろwww

124:デフォルトの名無しさん
11/05/28 22:00:55.94
A = 実用的
B = 可能


元の文章は

not A and B


訂正するなら

not A and not B

A and B

A and not B


もっとも日本語として強調したい部分というのは後にもってくるという
のもあるので、

not A and B



B and not A

と言い換えるのも無い事は無いか。

125:デフォルトの名無しさん
11/05/28 22:17:24.05
>>123
「表現」を「訂正」してるだけだろ。

まあ、いちいち訂正するほどのコトとは思えないけど。

126:デフォルトの名無しさん
11/05/29 01:46:44.64
もっと賢いやりかたったらおせーて

Public Function ToStringB__v2(v As Variant) As String
Const PREFIX$ = " KMGTPEZY"
Dim s$, p#, n&, i&: p = CDbl(v): n = 1
For i = 2 To Len(PREFIX)
If p >= 1000 Then p = p / 1000: n = n + 1 Else Exit For
Next i
s = Format(p, IIf(p >= 100, "0", IIf(p >= 10, "0.0", "0.00")))
ToStringB__v2 = s & " " & IIf(n > 1, Mid(PREFIX, n, 1), "") & "B"
End Function

Public Function ToStringIB__v2(v As Variant) As String
Const PREFIX$ = " KMGTPEZY"
Dim s$, p#, n&, i&: p = CDbl(v): n = 1
For i = 2 To Len(PREFIX)
If p >= 1024 Then p = p / 1024: n = n + 1 Else Exit For
Next i
s = Format(p, IIf(p >= 100, "0", IIf(p >= 10, "0.0", "0.00")))
ToStringIB__v2 = s & " " & IIf(n > 1, Mid(PREFIX, n, 1), "") & "iB"
End Function

127:デフォルトの名無しさん
11/05/29 01:53:17.35
簡単なエラートラップなら
Cdbl(v)する前に
If Not IsNumeric(v) Then Exit Function
を入れる

128:デフォルトの名無しさん
11/05/29 01:59:09.34
On Error Goto ErrorLabel
とかして
End Functionの手前にErrorLabel:って入れればOK

129:デフォルトの名無しさん
11/05/29 09:10:26.34
>>126
n = Int(Log(p)/Log(1000#)): p = p / (1000# ^ n)

# 元のプログラムと n の値が 1 違うので注意 (0 ベースになる)
# v = 0 の時に Log() がエラーになるので、そのケースがあるなら事前に場合分けが必要

130:デフォルトの名無しさん
11/05/30 03:20:52.74
なるほど
勉強になります
ありがとうございました

131:デフォルトの名無しさん
11/05/31 15:32:01.70
ActiveX DLLでCOM作ってるんだけど、ADOのRecordSetやFieldが持ってる
連想配列みたいにアクセスするインターフェースってどうやって作るん?

132:131
11/05/31 16:27:12.11
プロシージャIDを0にすると既定になって、省略可能になったわ。

133:デフォルトの名無しさん
11/05/31 17:00:57.81
?

134:デフォルトの名無しさん
11/06/01 12:34:59.02
VB4なんですがWIN87EM.DLLで一般保護違反が出るのですが、
なかなか再現しません。このエラーを故意に起こすには、どのようにコーディングすればいいですか?
OSはNT4です。

135:デフォルトの名無しさん
11/06/02 21:10:23.48
すいません、質問させてください。

今下記のような感じでテキストファイルを読み込んで
excelに出力するものを作っています。
Array1と10に降順でソートを掛けたいと思っています。

ですが、どう記述するのかわかりませんでした・・・・
どなたかお力お貸しください。

136:デフォルトの名無しさん
11/06/02 21:12:42.14
こんな短期間にたくさん質問くるということは
どこかの大学バカ教授が授業でVB6で課題でも出したのか?

137:135
11/06/02 22:14:17.50
すません、こんなの使ってます。

.Workbooks.OpenText _
FileName:=strFileNm, _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Tab:=True, _
Semicolon:=False, _
Comma:=True, _
Space:=False, _
Other:=False, _
FieldInfo:=Array( _
Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2))~

138:デフォルトの名無しさん
11/06/03 00:35:50.94
VB6.0で作ったソフトですがディスプレイをブラウン管(1024,768)から液晶(1920,1080)に替えたら
ソフトが動かなくなってしまいました。なぜ?
ブラウン管に戻すと動きます。

139:デフォルトの名無しさん
11/06/03 01:10:39.61
ソース出せや

140:デフォルトの名無しさん
11/06/03 02:17:22.81
VBで作ったアプリって
モニタのど真ん中に可視な属性を持ってるのに大きさがないという
ウインドウというかプロセスがあるね
キャプションで探したウインドウがGetWindowRectでサイズが0でずっと悩んじゃったよ
まるで民主党の朝鮮人たちに騙された気分だよ

141:デフォルトの名無しさん
11/06/03 02:27:53.82
>>138
あー、それ>>140と関係してるかもね
プロセス列挙してウンドウを探すときにLeftが512だったら弾く、とかやってると
モニタサイズが変わったら弾けなくなる
LeftじゃなくてWidthが0だったら弾くようにすればおk

142:福盛俊明
11/06/03 09:09:29.66
23 名前:福盛俊明 :2011/06/02(木) 23:51:15.53
俺はDarkBASICの天才♪”
俺に答えられない質問はない

質問はこちらへ
URLリンク(www.geocities.jp)

アハアハ~♪”

143:デフォルトの名無しさん
11/06/03 18:43:25.43
>>137
エクセルを開いてから、オートフィルタで手作業でソート

144:デフォルトの名無しさん
11/06/05 20:08:58.70
VBSで質問です
5分後にシャットダウンするプログラムを作ってます。

MsgBox "5分後にシャットダウンします。"
WScript.Sleep(300000)
'ここにシャットダウンの処理

これで一応シャットダウンできますが、終了一分前にメッセージを出そうとして下記のように変えると、
「1分後に(ry」のメッセージボックスのOKを押すまで処理が止まってしまうので、正確な5分になりません。

MsgBox "5分後にシャットダウンします。"
WScript.Sleep(240000)
MsgBox "1分後にシャットダウンします。"
WScript.Sleep(60000)
'ここにシャットダウンの処理

メッセージボックス出しつつ処理を止めない方法ってありますか?
同じことができれば代用法でもなんでも構いません

145:デフォルトの名無しさん
11/06/05 20:24:31.18
>>144
メッセージボックスやモーダルのフォームではなく、
モードレスのフォームを出せばいい。

146:デフォルトの名無しさん
11/06/05 20:52:18.41
>>145
レスどーも
でも色々調べてたら自己解決してしまった(・_・;)
コマンドラインで
shutdown -s -t 300
って書くと自動で2分前に警告だしてくれたらからこっち使います

147:デフォルトの名無しさん
11/06/06 18:48:24.52
>>146
2分前?

148:デフォルトの名無しさん
11/06/09 22:01:47.41
ここでいいんかな・・・?

imdate(inputManのやつ)で日付を取ってそれに+1日したいんだが
どうしたらいいんでしょうか。

Date + 1に出来たらいいかなと思ったんだが
imdate.Numberで数字で取得するからなんともいかんのかな?

149:デフォルトの名無しさん
11/06/09 23:24:54.45
VBのバージョンを言え

150:デフォルトの名無しさん
11/06/09 23:25:57.17
inputManだったらinputManのヘルプみればいいんじゃないか?

151:デフォルトの名無しさん
11/06/09 23:27:30.00
ジャンジャンバリバリ ジャンジャンバリバリ InputMan

152:148
11/06/09 23:35:56.07
すいません6.0です。


153:デフォルトの名無しさん
11/06/11 00:08:05.03
偉そうにVBのバージョンを言え!
だって
VBのバージョンなんか関係ないのに
その1行しか言えないレベルの奴なんだ

154:デフォルトの名無しさん
11/06/11 09:44:32.95
4行も内容のないこと書いてるやつよりましじゃね?

155:デフォルトの名無しさん
11/06/11 14:01:36.47
で、バージョン聞いといてそれで終わり?
大抵関係ない情報聞くやつは
使いものにならないんだよねw

156:デフォルトの名無しさん
11/06/11 17:48:24.37
俺だったら「VBのバージョンは?」って優しく聞く
それを「VBのバージョンを言え」と字数多くしてまで乱暴に言うのは
まさに超初心者ならではの頭の悪さ
で、imdate.Numberが日付型ならDateAdd、文字ならCDateしてから

157:デフォルトの名無しさん
11/06/11 19:38:30.77
> 質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、
> 「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。

というのがルールなんだから、質問内容がバージョン関係有る無しに関わらず
まずは郷に入っては郷に従えってだけのことだろ

158:デフォルトの名無しさん
11/06/11 19:55:06.35
もう黙れば?

159:デフォルトの名無しさん
11/06/11 21:31:12.16
.NETの質問の可能性もあるやろ

160:デフォルトの名無しさん
11/06/11 23:13:06.76
まあ、スレタイちゃんと読んでりゃ .NET はないはずだが、
バージョンも書かないような奴は >>1 もろくろく読んでな
いような奴だから、スレタイも読んでない可能性高いかもね。

て言うか、質問者は後出しながらバージョン答えてるし、
>>153 は一体なにと戦ってるんだ?

161:デフォルトの名無しさん
11/06/11 23:17:29.22
命令口調クン

162:デフォルトの名無しさん
11/06/11 23:23:01.63
ところで>>149は必要だったのかい?
いらないよね。赤っ恥かかされたからって、必死こいて戦うことないよね。

163:デフォルトの名無しさん
11/06/11 23:31:29.55
.NETの質問の可能性もあるやろ!(キリッ

164:デフォルトの名無しさん
11/06/12 05:18:06.48
>>162
顔真っ赤にして、そんなに悔しかったの?

165:デフォルトの名無しさん
11/06/12 09:48:19.38
>>164
敗北宣言乙

166:デフォルトの名無しさん
11/06/12 09:49:17.07
ウェブサイト作成協力して頂けませんか?
URLリンク(jpcity.lolipop.jp)

167:デフォルトの名無しさん
11/06/12 10:03:10.15
>>165
一人相撲で勝利宣言?

168:デフォルトの名無しさん
11/06/12 10:41:59.64
 発 者 同         . 。_   ____           争
 生 同 .じ     .    /´ |  (ゝ___)          い
 .し 士 .レ      .__/'r-┴<ゝi,,ノ   ro、      は、
 .な で .ベ      ∠ゝ (ゝ.//`   ./`|  }⌒j     
 .い し .ル        } ⌒ /`ヽ、_∠l,ノ ・ヽ´
 .! ! か の       /  ´..:.} >、、___,  .r、 ソ、`\
             /   ..:.:.}   /   |∨ ` ̄
            /   ..:.:./    |   丶
           / _、 ..:.:.:.{    .{.:.:.   \
          {   ..:Y  .ゝ、   {.:.:.:.:.    ヽ
          |、  ..:/ 丿 .:〉   >.- ⌒  .  ヽ
          / {. ..:./ ソ ..:./  .(    ..:.:.:`  ..:}
         ./..:.:}.:.:./ ヘ、 ..:./   .\ ..:.:r_,ノ、.:.:}
        ./..:.:/|.:/   {.:./     X.:.:}.}   X X
        /..:.:/ .}.:|    }:/       .Y丶ヽ  Y.:Y
  . __/.:/ { }  《.〈、     _,,__>.:》丶   Y.:\
  /.:.:.:.:.::/   !.:.:ゝ  ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ   \.: ̄>

169:デフォルトの名無しさん
11/06/12 10:46:29.27
いや争ってる (と思ってる) のは、1人だから (w

170:デフォルトの名無しさん
11/06/12 10:52:23.61
争いにもなってないよな
まったく関係のないバージョンの話なんて聞くような馬鹿だしwww

171:デフォルトの名無しさん
11/06/12 11:02:12.26
ルールは守ろうねって言われたことが余程気に入らなかったようだな

反抗期なのかもしれないが、そんなんじゃ社会に出てから困ることになるぞ

172:デフォルトの名無しさん
11/06/12 11:10:17.42
なぜバージョンを聞いたんだい?ルールだからか?必要あったか?空気読まずに聞くほどに?
社会人としてのルールとして、そこの所を答えてくれないか?

173:デフォルトの名無しさん
11/06/12 11:18:56.10
       ____
     /⌒  ⌒\
   /( ●)  (●)\
  /::::::⌒(__人__)⌒::::: \
  |     |r┬-|     |
  \      `ー'´     / このスレ香ばしいNE!
   /` ‐- __ - ‐‐ ´ \
  / .l        _,,ヽ ___ 〉、
  | l       / ,' 3 `ヽーっ
  ヒト- _    l   ⊃ ⌒_つ
.   !__   ̄, ̄ `'ー-┬‐'''''"
   L  ̄7┘l-─┬┘
    ノ  ̄/  .! ̄ ヽ
  └‐ '´   ` -┘

174:デフォルトの名無しさん
11/06/12 11:53:03.08
>>172
なぜ理由を聞いてるんだい?ルールだからか?必要あったか?空気読まずに聞くほどに?

175:デフォルトの名無しさん
11/06/12 12:06:46.28
そこまで追い詰めるつもりはなかったんだが
鸚鵡返しするような状態になっちゃお終いですね
こんな人が社会に出てからとか言ってんだからお笑いです

176:デフォルトの名無しさん
11/06/12 12:34:17.84
一体誰を追い詰めた気になってるんだろう…
まあ、本人満足してるみたいだからいいか (w

177:デフォルトの名無しさん
11/06/12 12:38:25.19
総理大臣のようだNE!

178:デフォルトの名無しさん
11/06/12 12:40:40.77
道化を装う総理ならいいが
近年の人は愚かにしか見えない

179:デフォルトの名無しさん
11/06/12 18:39:16.06
スレ伸びてると思ったら
質問があったとかそれに対する返事だとかそういうのじゃないので伸びてたのか
残念だ

180:デフォルトの名無しさん
11/06/12 18:55:49.70
気づけばもう3日前からずっとこの流れなんだなw

181:デフォルトの名無しさん
11/06/12 19:10:39.68
>>179
同じく。
そもそも、このスレでバージョンは○○ですって書いてる人あんま見ないけどな。
ところで、COM使った開発とか新規でまだやってたりする?
この間.NETじゃないただのASPで動かさなきゃいけない案件があって、
バッチでも使う共通処理があったから、COMで作る事にしたんだが、VB.NET
でも簡単にCOM作れるのな。
中身はマネージドだから、VB6.0で作った方が動作は早かったかな。

182:デフォルトの名無しさん
11/06/12 19:18:18.05
終わった言語なんだし、ひっそりしていたほうが健全なんだ。

183:デフォルトの名無しさん
11/06/13 17:10:31.72
未だに終わった言語で開発させられている俺に謝れw

184:デフォルトの名無しさん
11/06/13 17:41:27.35
フヒヒ

185:デフォルトの名無しさん
11/06/13 20:30:45.05
なんかwordにVBエディタが入ってるんだけど
まさかこれってコンパイラDLしなくでもVBできる?
VBはじめようと思ってんだけど
誰かコレについて教えてくれ

186:デフォルトの名無しさん
11/06/13 20:51:09.21
それは別物です

187:デフォルトの名無しさん
11/06/13 23:10:28.61
>>185
まあ VB と似たようなもんだけど、Word がないと動作しないよ。

まずは word vba あたりでググレ。

188:デフォルトの名無しさん
11/06/14 06:26:34.17
みんなツンデレだなぁw助かってるけど^^
言い方きっついレスポンスは幼馴染みが
照れ隠しで怒っている感じに変換して
読んでる

189:デフォルトの名無しさん
11/06/15 10:20:39.97
質問です。

Set xlBook = xlApp.Workbooks.Open(xlTestFile)で開いた場合
Arrayって使えますか?
読込んだTextを文字列か標準かを指定してデータをExcelに挿入したいのですが・・

190:デフォルトの名無しさん
11/06/15 11:00:48.32
VB6言語すらまともに使えない奴には
日本語での質問もまともに出来ない奴が多い件

191:デフォルトの名無しさん
11/06/15 11:19:07.01
VB6言語?

192:デフォルトの名無しさん
11/06/15 12:23:24.38
WinXP、VB6、SP6です。

Controls.Addで動的に作成したTextBoxのMultiLineプロパティをTrueにする方法を教えてください。
普通にコードで設定しようとすると「値の取得のみ可能なプロパティに値を設定することはできません。」というエラーが出ます。

デザイン時にMultiLine=TrueにしたTextBoxをコントロール配列にしてLoadすれば、
MultiLine=TrueのTextBoxを動的に作ること自体は出来るのですが、都合によりコントロール配列ではダメなので。

最悪、デフォでMultiLine=TrueなTextBoxをユーザーコントロールとして作って、それをControls.Addで動的に作成するという
手法も考えてますが、もっと簡単な方法があればご教示ください。

193:デフォルトの名無しさん
11/06/15 14:40:03.68
VB6LEじゃActiveX作れんからプラグイン作れないんだな…orz

194:デフォルトの名無しさん
11/06/17 00:34:45.03
>>183
うらやましい
次の言語はなんですか

195:デフォルトの名無しさん
11/06/17 03:39:58.92
VB6のランタイムライブラリってぶっ壊れることあるんだな
家族の誰かが何かインストールしたらしくその際にVB6ランタイムが上書きされたかで
VB6およびVB6製アプリが正常動作しなくなった
ベクターにあったVB6ランタイムをインストールしたら直ったけど
ウィルス感染かと思ったわ

196:デフォルトの名無しさん
11/06/17 08:37:41.49
>>195
それは壊れるとは言わない。
古いライブラリに入れ替わっただけ。

そんなのはVB関係ないし、OSだって関係なく
起こり得る話。

197:デフォルトの名無しさん
11/06/17 13:07:36.93
どうせインストーラ型のVB6製アプリ入れる時にシステムに既に同じのあるけど上書きする?って聞かれて、
「なにこれわかんない。とりあえずはいでいいよね」って選択していったんだろ

198:デフォルトの名無しさん
11/06/17 15:32:50.01
spの古いランタイムに変わるとVB起動時およびVB製アプリ動作時にmsiとか起動するもんなの?

199:デフォルトの名無しさん
11/06/17 17:00:17.40
3文字ごとに[,]を打つのに作った↓コレが不具合の原因で
OutputBox.Text = Format(CDec(OutputBox.Text), "#,###.##############")
'[2.0]で持ってくると
'CDecで文字列を数値にしているので
'ただの[2]として認識されて[2]だけが出力される
'[2.03]だとそのまま[2.03]で認識してくれる

別の書き方ってあります?

200:デフォルトの名無しさん
11/06/17 17:30:29.57
OutputBox.Text = FormatNumber(OutputBox.Text)

201:デフォルトの名無しさん
11/06/17 17:33:52.00
Oh…小数第二位までしか表示されないけどこんな方法が。

ありがとうございます

202:デフォルトの名無しさん
11/06/17 17:42:38.47
MSDN
数値表示書式指定文字 (Format 関数)
数値を表すその他の書式 (Format 関数)
定義済み数値書式 (Format 関数)
の項目でも読め

203:デフォルトの名無しさん
11/06/17 17:44:47.98
FormatNumberの仕様読んでから使えよ

204:デフォルトの名無しさん
11/06/17 17:47:38.21
そもそも質問が意味不明
何を知りたいのかよく分からん

205:デフォルトの名無しさん
11/06/17 17:50:27.71
落ち着いてすぐ質問レスするのではなく
一度文章をメモ帖か何かで整理してから
投稿したほうがよい

206:デフォルトの名無しさん
11/06/17 22:02:15.12
ここは俺のメモ帳だ

207:デフォルトの名無しさん
11/06/18 07:13:23.83
メモ :
乱数系列を繰り返すには、数値を指定して Randomize ステートメントを
実行する直前に、負の引数を指定して Rnd 関数を呼び出します。
Number に同じ値を指定して Randomize ステートメントを使用しても、
前の乱数系列を繰り返すことはできません。

Rnd -1
Randomize 1234

208:デフォルトの名無しさん
11/06/18 15:42:55.71
>>207 言っている意味がよくわからんちん

'Rnd -1
Randomize 1234

Dim i
Debug.Print "Start"
For i = 1 To 10
Debug.Print i, Rnd
Next i
Debug.Print "End"

209:デフォルトの名無しさん
11/06/19 09:25:09.86
VB6SP6で、ある文字列値がCBoolで変換できる値か否かを調べる関数とかって無いの?

"0"、"1"、"false"とかならTrueを返し
""、"a"、"t"とかならFalseを返すみたいな

今はOn Error Resume NextでCBoolに掛けちゃってるけど、もっと良い方法ある?

210:デフォルトの名無しさん
11/06/19 12:11:39.83
俺様しか使わないような機能が実装されるはずだとかかもしれんとか思うのは軽い病気だと思う。
っていうか、関数の一覧見れば分かるだろ。
VBってもう死亡宣告されて10年経過してる言語だぞ

211:デフォルトの名無しさん
11/06/19 12:39:11.53
ないなら作ればいいじゃない

212:デフォルトの名無しさん
11/06/19 12:59:22.41
>>210
>>209 の書き込みから、「実装されるはずだとかかもしれんとか思う」と
読み取れちゃうのはちょっと重い病気だと思う。

適切な病院に行くか、小学校からやり直すべき。

>>209
なんでそんなことする必要があるのか気になるが、「CBool() で変換でき
ること」が絶対条件なら On Error にするしかないと思う。

213:デフォルトの名無しさん
11/06/19 13:25:14.89
>212
馬鹿だろお前。

214:デフォルトの名無しさん
11/06/19 13:43:07.32
>>212 の書き込みに対して「馬鹿」としか言えない >>213
ちょっとかわいそうだ。

早い目に、小学校からやり直せよ。(w

215:デフォルトの名無しさん
11/06/19 13:46:09.83
(お前が)言われなきゃ分からない、の間違いじゃないのかしら。

逆に聞くが、存在するはずが無いと思ってる機能が存在するかどうか人に聞く馬鹿がいるのか。
あるはずとかあるかもしれないと思ってるから聞くんだろうが。

本当馬鹿だろお前。

216:デフォルトの名無しさん
11/06/19 14:08:32.40
>>215
ないと思ってても、だめ元で聞いてみる奴はいくらでもいるだろ。

小学校に行って、勉強はもとより友達と会話するところからやり直してこい。

217:デフォルトの名無しさん
11/06/19 14:15:46.08
[だめ元] ⊆ [あるかもしれない]
人に手取り足取り一から十まで全部説明されないと理解できないのは馬鹿の特徴か。

218:デフォルトの名無しさん
11/06/19 14:28:58.25
>>217
>> 存在するはずが (*無いと思って*) る機能が存在するかどうか人に聞く馬鹿がいるのか。
> ないと思ってても、だめ元で聞いてみる奴はいくらでもいるだろ。

自分の書いたことには責任を持ちましょう。(w

219:デフォルトの名無しさん
11/06/19 14:33:26.21
意味不明。
高校の数Iでやるような論理学が理解できないのも馬鹿の特徴の一つだな

220:デフォルトの名無しさん
11/06/19 16:06:27.63
>>219
日本語が理解できてないクズよりましだけどな。

221:デフォルトの名無しさん
11/06/19 16:46:23.41
>俺様しか使わないような機能が実装されるはずだとかかもしれんとか思うのは軽い病気
非常に解りにくい日本語なのですが
実装されるはずだと思う、あるいは、実装されてるかもしれんと思う だと解釈しよう

俺が使いたい機能なんだから絶対に実装されてるはずだ、と思うのは病気かもしれんが
こんな機能があったらいいな、すでに実装されてないかな?と思うのは病気でもなんでもないと思うが


222:デフォルトの名無しさん
11/06/19 16:55:44.86
アスペルガーの人は病識がない。
自分を客観的に見られないという自覚が一切ない。

どう考えても一般性がない(そんな機能お前以外誰が必用とするんだってこと)
機能を、普通の人は「すでに実装されてないかな?」なんて思わないんだよ。
絶対に。

そう思うのは病気だから。
まあ病識がない人に自覚しろって言っても無理だろうけどねえ

223:デフォルトの名無しさん
11/06/19 17:26:57.93
>>222
>アスペルガーの人は病識がない。
>自分を客観的に見られないという自覚が一切ない。

自己紹介乙。

224:デフォルトの名無しさん
11/06/19 17:46:17.47
つか、>222は
ある変数がほかの型に変換可能かどうかチェックする機能
は一般性がないと思うのか


225:デフォルトの名無しさん
11/06/19 18:01:11.11
変数って何だよ。
それを言うなら"値"じゃないのか。

そもそも>>209のいうような機能の需要が一般的かどうかの話をしているのであって、
「ある変数がほかの型に変換可能かどうかチェックする機能」の話なんかしてない。

馬鹿じゃないのか。

226:デフォルトの名無しさん
11/06/19 18:56:17.63
>>208
やっぱり分かり難いでしょ
Randomizeのヘルプの文章なんだけど

×Number に同じ値を指定して Randomize ステートメントを使用しても、
 前の乱数系列を繰り返すことはできません。
○Number に同じ値を指定して Randomize ステートメントを使用しただけでは、
 前の乱数系列を繰り返すことはできません。

昔のBASIC知ってる人には何でRandomizeだけで乱数系列初期化してくれないの?と思ってしまう
ヘルプも分かり難いけどVBの仕様も変

227:デフォルトの名無しさん
11/06/19 18:57:57.97
あのね、二人とも。
そんなに喧嘩する程のものでは無いと思うんだ。
CBoolで変換出来るものを判定すればいいだけでしょ?
それってIsNumericでいいんじゃないかと思うんだ。
たしかCboolで変換出来るものって数値型で、0ならFalse、0以外ならTrueだったんじゃないかと思うんだけど。
もっとも、厳密にTrueやFalseを判定したいなら0か-1と言う条件を付け加えることになるけど、
今回はそうじゃなさそうだし。
違ってたらごめんね。

みんな仲良くやるわさ。

228:デフォルトの名無しさん
11/06/19 19:00:55.40
>>208
あ、毎回同じ乱数を発生させたい場合ね
例えばプロシージャ中で3回乱数を使ったとして
そのプロシージャを何回実行させても、いつも同じ乱数値を使いたい場合

229:デフォルトの名無しさん
11/06/19 19:09:41.30
>>209
Option Compare Text
private function is_bool(byval q$) as boolean
Select Case q$
  Case "1","0","false","true": is_bool = True
  Case else: is_bool = False
end select
end function

230:デフォルトの名無しさん
11/06/19 19:12:16.34
Select Case q$
  Case "1","0","false","true": is_bool = True
end select


231:デフォルトの名無しさん
11/06/19 19:22:02.49
Select Case ucase(q$)
  Case "false","true": is_bool = True
  Case else: is_bool = IsNumeric(q$)
end select


232:デフォルトの名無しさん
11/06/19 19:31:44.23
あら、TrueやFalseは文字列にするとIsNumericに反応しなくなるのね。
じゃ多分>>231の人が言ってるUCaseのをLCaseにしたのがFAだわさ。

233:デフォルトの名無しさん
11/06/19 19:58:20.77
>>225
もうそろそろ引っ込んだら?
どう見ても哀れだよ、君。

234:デフォルトの名無しさん
11/06/19 20:06:36.54
またスレが伸びてるから言い争いしてると予想したが、裏切ってくれなかったか。
毎回同じ人が煽ってんのかな。

235:デフォルトの名無しさん
11/06/20 00:52:07.32
>>226,228
もしかしてVB6より前のVB?
>>208のコードをCommand1_Clickにいれて何度か押したけど
Rnd -1のある場合の10個の数字と、ない場合の10個の数字は違うけれど
Rnd -1のあるなし関わらずコマンド何度クリックしても同じ10個の数字しか出なかった(Randomizeで初期化されてる)けど

236:デフォルトの名無しさん
11/06/20 09:21:33.52
下記サイトを参考に任意の日付までのシリアル値の計算はできたのですが、
逆にシリアル値からyyyy/mm/dd hh:mm:ssというように変換するにはどのように
すればよいのでしょうか?

VB6を使用しています。
よろしくお願いします。

www.happy2-island.com/access/gogo03/capter01001.shtml
'----------------------------------------------------------------------
'任意の日時までのシリアル値を求める
'----------------------------------------------------------------------
Public Function getTimeB(pNow As Date) As Currency

Dim lngTime As Currency

'pNowまでの経過秒数を求める
lngTime = DateDiff("s" _
, "1970/1/1 9:0:0" _
, pNow)

'1/1000秒部分を求める
':元の値を1000倍する
lngTime = lngTime * 1000
':Timer関数で求めた1/1000秒部分を加える
lngTime = lngTime + Fix((CDbl(Timer) - Fix(CDbl(Timer))) * 1000)

getTimeB = lngTime

End Function

237:デフォルトの名無しさん
11/06/20 19:58:50.60
>>236
MSDNの説明ではDate型の実体はDoubleだとあるから、
ある意味Date型そのものが既にシリアル値であるといえる。

自前でシリアル値に変換する意味がわからない。

238:デフォルトの名無しさん
11/06/20 22:25:52.66
Debug.Print CDbl(Now)
Debug.Print CSng(Now)
Debug.Print CDec(Now)
Debug.Print CLng(Now)

Dim v
v = Now
Debug.Print v
Debug.Print CDec(v)

239:デフォルトの名無しさん
11/06/20 23:33:02.67
>>235
VB6だけど何で違うんだろ~
Private Sub Command1_Click()
Dim i%
  Debug.Print "---"
  Randomize 123
  For i% = 1 To 3: Debug.Print Rnd: Next
End Sub
---
0.7545646
0.5271199
0.3011898
---
0.1030034
0.2489544
0.3967338
-Rndしないと毎回違うパターンがでる

240:236
11/06/21 01:31:17.21
>>237
レスありがとうございます。
私がやりたいのはシリアル値に変換するのではなくて、
シリアル値からyyyy/mm/dd hh:mm:ssというように変換したいのです。

241:デフォルトの名無しさん
11/06/21 02:22:59.69
Win32APIとかでそういうの扱えるの無かったっけ?よく覚えてないけど

242:デフォルトの名無しさん
11/06/21 02:24:20.96
SystemTimeToFileTime
FileTimeToSystemTime
あたり?

243:デフォルトの名無しさん
11/06/21 02:45:14.26
>>236の逆変換をやるの?
dt = DataAdd("s", lngTime \ 1000, "1970/1/1 9:0:0")
これでいい?


244:デフォルトの名無しさん
11/06/21 02:47:55.34
>ngTime = lngTime + Fix((CDbl(Timer) - Fix(CDbl(Timer))) * 1000)

これTimer2回呼び出してるけど問題ないの?

245:デフォルトの名無しさん
11/06/21 02:57:11.65
>>239
もう一度やってみたら貴公の言うとおり再現した
でも>>235のレスしたときは>>235のとおりだった。>>235のレスしたときコメントアウトし忘れてたのかもしれない
疑ってすまなかった

246:デフォルトの名無しさん
11/06/21 03:00:03.19
あれ、でもコメントアウトの問題なら表示される数字はどちらの試行でも同じはずなのに違ってたな。なんでだろう


247:デフォルトの名無しさん
11/06/21 03:04:06.73
あ、原因判明したかも。コメントアウトの問題じゃなくてイミディエイトのカーソル位置の問題だ。おそらく。
カーソルが一番下じゃなく一回分の試行の手前あたりにあったんだなきっと

248:デフォルトの名無しさん
11/06/21 11:47:09.85
あれはカーソル位置から書き始めるから困る

249:236
11/06/21 14:45:46.70
>>243
ありがとうございました。
教えていただいた通り以下の通りで出来ました。
DataAddという物があったのですねー。
236で書いたのは、シリアル値から日付へ変換する方法を
探している際に見つけて、これの逆をやればできるかなと
思ったんですが、差分の部分でつまづいていました。
本当にどうもありがとうございました!

'---------------------------------
'シリアル値から日付へ
'---------------------------------
Function STD(SR As Double)


Dim lngTime As Double
lngTime = SR

Dim DT As Variant
DT = DateAdd("s", (lngTime / 1000), "1970/1/1 9:0:0")

STD = DT


End Function

250:デフォルトの名無しさん
11/06/21 16:13:03.13
>>244
最初のTimerの呼び出し時に 1234.999秒ですぐ次の呼び出しで1235.000になっていた場合、さてどうなるかな?

251:デフォルトの名無しさん
11/06/21 16:15:41.80
その理屈ならミリ秒取得前に引数で日付取得じゃ秒のズレが起きたりしないの?
t1 = Timer
n = Now
t2 = Timer
とかして挟んでt1とt2からミリ秒取得したほうが

252:デフォルトの名無しさん
11/06/21 19:15:05.59
だからData自体が最初からシリアル値になってるのにどこに自前で変換かます必用があるのかと...
頭悪いのかな

253:デフォルトの名無しさん
11/06/22 00:28:38.30
頭悪いのかな
だって
一言多いのねこの人
コンプレックスを抱えてる人間のようです
だから誰かを貶さないといられないのです
自分だって無知な頃があったはずなのに
いや、今も無知だから心が狭くなっているのでしょうか
もっと精進すべきです

254:デフォルトの名無しさん
11/06/22 00:45:52.70
Dataの中身のDouble値そのままじゃ他の言語と互換性無いからじゃね
小数点以下が時間とかどうなの?

255:デフォルトの名無しさん
11/06/22 01:13:50.55
質問です。

JP1(日立の運用ツール)からVBSを起動し、
VBSからExcelマクロを起動しようとしています。

つい最近、WinServer2003からWinServer2008のサーバーへと
環境が移ったのですが、移行後にJP1からVBSを起動したところ、
"Workbooks クラスの Open プロパティを取得できません"
とエラーを吐きExcelマクロが起動できなくなりました。
似たような経験をお持ちの方がいましたら、
どうやって解決したかを教えてもらえないでしょうか。

256:255
11/06/22 01:16:18.70
以下のソースコードの「ワークブックを開く」の箇所で
"Workbooks クラスの Open プロパティを取得できません"
とエラーになるようです。

<VBS ソースコード>

'Excel
Set objExcelApp = CreateObject("Excel.Application")

'ワークブックを開く
Set objExcelBook = objExcelApp.Workbooks.Open("C:\workspace\perl_test\test_vba.xls", , True)

'Excel側マクロ(main)を起動
objExcelApp.Run "'" & "test_vba.xls" & "'!main", 2

257:255
11/06/22 01:18:28.93
<参考>
・手動実行なら問題なく起動します。
・旧環境、新環境ともにJP1がインストールされている
 サーバーにはExcelがインストールされていないが、
 実行先のサーバーにはExcelがインストールされている。

よろしくお願いします。

258:249
11/06/22 01:19:11.34
>>252
わたしへのレスですか?
もしそうだとしたら、HelloWorld!卒業くらいのレベルなので、
おっしゃっている事がさっぱり分からないです。

私がやりたいのは、あるシリアル値があったとして、それが
何年何月何日なのか分からないため、それを日付にしたいんです。

もっとスマート?な方法があったら、ご教示いただければ幸いです。

259:デフォルトの名無しさん
11/06/22 01:23:38.59
>>257
適当だけど、実行元のサーバーにEXCELのランタイムは設定されてる?

260:デフォルトの名無しさん
11/06/22 01:23:53.23
なるほど、自分で>>239に書いた内容はもう忘れたわけですか。

261:デフォルトの名無しさん
11/06/22 01:25:27.92
いや>>239じゃなくて>>236

262:255
11/06/22 01:40:11.91
>>259
確認しないとわからないですが、
ないかもしれません。
明日調べてみます。
ありがとうございます。

263:249
11/06/22 01:53:29.94
>>260-261
失礼ですが、>>249の4-6行目をよく読んでみてください。
それで双方理解できないならば、いづれかもしくは双方の
理解力に問題があるということで。

ちなみに、>>258で書いたスマート?な方法はご存知ないですか。

264:デフォルトの名無しさん
11/06/22 01:57:08.22
"シリアル値"が分からない私も初心者

265:デフォルトの名無しさん
11/06/22 02:47:12.69
>>252
シリアル値の時刻を求める(DateDiff, Timer)
URLリンク(www.happy2-island.com)
> JavaScriptのDate/getTimeと同じシリアル値の日時を求める方法です。





266:デフォルトの名無しさん
11/06/22 13:49:31.56
時刻のシリアル値ってふつー秒単位じゃないのか

267:デフォルトの名無しさん
11/06/22 17:25:47.73
なにいってんだこいつ

268:デフォルトの名無しさん
11/06/22 21:38:11.18
VBやエクセルなどのVBAではシリアル値とは整数部が1970/1/1からの日付で、小数部が時間を表すフォーマット
エクセルの普及からシリアル値といったらこっちになることが多い

269:デフォルトの名無しさん
11/06/22 21:48:02.32
>>256
プロジェクト→参照設定
でエクセルのライブラリ参照とかじゃない?

270:デフォルトの名無しさん
11/06/22 22:04:33.32
>>263
文字列に変換するなら
Debug.Print Format(DT, "yyyy/mm/dd(AAA)")

271:デフォルトの名無しさん
11/06/22 22:38:20.41
>>270
いや、俺も最初そう思ったけど、ある年月日から現在までの期間を"YYYY/MM/DD hh:mm:ss"のフォーマットで
何年、何ヶ月、何日の何時間、何分、何秒経ったかを表示したいって言ってるんじゃないの?

272:デフォルトの名無しさん
11/06/22 22:57:14.49
それ、「ある年月日から現在までの期間」が例えば 31日だったとして、
今日だったら、1ヵ月と表示するけど、同じ期間でも来月だったら、
1ヵ月と1日って表示するってこと?

うるう年まで考慮するなると、一発でちゃんとしたものができるか俺
には自信がない...。

273:デフォルトの名無しさん
11/06/22 23:04:35.40
>>255
>サーバーにはExcelがインストールされていないが、
>実行先のサーバーにはExcelがインストールされている。
これ、1行目はJP1の管理サーバーって事で良いんだよね?
Excelは実行先だけで良いはず。気になるのは、手動で動かした
ときは上手くいって、JP1から起動させるとダメだってとこだな。
思いつくのは、JP1からキックしたときの権限じゃないかな。
実行ユーザーを指定できるなら、手動で動かしたときと同じ
ユーザーで起動するようにしてみたらどうだろ。
後は、objExcelAppにちゃんとインスタンスが入ってるか(nullじゃないか)
と、FileSystemObjectで、Excelファイルが開けるか試してみて
CreateObject周りでおかしいのか、Excelオブジェクトの何かが
いけないのかを切り分けるかな。

274:デフォルトの名無しさん
11/06/22 23:13:20.30
ある時刻のt1 as dateがあって、そこから今までの時間なら
Dim sec&
sec& = DateDiff("s", t1, Now)
秒はこれで出るけど
月は30.5日くらいにしとく?って客先に聞かないと

んん?これって求めたいものはt1そのもの・・謎は深まるばかり・・

275:デフォルトの名無しさん
11/06/22 23:50:29.54
>>236のコードは>>265のサイトのコードのようだが

276:263
11/06/22 23:56:16.48
>>270
レスありがとうございます。
エクセルで日付にしていましたが、Format関数?で出来るんですね。
わざわざありがとうございました。

>>271
説明が駄目駄目ですみません。
>>258にも書いたのですが、
このように説明すれば分かりやすいでしょうか。
例えば、Q.次のシリアル値は何年/何月/何日 何時:何分:何秒を表しているかを求めるコードを書け。
という事をお聞きしたかったのです。
日付のデータが記録されているファイルを操作するのに、その中身がシリアル値だったので、日付形式
に変換したかったのです。


ところで、>>252氏は私へのレスではなかったのでしょうか、アンカーもなくIDのないスレッドだったの
でよく分からなくて。
>だからData自体が最初からシリアル値になってるのにどこに自前で変換かます必用があるのかと...
>頭悪いのかな

277:デフォルトの名無しさん
11/06/22 23:59:51.75
>>236 はさ、
>>238を読んでんのかな。

1970/1/1 09:00:00を基準としたのが重要なの?
もしそこにこだわらなくて良いなら、
Dim dateVal As Date
Dim dblVal As Double

dateVal = Now()
dblVal = CDbl(dateVal)

Call MsgBox(dblVal)
Call MsgBox(CDate(dblVal))
これで、やりたい事はできんじゃねーの?
236がいうシリアル値ってのが、万国共通か規格があんのかな。
googleで上位に来るのは1900/01/01なんだけどな。

278:デフォルトの名無しさん
11/06/23 00:07:06.39
>>277
シリアル値の時刻を求める(DateDiff, Timer)
URLリンク(www.happy2-island.com)
> JavaScriptのDate/getTimeと同じシリアル値の日時を求める方法です。


279:デフォルトの名無しさん
11/06/23 00:08:31.18
>>276
何か面倒臭そうな人なので一応レスしとくかな....

ひょっとして既に何らかの方式による既存のシリアル値のデータがあって、
それを日付に戻す方法が知りたかったのかも知れないけど、>>236からそれを読み取れって
そりゃ無理難題。

シリアル値っていったっていろんな方式があるんだから、>>236みたいに
日付⇒シリアル値はできたが逆はできないって書かれたら、要は2つの日時の大小比較とかスパンが
計算できる値なら何でもいいはずだと普通は思うんじゃないの?

280:263
11/06/23 00:24:33.93
>>277
無知故にアンカーがないとレス内容だけでは、
私へ対してのレスか分からず>>238自体は見ましたが、
別の人へのレスだと思ってしまいました。
あと、最初に書いたサンプルサイトの値のUTCというのでしょうか、
その値を基準にしたかったのです。
今この書き込みを見るまで、1970年1月1日0時0分0秒がシリアル値
の基準で1つしかないものと思っていました。
(+9されているのは日本時間?をしているようでしたのでそのままに)

>>279
>>252氏でしょうか?
レスありがとうございます。
うまく説明できなくてすみません。
私としては、「任意の日時までのシリアル値」を求められれば、それは
逆を行えばシリアル値からyyyy/mm/dd hh:mm:ssと日時を求められると
単純に思ったのです。

サンプルサイトの例で下記のようにできたので、
2011/06/01 12:34:56 → 1306899296000
上に書いた通り、逆を行えば不明なシリアル値を下記のように日時に
できるものとばかり。
1308799500000(何日の値か不明) → 2011/6/23 12:25:00

続きます。

281:249
11/06/23 00:27:55.96
変な流れにしてしまってすみませんでしたが、
>>243氏のレスで私にも理解でき、>>246の通りできましたので、
皆さんに再度お礼を言って質問を終了させていただきたいと思います。

本当にどうもありがとうございました!

282:デフォルトの名無しさん
11/06/23 00:30:33.31
度々すみません訂正です。

誤:>>246の通りできましたので、
正:>>249の通りできましたので、

失礼しました。
ありがとうございました。

283:デフォルトの名無しさん
11/06/23 00:42:05.54
lngTimeがLong型じゃないことのほうが気になっている俺がいる

284:デフォルトの名無しさん
11/06/23 00:50:59.32
VB6付属のMSDNライブラリのVBの項目の定数と変数の名前付け基準によるとプリフィックスには
Long型はlng
Currency型はcur
Double型はdbl
をつけた方が分かりやすいとある



285:デフォルトの名無しさん
11/06/23 00:51:48.77
Variant型はvnt
Date型はdtm

286:デフォルトの名無しさん
11/06/23 07:08:53.68
お前らさすがにレベル低すぎて開いた口が塞がらないぞ。

287:デフォルトの名無しさん
11/06/23 08:09:18.92
>>286のレベルの高いネタ振りに期待

288:デフォルトの名無しさん
11/06/23 14:05:52.11
>>236はさ、>>278のサイトの掲載されているコードを使ったの?



289:デフォルトの名無しさん
11/06/23 14:14:49.65
>>278のサイトのはVBAっぽいような気がするんだけど
プリフィックスが気持ち悪いな。Long型でもないのにlngを使うのはよくないと思う(誤解を招きかねない)
getTime関数でTimerを2回呼び出すのは時刻の正確さを欠く可能性があると思う
同様の理由でNowとTimerを併用するのも時刻の正確さを欠く可能性があると思う
getTimeB関数は任意の日時とあるのにTimerでミリ秒を補完するのはおかしいと思う
getTime関数はWin32APIのGetSystemTimeAsFileTime関数、getTimeB関数はWin32APIのSystemTimeToFileTime関数を使えばいいと思う


290:デフォルトの名無しさん
11/06/23 20:34:10.83
UTCの事を言っている人がいるのにそれには触れない件。
というか気付いていないんだろうな。
何にでも例外はあるがこのスレの連中はやっぱりほぼ・・・
続く。

291:デフォルトの名無しさん
11/06/23 20:51:46.69
UTCのことは>>278のサイトの冒頭に書いてあるが?

292:デフォルトの名無しさん
11/06/24 12:15:28.11
ここまで>>291の自演。

293:デフォルトの名無しさん
11/06/25 06:08:22.32
Form2.Show vbModal 'Form2をモーダルで呼ぶ

Form2にはボタンが複数あって、状況によってデフォルトのボタンを設定したい
Private Sub Form_Load()
  'Me.Show ' ← Modal時は実行できない
  Command1.SetFocus
End Sub

Form_Load中でSetFocusしようと思ったら、その前にMe.Showしないといけない
でもModalで呼ばれるからMe.Showはできない

★ ModalなForm2のCommand1をSetFocusする方法はありますか?

294:デフォルトの名無しさん
11/06/25 13:32:36.53
>>293
デザイン時にTabIndexの0をあえて欠番にしておいて、Loadイベントで
フォーム表示時に最初にフォーカスを設定したいコントロールのTabIndexを0にする。

VBを2年ぶりで触った俺でもすぐにできたぞ。

ところで、そういうのって「デフォルトのボタン」って言うのか....?

295:デフォルトの名無しさん
11/06/25 13:44:37.84
TabIndexなんか触りたくないと言いそうだから別解

'Form2
Private mShown As Boolean

Private Sub Form_Activate()
  If Not mShown Then
    OnShown
  End If
End Sub

Private Sub OnShown()
  mShown = True
  Command1.SetFocus
End Sub

296:デフォルトの名無しさん
11/06/25 15:57:49.62
>>294,295
なるほどActivateでしたか、ありがとうございました!
Modalなのでその1回だけ実行するというロジックは不要と思います
やるとしたらStatic変数が好きです
デフォルトのボタンと言ったのは、要は自作のメッセージボックスを作っていたので・・

297:デフォルトの名無しさん
11/06/25 16:31:29.25
デザイン時のコマンドボタンのプロパティでDefaultをTrueにすればいいんでないの?

298:デフォルトの名無しさん
11/06/25 16:37:28.78
申し訳ない
コマンドボタンにDefaultプロパティというのがあって、
これをTrueにすることでデフォルトボタンにできるという初歩的な見落としがありました
でもActivateは勉強になりました、Form_Loadの後に来るのはResizeかPaintかとか探してはいたのですが

299:デフォルトの名無しさん
11/06/25 16:51:47.19
Defaultプロパティの本来の使い方は、Enterキー入力を受け取るボタンを決めること。

これは>>293の言っていることと違うと思ったから、Defaultは知ってたけど紹介しなかったんだけど....

300:デフォルトの名無しさん
11/06/25 16:58:50.28
ActivateはそのModalなFormからさらにModalな別のFormを開きそこから戻ってきたときにも発生するよ
例えば下の例ならForm1からForm2を呼び出したときとForm3からForm2に戻ったときにActivateが呼び出されるよ

'Form1
Private Sub Command1_Click()
Form2.Show vbModal
End Sub

'Form2
Private Sub Command1_Click()
Form3.Show
End Sub

Private Sub Form_Activate()
Debug.Print "Activate", Now
End Sub

301:デフォルトの名無しさん
11/06/25 17:00:08.84
>Form2にはボタンが複数あって、状況によってデフォルトのボタンを設定したい

これから察するにプロパティのDefaultじゃちょっと違うよね?

302:デフォルトの名無しさん
11/06/25 17:28:43.40
Default設定したら状況によってとかいうのが出来ないよね

303:デフォルトの名無しさん
11/06/26 02:23:41.63
テストプログラム作ってForm_Load中でボタンのDefultプロパティを設定してみましたが
Form1ではボタン周りに黒枠が表示されてEnterキーが効くのに
Form2ではDefultプロパティの設定が無視される
ヘルプではフォーム毎にEnterを受け付けるボタンが設定できると書いてあるのに
どうもDefultプロパティの挙動がわからない・・
ボタンのキャプション周りのフォーカス枠表示も欲しいし、やはりSetFocusにします

304:デフォルトの名無しさん
11/06/26 22:05:37.83
Defaultってデザイン時だけじゃなくて実行時にも変更可能なのか
知らなかったわ

305:デフォルトの名無しさん
11/06/28 21:39:38.66
アプリの起動時に、ComboBox1に商品の情報を追加したいのですが
「ニンジン」、「かぼちゃ」、「キャベツ」の3品を追加するにはどうすればいいか。
また、初期表示として「ニンジン」が表示されているようにするにはどうすればいいですか
教えていただきたいです。メソッドの部分はどう書けばいいのでしょうか。
Private Sub frmMain_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load




End Sub

306:デフォルトの名無しさん
11/06/28 22:01:25.21
>>305
vb.netみたいだから、次からはこちらへ
スレリンク(tech板)

'追加
Me.ComboBox1.Items.Add("ニンジン")
Me.ComboBox1.Items.Add("かぼちゃ")
Me.ComboBox1.Items.Add("キャベツ")

'初期表示
Me.ComboBox1.Text = "かぼちゃ"

307:デフォルトの名無しさん
11/06/28 22:04:02.00
すまん
ニンジンが初期表示だった!

Me.ComboBox1.Text = "ニンジン"

308:デフォルトの名無しさん
11/06/28 22:38:14.08
>>306-307
ありがとうございます。

309:デフォルトの名無しさん
11/06/30 15:21:23.15
For i%=1 to 4: Combo1.AddItem Choose(i%, "ニンジン","かぼちゃ","キャベツ","たまねぎ"): Next

310:デフォルトの名無しさん
11/06/30 15:28:29.93
Dim t$,buf$(),i%
t$="ニンジン,かぼちゃ,キャベツ,たまねぎ,セロリ,パセリ,ピーマン,ごぼう"
buf$=Split(t$,",")
for i%=0 to Ubound(buf$):Combo1.AddItem buf$(i%):next

311:デフォルトの名無しさん
11/06/30 15:45:18.92
ひさびさに AS の無い宣言を見たw

312:デフォルトの名無しさん
11/06/30 17:18:31.01
%とか&とか$とか#とか昔のBASICみたいで嫌う人がいるけど
これはコード中で型が判るから絶対に有効だよ
変数名にいちいちstrnameとかlongpointとか入れる人もいるけど実に可読性が悪くて腹立つ

313:デフォルトの名無しさん
11/06/30 17:30:20.52
strnameとname$のどっちが可読性が上かは
読む人の慣れとかクセとかでどっちが上とは言えないと思うが

世の中にはstrnameとかいう名前の数値型の変数を定義するような奴がいたりするからなぁ

314:デフォルトの名無しさん
11/06/30 18:41:31.75
型のある変数を使わなければ解決だな
毎回長文コーディングになるけど
objectとかは知らん

315:デフォルトの名無しさん
11/06/30 19:44:59.73
10年遅れのハンガリアン
っていうか、>>310のようなマクロてんこ盛りのアセンブラみたいなコード読みたくないw

316:デフォルトの名無しさん
11/06/30 23:35:59.77
記号打つときシフトキー押すのしんどい
Dim以外では変数名を途中入力で補完できりゃいいのに

317:デフォルトの名無しさん
11/06/30 23:54:24.40
あずにゃ・・・じゃなくて、As ~で型によって色が変われば分かりやすくね?
つか、変えられなかったっけ?
おれは、dblExsample lngExsample intExsample strExsample とか先頭みるだけで
すぐわかるけどなー。
%とか&とか$とか#とか初めて知ったw
低レベルでさーせん。

318:デフォルトの名無しさん
11/07/01 00:15:45.44
俺は$が文字型ってくらいしか知らないな。ポケコン世代だけど

319:デフォルトの名無しさん
11/07/01 14:08:40.58
その手の記号もAsと同じだから宣言時だけつけてりゃ使えたような気がする
Dim name$, unko&(10)
name = "namae"
unko(5) = 1000

って



320:デフォルトの名無しさん
11/07/01 14:10:25.36
>>317
>>265のサイト見てみ。lngというプリフィックスが

321:デフォルトの名無しさん
11/07/01 14:20:08.06
format$
とかで明示的にStringだってのも懐かしい話だな・・
MSDNもVariantのString みたいな言い回しがめんどくさかったなぁ

322:デフォルトの名無しさん
11/07/01 19:47:55.35
割り算で結果がどうもおかしいと思ったらIntegerで受けてたとか良くあるじゃん
wari! = a% / b%
ならそんな間違いは起こらないし、なんでこれが流行らなかったのか不思議

323:デフォルトの名無しさん
11/07/01 19:55:21.14
そんな間違いあんただけだってw

324:デフォルトの名無しさん
11/07/01 21:01:31.55
&とか%とかそういので型変換もできたらいいなと思う

325:デフォルトの名無しさん
11/07/01 21:50:12.69
VB6.XまたはSP7に期待ですね
そんなもの出ないけど

326:デフォルトの名無しさん
11/07/04 18:41:27.30
時々、Lineメソッドで間違ってないのにパラメータがどうこうってエラーが出る?
プロジェクトを一旦閉じてから開き直すと直るけど

327:デフォルトの名無しさん
11/07/04 20:27:45.01
>>326
エラーが出るのならば、どこかしらが「間違ってる」と思った方がいいよ。

詳細が分からないから勘だけど、どっかでメモリリーク起こしてるんじゃないかな。


328:デフォルトの名無しさん
11/07/04 20:30:15.50
馬鹿っぽい質問に馬鹿っぽい回答だな....

329:デフォルトの名無しさん
11/07/04 20:38:46.74
>>326
変数はもちろん Variant 型だよな!

330:デフォルトの名無しさん
11/07/04 21:19:46.26
>>326
>使用しているOS、VBのバージョン、サービスパックのバージョン

331:327
11/07/04 22:59:04.79
馬鹿っぽくて悪かったな。

332:デフォルトの名無しさん
11/07/05 03:16:49.63
エスパーか

333:デフォルトの名無しさん
11/07/06 13:05:43.46
LE使いってどれくらいいる?

334:デフォルトの名無しさん
11/07/06 18:53:51.59
>>327
やっぱり、メモリリークとかでしょうね、VBの
Lineメソッドでエラーにはなるけど、決まったコードで出るわけではないし
ある特定のプロジェクトで出るわけでもないので詳細は書きようもないですが
プログラムがある程度大きい場合に、たまに発生するようです
再現したらキャプろうと思ったけど期待すると出てこない・・

335:327
11/07/06 23:13:20.19
>>334
エラー画面をキャプチャーしても原因はそこでは無いだろうから、
途中経過をモニタリングすべきだと思います。
(メモリの消費状況、インスタンスの開放、配列のErase等々)

どうみてもプログラムに間違いが無さそうならば、
Service Packが最新になっているか確認してみてはどうでしょう?


336:デフォルトの名無しさん
11/07/06 23:15:05.01
環境を疑う前にコードを疑えって。
ダメな奴ほど環境を疑う。

337:デフォルトの名無しさん
11/07/07 00:13:49.97
それほど対してソースコードは無いんですが実行速度が遅くて困っています
現状フォーム内にメソッドを記述して全ての処理を動かしているのですが
クラスに書き込めば速度向上が望めるでしょうか
それとも実行速度ってコード量に比例するってだけなのですか

教えてください。

338:デフォルトの名無しさん
11/07/07 00:36:33.41
LE使いなのでよう知らんがコンパイルスイッチとかいうので実行速度を最適化とかいうの使えばいいとちゃうのん?LEそういう機能がないので全くわからないが。ただの独り言です。

339:デフォルトの名無しさん
11/07/07 00:39:22.99
>>337

>クラスに書き込めば速度向上が望めるでしょうか
望めない。理論的にはクラス生成と呼び出しの分遅くなる

>それとも実行速度ってコード量に比例するってだけなのですか
いいえ
起動にかかる時間はコード量(厳密にはコンパイル後のサイズ)に影響されます
起動後の実行速度には関係ありません

340:デフォルトの名無しさん
11/07/07 00:46:51.19
コンパイルスイッチってvbにありましたっけ??
C言語とかだとコンパイラーが持ってたりしますけど・・・

341:327
11/07/07 08:26:20.69
>>337
どのような処理なのか分からないと高速化もアドバイスしにくいですが、
一般的にはAPIの使用、キャッシュ、バッファリング、アルゴリズムの最適化
といったところでしょうか。

フォーム内にコードが大量にあるとすると、ロードに時間が掛かる可能性はあります。

>>340
オプション画面から指定できます。
VB5からネイティブコンパイル可能になったからです。

IDEからの動作ですと、インタプリタ(のような)動作ですので、効かないと思います。


342:デフォルトの名無しさん
11/07/07 16:54:10.83
自分で契約しているサーバの負荷等を調べるものを作っているのですが、
8つ契約しているので、下記のコードで1個1個順番に行っていると遅いので、
マルチスレッド?で行いたいのですが、下記の事をマルチスレッドで同時に
行うにはどのようにすればよいのでしょうか?
(下のソースも部分的にサンプルサイト等を見て書いたものなので、自分は
 ほとんど始めたばかりな感じで、マルチスレッドの基本についても全く分かりません。)

Windows XP SP3 + VB6 SP6を使っています。
もし、やり方が分かる方いましたら教えていただけるとありがたいです。



343:342 ◆XuL15E5UEM
11/07/07 16:55:28.31
Private Sub Server_Check(ByVal MyServer As String, ByVal MyNumber As Integer, ByVal CPU As String)
On Err GoTo Err
'
If MyServer = "" Then Exit Sub
'サーバーチェックを実行
If MyCounter = 1 Then
Set objIE = CreateObject("InternetExplorer.Application")
End If
  '
With objIE
.Navigate "http://" & MyServer & ".example.com/cgi/check.php"
Do Until ((.Busy = False) And (.ReadyState = READYSTATE_COMPLETE))
Loop
End With
' 必要な変数を宣言する
Dim stCsvData As String
'エラー
If objIE.Document.All(0).InnerHTML = "" Then GoTo Err
If InStr(objIE.Document.All(0).InnerHTML, "404 Not Found") <> 0 Then GoTo Err

344:342 ◆XuL15E5UEM
11/07/07 16:55:48.77
'データ取得
stCsvData = objIE.Document.getElementById("status").InnerHTML
' カンマ区切りで分割して配列に格納する
Dim stArrayData() As String
stArrayData = Split(stCsvData, ",")
'
ReDim Preserve stArrayData(UBound(stArrayData()) + 1)
stArrayData(13) = CPU
' データを確認する
Dim i As Integer
For i = 0 To UBound(stArrayData())
MSHFlexGrid1.TextMatrix(MyNumber, i + 1) = stArrayData(i)
Next i
'
If MyCounter = 8 Then
objIE.Quit
Set objIE = Nothing
End If
Exit Sub
Err:
If MyCounter = 8 Then
objIE.Quit
Set objIE = Nothing
End If
End Sub

以上です、よろしくお願いします。

345:デフォルトの名無しさん
11/07/07 17:58:47.53
まて・・・VB6でマルチスレッドはAPI使えばいけるが
確かやばかった記憶が・・・・

どうせなら同じプログラム8つ動かしてマルチプロセス
とかどうよ?w

346:デフォルトの名無しさん
11/07/07 20:52:56.96
VB6はシングルスレッドじゃないのか

347:327
11/07/07 23:21:24.06
>>342
マルチスレッドにするにせよ、プロセスを分けるにせよ、
このプログラムのようなIEのインスタンスが一つしか
作成されないような構造では、上手く行かないでしょう。

まず、IEのインスタンスが8個作成されるように改造してください。
(それ自体が不可能な場合はsocketを使用するなどして、
かなりの部分を自作する必要があるので、かなり難しいかと)

IEのインスタンスが複数作成できたならば、問題は
Do Untilでのブロック動作だと思うので、DoEventsと
タイマーコントロールで問題回避できると思います。

あと、余計なお世話だとは思いますが、動かす際には
無用なリクエストが大量発行されないように注意してください。
意図せずにDoS攻撃になってしまう可能性があります。


348:342 ◆XuL15E5UEM
11/07/08 01:11:18.20
>>347
レスありがとうございます。

IEの部分は8個作成してもOKです。

>IEのインスタンスが複数作成できたならば、問題は
>Do Untilでのブロック動作だと思うので、DoEventsと
>タイマーコントロールで問題回避できると思います。
この部分はどのようにすればよいか、もしよろしければサンプルをお願いできませんでしょうか。

動かす際には、まず自鯖で試しています。
お気づかいありがとうございます。


349:デフォルトの名無しさん
11/07/08 05:04:31.46
>>345
VBのランタイム関数がスレッドセーフである事を保証しないので使えないのと関数を使えないのと、
IDEのインタプリタ上で動かしているとクラッシュするだけで、
大きな問題は無いよ。

350:デフォルトの名無しさん
11/07/08 09:32:46.33
>>349
あと、たしか実行ファイルがPコードコンパイルじゃなかったら不具合がおきたと思うんだが。

351:327
11/07/09 01:00:28.84
>>342
サンプル作ろうと思ったら、環境(と、ついでに時間)がありませんでした。
ゴメンナサイ。
一週間ぐらい待てるならば作りますので、言ってください。

とりあえず、大まかな話を。

恐らく目的を達成するにはタイマーコントロールを使用してタイムスライス
っぽいことを実装するのが一番手っ取り早いと思います。

現在、Do Untilで行っている動作は完全に処理をブロックしてしまっていて
他に何もできなくなっているので、その部分をタイマーコントロールを
使用して一定周期で監視するように改造するのです。
その際、タイマーコントロールのルーチン内で1~8までのサーバの
状態を順番に監視するようにします。

イメージはこんな感じ↓。



352:327
11/07/09 01:01:08.37
private sub timer1_timer()

select case(server)
case server1
if ((ie1.Busy = False) And (ie1.ReadyState = READYSTATE_COMPLETE))then
server1flag=true
end if
server=server2

case server8
if ((ie8.Busy = False) And (ie8.ReadyState = READYSTATE_COMPLETE))then
server8flag=true
end if
server=server1

end select

if server1flag and … and server1flag then
timer1.enabled=false
end if

end sub

伝わりますかね…?


353:デフォルトの名無しさん
11/07/09 01:07:07.92
While Flag
 DoEvents
Wend

354:デフォルトの名無しさん
11/07/09 04:16:37.55
今から勉強して新規でプログラム作るなら、.NETでやった方がいいと思うんだが...

355:342 ◆XuL15E5UEM
11/07/09 11:52:45.74
>>351
お忙しいところレスどうもありがとうございます。
時間は1ヵ月でも半年、1年でも待ちます。

351自体は説明内容(単語)が分からずさっぱりなのですが、
352で書いていただいたコードを眺めつつ単語も調べて試して
みたいと思います。(今の段階だとさっぱりなもので・・・。)


>>354
れすども!?
なんとなくVB6の方が操作感?というか分かりやすい気がしたもので。

356:デフォルトの名無しさん
11/07/09 11:56:17.52
VB6はもう開発終了
メンテナンスもされない。
新しいOSで動作保証がなくなるかもしれない。

自分専用のツールを作って公開しないというのなら
別に構わないが、将来自信作ができたとき、
VB6で作っていると、作り直すはめになるだけ。


357:デフォルトの名無しさん
11/07/09 11:58:31.05
というか、そもそも、
サーバーの負荷を調べる程度で、
IEを起動しているのがそもそもの間違い。

IEを起動・・・= CreateObject("InternetExplorer.Application") の部分

重いのがいやならマルチスレッドうんぬんではなく
IEを起動しないようにするのが正解。

358:デフォルトの名無しさん
11/07/09 12:55:42.79
よくわかんねーけどサーバのステータスがhtmlで取得できるならGETして中身見るだけですむよね


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch