VBプログラマ質問スレ(Ver.6.0 まで) part57
クラス間の依存性は減るけど、XMLへの依存が強いってことは何の問題もないの?
素人は黙ってネンネしなさい
>>1000 だからDIはそれを使いやすくフレームワークに
まとめた仕組みのことを言うんだよ。
具体的にはオブジェクトの生成部分を
コード内に書かないでフレームワークに任せる。
多態を使ってても、オブジェクトの生成は
コードに書いてしまうだろ。それじゃだめだってこと。
>>4 依存をなくすのではなくて依存を分離するのが目的。
クラスから依存が減る。それはなくなるという意味ではなく
XMLに分離するということ。
あなたの言っていることは問題ではなくて、
そもそもそういうふうにしたい事、つまり目的だよ。
なるほどね
こういう感じのとは違うん?
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
>>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コンテナ。
コンパイラがDIコンテナを使うってことか
眠いので頭が正常に働いてないのかも
明日昼間もういちど前スレから読み直してみる
ありがと
実際には、FileSystemObjectはIFileSystemObjectインターフェースを
継承してないから、fsoにFileSystemObjectそのものを入れることはできない。
入れることができるようにした「FileSystemObjectっぽいもの」を作る必要がある。
でもそれは既存のクラスの問題であって、自分で作るクラスには関係ない話。
重要なのは、このコードには new FileSystemObjectっぽいもの というコードが入ってないから
fsoには「FileSystemObjectっぽいもの」だけではなく、たとえば
テスト用のFileSystemObjectを入れたり、ネットワーク対応のFileSystemObjectを入れたりできる。
実際に入れる作業をするのはDIコンテナだけどね。
特にテスト用のFileSystemObjectを入れられるところが重要で、
FileSystemObjectを使わずに単体テストができる
それでいてコードが前と殆ど変わってないところも注目するところ。
で、最初の質問に答えると、VB6用のDIコンテナは知らないが(多分ないと思う)
DIコンテナを作ることは可能
Windows Script Host Object Model (wshom.ocx)
Microsoft Sripting Runtime (scrrun.dll)
の両方にFileSystemObjectあるけど未だに違いがわからん
むしろ、継承はないがインターフェースはあるVB6には
DIはぴったりだと思うな。
DIが出てきた背景には(昔の)EJBの継承を強要するやり方は
複雑でテストしにくい。POJO(継承使ってない単純なオブジェクト)を
使いましょう。ってのがあるし。
VBはもともと継承が使えない。
VB6での新規案件なんかあるのか?
ああ、コンパイラじゃなくて
別のとこでfsoに代入するコードが書かれてるってことか
>>18 そう。書かれてる。
ただしDIコンテナというフレームワークが
やってくれるところだから見るべきところではない。
勝手に入れてくれるという認識でOK
ただし、VB6用のDIコンテはないw
よくわかった
一応、開発にはimplements使ってる。
ListViewとかTreeViewへの表示にはimplementsしたクラスを
利用してる。これだけでもだいぶ助かるけど…
Javaだとインターフェースはインターフェースだけで
その場でインターフェースをnewして、しかもその場で
実装を書くことが可能。
VB6やってて不便に思うのは…
引数付きコンストラクタが無い事と、インターフェースのnew実装か。
インターフェースをnewするって意味が分からないけど・・・
引数付きコンストラクタは、適当な関数でも作ればいいと思う。
newして引数を設定する関数でも、newしてクラスのメソッドを呼び出す関数でも。
> Javaだとインターフェースはインターフェースだけで
> その場でインターフェースをnewして、しかもその場で
> 実装を書くことが可能。
あ、無名クラスのことか。
正確にはインターフェースをnewしてるんじゃなくて
名前がないクラス作ってるんだけどな。
VBの場合インターフェース無くても同名のメソッドあれば参照できるんじゃなかったっけ?
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が呼ばれる
インターフェースなくても同名メソッド使えるっていうのは嫌だな。
かといって、インターフェースかぶせても、
インターフェース名_メソッド名
が、メソッド名になるのも、はっきりいってうっとおしい。
引数の型をObjectやVariantにせず、ちゃんとインターフェース用のクラスの型を設定すればいいし
Javaとかだとインターフェース無しでインターフェース用のメソッドにアクセスできるんだっけか?
interface Class1 { void hoge(); }
class Class2 implements Class1 { public void hoge(){} }
で
Class2 c2 = new Class2; c2.hoge();ができちゃうけど
VBだとちゃんとインターフェースかまさなきゃhogeできないのは優秀なんじゃね?
どうでもいいことだけど、些細なミスnew Class2();ね
>>26 > インターフェースなくても同名メソッド使えるっていうのは嫌だな。
そういう言語は他にもあるし(例 JavaScript、Perl)
> インターフェース名_メソッド名
インターフェース名::メソッド名 や インターフェース名.メソッド名
と大差ない
まだまだ経験が足りないようだなw
Javaって
インターフェース名_メソッド名 に
ならないから、
複数のインターフェースで同名のメソッドがあった場合に
困るんだっけ?count()とかありがちなメソッド
vbは優秀だな
まあVB6はともかく、VB.NETのインターフェイスの仕組みは良くできてる。
こればっかりはC#より良い。
VB6のインターフェイスはCOM相互運用のための機能だからああゆう形になるのは仕方が無いね。
VB6のインターフェイスの宣言は中身(実装)の無いクラスを使うことが多いけど、
IDLも使えるあたりもろにCOM相互運用のためのものと分かる。
>>32 VB.NETのインターフェイスは実装のときに
C#の明示的実装のような書き方になるのであんまり好きじゃないけど、
良くできてると思うのはなぜ?
なんか珍しくオブジェクト指向っぽいスレの流れになってるので
この流れで質問させてほしい。
マイクロソフト系言語には、プロパティつうものの存在があって
プロパティ用のアクセッサの書き方があるけど、
普通にゲッタとセッタで実装できそうなのに、なんでプロパティ用の
アクセッサの書き方があるの?
一つはプロパティという概念を導入した方がクラスの構造がわかりやすくなるから。
変数名などa, b, c, ....でも「実装できそうなのに」分かり易い名前を付けるのと同じ動機。
もう一つはプロパティとメソッドが機械から区別できた方がいい事があるから。
例えばVB6でも.NETでもGUIアプリのデザインをデザイナでデザインできるのはこのため。
>>35 メソッドと同じ書式でいちいちゲッタセッタを書くのが面倒だから。
プロパティならとりあえず変数として宣言しておいて、
あとで気が変わったときにゲッタセッタ(プロパティ)を書けば済む。
>>37 答えになってないでしょ。
何故Bが必要かと聞いているのに、何時でもAはBに変更できるからってそれ何だよ。
39 :
デフォルトの名無しさん:2011/05/03(火) 15:41:07.99
レスキュー花ちゃんはありがたいね
わざわざ上げてまで今それを言う理由が理解できない。
あそこは今でも一部tipsは有料でやってるのかな。
そりゃ人がどんな商売しようと自由だけど、個人的にはケツの穴が小さいなと思わずにいられない。
41 :
デフォルトの名無しさん:2011/05/05(木) 16:01:42.55
コマンドライン引数で日本語パス・ファイル名を受け付けないソフトって諦めるしかない?
渡すファイルを、一旦、日本語を使わないパス・ファイル名にコピーしてから渡す回避策はあるけれど
>>35 > 普通にゲッタとセッタで実装できそうなのに、なんでプロパティ用の
> アクセッサの書き方があるの?
人間の感覚だろうなぁ。
プログラム言語とは関係ないUMLだって、
メソッドとは別に属性(プロパティ)というものがある。
だけど、これ、ゲッタ、セッタで置き換え可能。
つまり実装するにあたって属性というものは必要ないということになるが、
やっぱり属性ってのは、メソッドとは別ものと人間は考えてしまうようだ。
>>35 オブジェクト指向の話になるとオブジェクト指向論と
オブジェクト指向言語の実装についての話がごっちゃになるんだが
メッセージパッシングをメソッド呼び出しで実装したと考えれば
外部公開属性はやっぱ別にしたい
ゲッタ・セッタでは
object.property++ なんて書き方ができない
object.setProperty(object.getProperty()+1) こうなる。
VB6にインクリメントの演算子なんてあったっけ?
>>44 >object.property++ なんて書き方ができない
この書き方をしたいならメンバ変数をPublicにすれば良いだけ。
>object.setProperty(object.getProperty()+1)
この方が安全といえば安全と思う。
安全とか危険とか何意味不明なこと言ってるんだw
インクリメント演算子なんてものはないにしても、
>>44の言いたいことはまあ半分は分かる。
要するに、
>object.setProperty(object.getProperty()+1)
こういうのは見難いし醜いということ。
ついでに変数をPublicにしたのでは値の取得または設定時に動作を絡ませることができない。
インターフェースを変えることなく、
感覚通りに名前をつけられるのが
プロパティのいいところ。
>object.setProperty(object.getProperty()+1)
こういうのは
object.addProperty(1)
を作ればいいのでは
どこが妥当だよw
属性(プロパティ)が100あったら、100ごとにセッタ、ゲッタ、
>>49相当のものを
一々書くのかw
書く手間のことを言ってるんじゃない。
各属性ごとにその3つなら3つのメソッドを管理するの?
やってられるかよ。
ちなみにaddHogeでは「Hogeを足す」になってしまわないか?
必要なメソッドは必要な時に記述
まずプロパティが100あるっていう前提からしてアホっぽいが
>addHogeでは「Hogeを足す」
まさにそういうメソッドだろう
いい歳こいて日本語の「てにをは」が使えないのは恥ずかしいよ。
「Hogeに足す」と「Hogeを足す」の違い分かる?
んなもんHogeが実際なんなのかによるだろうと思うが
気にいらんかったらaddHogeValueでもaddHogeCountでも
好きに作ったらええがな
VB2003の質問はここでよろしいでしょうか?
ここはVB6まで
プロパティに自由にアクセスできてしまうっていうのはどうかと思うぞ。
>>58 それは、ゲッターとセッターの両方をつけるのと何が違うんだ?
>>59 ゲッター/セッターなら、変な値を設定できないようにしたり、
読み出された回数数えたりできるよ。
フレックスグリッドコントロールを使ってるんですが、
エクセルみたいにセルの下や右だけ罫線の色を変える、みたいなことはできないんですか?
付属のMSフレックスグリッドでは出来ないけど
フレックスグリッド系コントロールの中には、それが出来るものもある
当然、無料じゃないけどな
あとはラインとかピクチャーコントロールとかに色つけて重ねて
擬似的に実装するとかな
>>58以降の流れはどれも何が言いたいのかさっぱり分からん。
特に
>>64 個人的にはこういうのは他人がエスパーだと思ってるとしか思えん。
理解したくなければ放置しとけば言いし、
理解したいなら「どういうこと?」って聞けばいいのに。
ファイルサイズ取得ってこんな感じで問題ない?問題ある?
With New FileSystemObject
filesize = .GetFile(filepath).Size
End With
実装してみて実際のファイルサイズを取得してみて合ってるならそれでいいのでは?
okわかった。ありがと
ちゃんと8Gオーバーくらいのサイズで試さないとね
えー、With Newって書き方は初めて見た。
これって、End Withで解放されるの?
ガーベジコレクション的にも大丈夫?
ところで皆さんはガーベジコレクションって言いますか?
ガーベッジコレクションって言いますか?
>>72 End Withの後、アクセスしようが無くなって、たぶんメソッド抜けた時点で開放されるかな。
そういうメモリから解放されたかどうかって知るすべあるの?
おせーてくらさい
>>76 terminateイベントプロシージャにDebug,Print "hoge"とでも書けば
dd
なるほど
'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
VBを今のところ、ただ勉強目的で始めたいのですが、VBの何をまずダウンロードすればいいのか、わかりません。教えてください。
自宅でWindows7を使っています。インターネット接続環境はありません。そのため、ネットカフェでダウンロードして、自宅でそれをインストールしたいのですが、オフラインの自宅でインストールは可能でしょうか?
また何というものをダウンロードすればいいのですか?
いろいろ調べたら、単なる勉学者は、Express Editionとかいうのをダウンロードすればいいみたいですが、詳しくはわかりません。
以上を踏まえ、どなたか何とぞ、お教えねがいます。
なにがしたいんだよ
フォーム上のコマンドボタンを押すと1行目に『ビート』、2行目に『たけし』とリストボックスに追加されるプログラムがある。【@】、【A】を埋めて完成させよ。リストボックスのオブジェクト名は『List1』とする。
Private Sub Command1_Clic()
List1.【 @ 】
List1.【 A 】
End Sub
動的配列を使い、コマンドボックスを押すたびに配列の数が増えるプログラムを【】を埋めて完成させよ。
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
先生、コマンドボックスってなんですか?
Redim Preserveだが…なんでこんな問題作ってんの?
学校の宿題なんだろ
「値を保持したまま」とは書いてないから、ReDimだけで良いのでは?
値の保持が必要ないなら、ReDim Preserveは遅いだけだし
Hairetu()(笑)
Haiyoru(笑)
ググればすぐわかるような基本構文問題には答えんなよw
>>86 先生!なに入れてもコマンドボタンが反応しません!
確かにあれじゃ反応しないなw
なんてマのヌケた出題なんだろう…
1つの配列の中に重複するデータが多数ある
重複するデータを抜き出したい
A,B,A,B,A,A,C,F,C....
欲しいデータは重複データなので上記の場合
A,B,Cとなります
unique以外を取得したいのです
>>97 ソートしてから、2つ以上同一の値が連続しているものを抜粋する
Filter掛けて、戻り値のUBoundが1以上のものを列挙する
連想配列を利用する
いろいろ方法はあるので、お好きな物をどうぞ
便利なコマンドがVB6以前に存在するのかを尋ねているのか
最速アルゴリズムを尋ねているのか
じゃあ両方で
99に期待
102 :
97:2011/05/25(水) 07:51:55.31
>>98 連想配列でぐぐってきた!
連想配列が何か分かったけど、どうアルゴリズム化していいかわかんねw
>>99 uniqueの逆の関数があれば1番良かったんですけど、なさそうなのでアルゴリズムです
103 :
97:2011/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:2011/05/25(水) 12:59:17.07
それだけだと、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」にしたいという最初の条件とは違うよね
perlだと1行で簡単にできる式があったような気がしたw
で?
そういや7年くらい前にperlの連想配列と同じことができるVBのクラスを作った記憶があるw
>>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
何、この子?
ほうほう。それでそれで?
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
114 :
97:2011/05/26(木) 08:41:35.84
VBで動的連想配列ってできるんですか?
ググっても見付かりません
x^3-7*x+1の式でニュートンラフソン法を用い、初期解と繰り返しの回数を入力したら
近似解が求められるプログラミングを作りたいんですが、どう作ればよいですか?
もしスレチでしたらすみません
VB6でマルチスレッド作るの無理だよね・・?
複数プロセス起動すれば良い
訂正
可能だけど、実用的じゃないよ。
>>122 ちょwww
訂正って、それじゃ意味変わってないだろ。
訂正するなら「不可能だけど、実用的だよ」か
「可能だし、実用的だよ」のどちらかだろwww
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
と言い換えるのも無い事は無いか。
>>123 「表現」を「訂正」してるだけだろ。
まあ、いちいち訂正するほどのコトとは思えないけど。
もっと賢いやりかたったらおせーて
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
簡単なエラートラップなら
Cdbl(v)する前に
If Not IsNumeric(v) Then Exit Function
を入れる
On Error Goto ErrorLabel
とかして
End Functionの手前にErrorLabel:って入れればOK
>>126 n = Int(Log(p)/Log(1000#)): p = p / (1000# ^ n)
# 元のプログラムと n の値が 1 違うので注意 (0 ベースになる)
# v = 0 の時に Log() がエラーになるので、そのケースがあるなら事前に場合分けが必要
なるほど
勉強になります
ありがとうございました
ActiveX DLLでCOM作ってるんだけど、ADOのRecordSetやFieldが持ってる
連想配列みたいにアクセスするインターフェースってどうやって作るん?
132 :
131:2011/05/31(火) 16:27:12.11
プロシージャIDを0にすると既定になって、省略可能になったわ。
?
VB4なんですがWIN87EM.DLLで一般保護違反が出るのですが、
なかなか再現しません。このエラーを故意に起こすには、どのようにコーディングすればいいですか?
OSはNT4です。
すいません、質問させてください。
今下記のような感じでテキストファイルを読み込んで
excelに出力するものを作っています。
Array1と10に降順でソートを掛けたいと思っています。
ですが、どう記述するのかわかりませんでした・・・・
どなたかお力お貸しください。
こんな短期間にたくさん質問くるということは
どこかの大学バカ教授が授業でVB6で課題でも出したのか?
137 :
135:2011/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))〜
VB6.0で作ったソフトですがディスプレイをブラウン管(1024,768)から液晶(1920,1080)に替えたら
ソフトが動かなくなってしまいました。なぜ?
ブラウン管に戻すと動きます。
ソース出せや
140 :
デフォルトの名無しさん:2011/06/03(金) 02:17:22.81
VBで作ったアプリって
モニタのど真ん中に可視な属性を持ってるのに大きさがないという
ウインドウというかプロセスがあるね
キャプションで探したウインドウがGetWindowRectでサイズが0でずっと悩んじゃったよ
まるで民主党の朝鮮人たちに騙された気分だよ
141 :
デフォルトの名無しさん:2011/06/03(金) 02:27:53.82
>>138 あー、それ
>>140と関係してるかもね
プロセス列挙してウンドウを探すときにLeftが512だったら弾く、とかやってると
モニタサイズが変わったら弾けなくなる
LeftじゃなくてWidthが0だったら弾くようにすればおk
142 :
福盛俊明:2011/06/03(金) 09:09:29.66
>>137 エクセルを開いてから、オートフィルタで手作業でソート
VBSで質問です
5分後にシャットダウンするプログラムを作ってます。
MsgBox "5分後にシャットダウンします。"
WScript.Sleep(300000)
'ここにシャットダウンの処理
これで一応シャットダウンできますが、終了一分前にメッセージを出そうとして下記のように変えると、
「1分後に(ry」のメッセージボックスのOKを押すまで処理が止まってしまうので、正確な5分になりません。
MsgBox "5分後にシャットダウンします。"
WScript.Sleep(240000)
MsgBox "1分後にシャットダウンします。"
WScript.Sleep(60000)
'ここにシャットダウンの処理
メッセージボックス出しつつ処理を止めない方法ってありますか?
同じことができれば代用法でもなんでも構いません
>>144 メッセージボックスやモーダルのフォームではなく、
モードレスのフォームを出せばいい。
>>145 レスどーも
でも色々調べてたら自己解決してしまった(・_・;)
コマンドラインで
shutdown -s -t 300
って書くと自動で2分前に警告だしてくれたらからこっち使います
ここでいいんかな・・・?
imdate(inputManのやつ)で日付を取ってそれに+1日したいんだが
どうしたらいいんでしょうか。
Date + 1に出来たらいいかなと思ったんだが
imdate.Numberで数字で取得するからなんともいかんのかな?
VBのバージョンを言え
inputManだったらinputManのヘルプみればいいんじゃないか?
ジャンジャンバリバリ ジャンジャンバリバリ InputMan
152 :
148:2011/06/09(木) 23:35:56.07
すいません6.0です。
153 :
デフォルトの名無しさん:2011/06/11(土) 00:08:05.03
偉そうにVBのバージョンを言え!
だって
VBのバージョンなんか関係ないのに
その1行しか言えないレベルの奴なんだ
4行も内容のないこと書いてるやつよりましじゃね?
で、バージョン聞いといてそれで終わり?
大抵関係ない情報聞くやつは
使いものにならないんだよねw
156 :
デフォルトの名無しさん:2011/06/11(土) 17:48:24.37
俺だったら「VBのバージョンは?」って優しく聞く
それを「VBのバージョンを言え」と字数多くしてまで乱暴に言うのは
まさに超初心者ならではの頭の悪さ
で、imdate.Numberが日付型ならDateAdd、文字ならCDateしてから
> 質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、
> 「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。
というのがルールなんだから、質問内容がバージョン関係有る無しに関わらず
まずは郷に入っては郷に従えってだけのことだろ
もう黙れば?
.NETの質問の可能性もあるやろ
まあ、スレタイちゃんと読んでりゃ .NET はないはずだが、
バージョンも書かないような奴は
>>1 もろくろく読んでな
いような奴だから、スレタイも読んでない可能性高いかもね。
て言うか、質問者は後出しながらバージョン答えてるし、
>>153 は一体なにと戦ってるんだ?
命令口調クン
ところで
>>149は必要だったのかい?
いらないよね。赤っ恥かかされたからって、必死こいて戦うことないよね。
.NETの質問の可能性もあるやろ!(キリッ
>>162 顔真っ赤にして、そんなに悔しかったの?
166 :
デフォルトの名無しさん:2011/06/12(日) 09:49:17.07
発 者 同 . 。_ ____ 争
生 同 .じ . /´ | (ゝ___) い
.し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、
.な で .ベ ∠ゝ (ゝ.//` ./`| }⌒j
.い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´
.! ! か の / ´..:.} >、、___, .r、 ソ、`\
/ ..:.:.} / |∨ ` ̄
/ ..:.:./ | 丶
/ _、 ..:.:.:.{ .{.:.:. \
{ ..:Y .ゝ、 {.:.:.:.:. ヽ
|、 ..:/ 丿 .:〉 >.- ⌒ . ヽ
/ {. ..:./ ソ ..:./ .( ..:.:.:` ..:}
./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:}
./..:.:/|.:/ {.:./ X.:.:}.} X X
/..:.:/ .}.:| }:/ .Y丶ヽ Y.:Y
. __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\
/.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>
いや争ってる (と思ってる) のは、1人だから (w
争いにもなってないよな
まったく関係のないバージョンの話なんて聞くような馬鹿だしwww
ルールは守ろうねって言われたことが余程気に入らなかったようだな
反抗期なのかもしれないが、そんなんじゃ社会に出てから困ることになるぞ
なぜバージョンを聞いたんだい?ルールだからか?必要あったか?空気読まずに聞くほどに?
社会人としてのルールとして、そこの所を答えてくれないか?
____
/⌒ ⌒\
/( ●) (●)\
/::::::⌒(__人__)⌒::::: \
| |r┬-| |
\ `ー'´ / このスレ香ばしいNE!
/` ‐- __ - ‐‐ ´ \
/ .l _,,ヽ ___ 〉、
| l / ,' 3 `ヽーっ
ヒト- _ l ⊃ ⌒_つ
. !__  ̄, ̄ `'ー-┬‐'''''"
L  ̄7┘l-─┬┘
ノ  ̄/ .! ̄ ヽ
└‐ '´ ` -┘
>>172 なぜ理由を聞いてるんだい?ルールだからか?必要あったか?空気読まずに聞くほどに?
そこまで追い詰めるつもりはなかったんだが
鸚鵡返しするような状態になっちゃお終いですね
こんな人が社会に出てからとか言ってんだからお笑いです
一体誰を追い詰めた気になってるんだろう…
まあ、本人満足してるみたいだからいいか (w
総理大臣のようだNE!
道化を装う総理ならいいが
近年の人は愚かにしか見えない
スレ伸びてると思ったら
質問があったとかそれに対する返事だとかそういうのじゃないので伸びてたのか
残念だ
気づけばもう3日前からずっとこの流れなんだなw
>>179 同じく。
そもそも、このスレでバージョンは○○ですって書いてる人あんま見ないけどな。
ところで、COM使った開発とか新規でまだやってたりする?
この間.NETじゃないただのASPで動かさなきゃいけない案件があって、
バッチでも使う共通処理があったから、COMで作る事にしたんだが、VB.NET
でも簡単にCOM作れるのな。
中身はマネージドだから、VB6.0で作った方が動作は早かったかな。
終わった言語なんだし、ひっそりしていたほうが健全なんだ。
未だに終わった言語で開発させられている俺に謝れw
フヒヒ
なんかwordにVBエディタが入ってるんだけど
まさかこれってコンパイラDLしなくでもVBできる?
VBはじめようと思ってんだけど
誰かコレについて教えてくれ
それは別物です
>>185 まあ VB と似たようなもんだけど、Word がないと動作しないよ。
まずは word vba あたりでググレ。
みんなツンデレだなぁw助かってるけど^^
言い方きっついレスポンスは幼馴染みが
照れ隠しで怒っている感じに変換して
読んでる
質問です。
Set xlBook = xlApp.Workbooks.Open(xlTestFile)で開いた場合
Arrayって使えますか?
読込んだTextを文字列か標準かを指定してデータをExcelに挿入したいのですが・・
VB6言語すらまともに使えない奴には
日本語での質問もまともに出来ない奴が多い件
VB6言語?
WinXP、VB6、SP6です。
Controls.Addで動的に作成したTextBoxのMultiLineプロパティをTrueにする方法を教えてください。
普通にコードで設定しようとすると「値の取得のみ可能なプロパティに値を設定することはできません。」というエラーが出ます。
デザイン時にMultiLine=TrueにしたTextBoxをコントロール配列にしてLoadすれば、
MultiLine=TrueのTextBoxを動的に作ること自体は出来るのですが、都合によりコントロール配列ではダメなので。
最悪、デフォでMultiLine=TrueなTextBoxをユーザーコントロールとして作って、それをControls.Addで動的に作成するという
手法も考えてますが、もっと簡単な方法があればご教示ください。
VB6LEじゃActiveX作れんからプラグイン作れないんだな…orz
194 :
デフォルトの名無しさん:2011/06/17(金) 00:34:45.03
VB6のランタイムライブラリってぶっ壊れることあるんだな
家族の誰かが何かインストールしたらしくその際にVB6ランタイムが上書きされたかで
VB6およびVB6製アプリが正常動作しなくなった
ベクターにあったVB6ランタイムをインストールしたら直ったけど
ウィルス感染かと思ったわ
>>195 それは壊れるとは言わない。
古いライブラリに入れ替わっただけ。
そんなのはVB関係ないし、OSだって関係なく
起こり得る話。
どうせインストーラ型のVB6製アプリ入れる時にシステムに既に同じのあるけど上書きする?って聞かれて、
「なにこれわかんない。とりあえずはいでいいよね」って選択していったんだろ
spの古いランタイムに変わるとVB起動時およびVB製アプリ動作時にmsiとか起動するもんなの?
3文字ごとに[,]を打つのに作った↓コレが不具合の原因で
OutputBox.Text = Format(CDec(OutputBox.Text), "#,###.##############")
'[2.0]で持ってくると
'CDecで文字列を数値にしているので
'ただの[2]として認識されて[2]だけが出力される
'[2.03]だとそのまま[2.03]で認識してくれる
別の書き方ってあります?
OutputBox.Text = FormatNumber(OutputBox.Text)
Oh…小数第二位までしか表示されないけどこんな方法が。
ありがとうございます
MSDN
数値表示書式指定文字 (Format 関数)
数値を表すその他の書式 (Format 関数)
定義済み数値書式 (Format 関数)
の項目でも読め
FormatNumberの仕様読んでから使えよ
そもそも質問が意味不明
何を知りたいのかよく分からん
落ち着いてすぐ質問レスするのではなく
一度文章をメモ帖か何かで整理してから
投稿したほうがよい
ここは俺のメモ帳だ
207 :
デフォルトの名無しさん:2011/06/18(土) 07:13:23.83
メモ :
乱数系列を繰り返すには、数値を指定して Randomize ステートメントを
実行する直前に、負の引数を指定して Rnd 関数を呼び出します。
Number に同じ値を指定して Randomize ステートメントを使用しても、
前の乱数系列を繰り返すことはできません。
Rnd -1
Randomize 1234
>>207 言っている意味がよくわからんちん
'Rnd -1
Randomize 1234
Dim i
Debug.Print "Start"
For i = 1 To 10
Debug.Print i, Rnd
Next i
Debug.Print "End"
VB6SP6で、ある文字列値がCBoolで変換できる値か否かを調べる関数とかって無いの?
"0"、"1"、"false"とかならTrueを返し
""、"a"、"t"とかならFalseを返すみたいな
今はOn Error Resume NextでCBoolに掛けちゃってるけど、もっと良い方法ある?
俺様しか使わないような機能が実装されるはずだとかかもしれんとか思うのは軽い病気だと思う。
っていうか、関数の一覧見れば分かるだろ。
VBってもう死亡宣告されて10年経過してる言語だぞ
ないなら作ればいいじゃない
>>210 >>209 の書き込みから、「実装されるはずだとかかもしれんとか思う」と
読み取れちゃうのはちょっと重い病気だと思う。
適切な病院に行くか、小学校からやり直すべき。
>>209 なんでそんなことする必要があるのか気になるが、「CBool() で変換でき
ること」が絶対条件なら On Error にするしかないと思う。
>212
馬鹿だろお前。
>>212 の書き込みに対して「馬鹿」としか言えない
>>213 が
ちょっとかわいそうだ。
早い目に、小学校からやり直せよ。(w
(お前が)言われなきゃ分からない、の間違いじゃないのかしら。
逆に聞くが、存在するはずが無いと思ってる機能が存在するかどうか人に聞く馬鹿がいるのか。
あるはずとかあるかもしれないと思ってるから聞くんだろうが。
本当馬鹿だろお前。
>>215 ないと思ってても、だめ元で聞いてみる奴はいくらでもいるだろ。
小学校に行って、勉強はもとより友達と会話するところからやり直してこい。
[だめ元] ⊆ [あるかもしれない]
人に手取り足取り一から十まで全部説明されないと理解できないのは馬鹿の特徴か。
>>217 >> 存在するはずが (*無いと思って*) る機能が存在するかどうか人に聞く馬鹿がいるのか。
> ないと思ってても、だめ元で聞いてみる奴はいくらでもいるだろ。
自分の書いたことには責任を持ちましょう。(w
意味不明。
高校の数Iでやるような論理学が理解できないのも馬鹿の特徴の一つだな
>>219 日本語が理解できてないクズよりましだけどな。
>俺様しか使わないような機能が実装されるはずだとかかもしれんとか思うのは軽い病気
非常に解りにくい日本語なのですが
実装されるはずだと思う、あるいは、実装されてるかもしれんと思う だと解釈しよう
俺が使いたい機能なんだから絶対に実装されてるはずだ、と思うのは病気かもしれんが
こんな機能があったらいいな、すでに実装されてないかな?と思うのは病気でもなんでもないと思うが
アスペルガーの人は病識がない。
自分を客観的に見られないという自覚が一切ない。
どう考えても一般性がない(そんな機能お前以外誰が必用とするんだってこと)
機能を、普通の人は「すでに実装されてないかな?」なんて思わないんだよ。
絶対に。
そう思うのは病気だから。
まあ病識がない人に自覚しろって言っても無理だろうけどねえ
>>222 >アスペルガーの人は病識がない。
>自分を客観的に見られないという自覚が一切ない。
自己紹介乙。
つか、>222は
ある変数がほかの型に変換可能かどうかチェックする機能
は一般性がないと思うのか
変数って何だよ。
それを言うなら"値"じゃないのか。
そもそも
>>209のいうような機能の需要が一般的かどうかの話をしているのであって、
「ある変数がほかの型に変換可能かどうかチェックする機能」の話なんかしてない。
馬鹿じゃないのか。
226 :
デフォルトの名無しさん:2011/06/19(日) 18:56:17.63
>>208 やっぱり分かり難いでしょ
Randomizeのヘルプの文章なんだけど
×Number に同じ値を指定して Randomize ステートメントを使用しても、
前の乱数系列を繰り返すことはできません。
○Number に同じ値を指定して Randomize ステートメントを使用しただけでは、
前の乱数系列を繰り返すことはできません。
昔のBASIC知ってる人には何でRandomizeだけで乱数系列初期化してくれないの?と思ってしまう
ヘルプも分かり難いけどVBの仕様も変
あのね、二人とも。
そんなに喧嘩する程のものでは無いと思うんだ。
CBoolで変換出来るものを判定すればいいだけでしょ?
それってIsNumericでいいんじゃないかと思うんだ。
たしかCboolで変換出来るものって数値型で、0ならFalse、0以外ならTrueだったんじゃないかと思うんだけど。
もっとも、厳密にTrueやFalseを判定したいなら0か-1と言う条件を付け加えることになるけど、
今回はそうじゃなさそうだし。
違ってたらごめんね。
みんな仲良くやるわさ。
228 :
デフォルトの名無しさん:2011/06/19(日) 19:00:55.40
>>208 あ、毎回同じ乱数を発生させたい場合ね
例えばプロシージャ中で3回乱数を使ったとして
そのプロシージャを何回実行させても、いつも同じ乱数値を使いたい場合
229 :
デフォルトの名無しさん:2011/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 :
デフォルトの名無しさん:2011/06/19(日) 19:12:16.34
Select Case q$
Case "1","0","false","true": is_bool = True
end select
Select Case ucase(q$)
Case "false","true": is_bool = True
Case else: is_bool = IsNumeric(q$)
end select
あら、TrueやFalseは文字列にするとIsNumericに反応しなくなるのね。
じゃ多分
>>231の人が言ってるUCaseのをLCaseにしたのがFAだわさ。
>>225 もうそろそろ引っ込んだら?
どう見ても哀れだよ、君。
またスレが伸びてるから言い争いしてると予想したが、裏切ってくれなかったか。
毎回同じ人が煽ってんのかな。
>>226,228
もしかしてVB6より前のVB?
>>208のコードをCommand1_Clickにいれて何度か押したけど
Rnd -1のある場合の10個の数字と、ない場合の10個の数字は違うけれど
Rnd -1のあるなし関わらずコマンド何度クリックしても同じ10個の数字しか出なかった(Randomizeで初期化されてる)けど
下記サイトを参考に任意の日付までのシリアル値の計算はできたのですが、
逆にシリアル値から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
>>236 MSDNの説明ではDate型の実体はDoubleだとあるから、
ある意味Date型そのものが既にシリアル値であるといえる。
自前でシリアル値に変換する意味がわからない。
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 :
デフォルトの名無しさん:2011/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:2011/06/21(火) 01:31:17.21
>>237 レスありがとうございます。
私がやりたいのはシリアル値に変換するのではなくて、
シリアル値からyyyy/mm/dd hh:mm:ssというように変換したいのです。
Win32APIとかでそういうの扱えるの無かったっけ?よく覚えてないけど
SystemTimeToFileTime
FileTimeToSystemTime
あたり?
>>236の逆変換をやるの?
dt = DataAdd("s", lngTime \ 1000, "1970/1/1 9:0:0")
これでいい?
>ngTime = lngTime + Fix((CDbl(Timer) - Fix(CDbl(Timer))) * 1000)
これTimer2回呼び出してるけど問題ないの?
あれ、でもコメントアウトの問題なら表示される数字はどちらの試行でも同じはずなのに違ってたな。なんでだろう
あ、原因判明したかも。コメントアウトの問題じゃなくてイミディエイトのカーソル位置の問題だ。おそらく。
カーソルが一番下じゃなく一回分の試行の手前あたりにあったんだなきっと
あれはカーソル位置から書き始めるから困る
249 :
236:2011/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
>>244 最初のTimerの呼び出し時に 1234.999秒ですぐ次の呼び出しで1235.000になっていた場合、さてどうなるかな?
その理屈ならミリ秒取得前に引数で日付取得じゃ秒のズレが起きたりしないの?
t1 = Timer
n = Now
t2 = Timer
とかして挟んでt1とt2からミリ秒取得したほうが
だからData自体が最初からシリアル値になってるのにどこに自前で変換かます必用があるのかと...
頭悪いのかな
253 :
デフォルトの名無しさん:2011/06/22(水) 00:28:38.30
頭悪いのかな
だって
一言多いのねこの人
コンプレックスを抱えてる人間のようです
だから誰かを貶さないといられないのです
自分だって無知な頃があったはずなのに
いや、今も無知だから心が狭くなっているのでしょうか
もっと精進すべきです
Dataの中身のDouble値そのままじゃ他の言語と互換性無いからじゃね
小数点以下が時間とかどうなの?
質問です。
JP1(日立の運用ツール)からVBSを起動し、
VBSからExcelマクロを起動しようとしています。
つい最近、WinServer2003からWinServer2008のサーバーへと
環境が移ったのですが、移行後にJP1からVBSを起動したところ、
"Workbooks クラスの Open プロパティを取得できません"
とエラーを吐きExcelマクロが起動できなくなりました。
似たような経験をお持ちの方がいましたら、
どうやって解決したかを教えてもらえないでしょうか。
256 :
255:2011/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:2011/06/22(水) 01:18:28.93
<参考>
・手動実行なら問題なく起動します。
・旧環境、新環境ともにJP1がインストールされている
サーバーにはExcelがインストールされていないが、
実行先のサーバーにはExcelがインストールされている。
よろしくお願いします。
258 :
249:2011/06/22(水) 01:19:11.34
>>252 わたしへのレスですか?
もしそうだとしたら、HelloWorld!卒業くらいのレベルなので、
おっしゃっている事がさっぱり分からないです。
私がやりたいのは、あるシリアル値があったとして、それが
何年何月何日なのか分からないため、それを日付にしたいんです。
もっとスマート?な方法があったら、ご教示いただければ幸いです。
>>257 適当だけど、実行元のサーバーにEXCELのランタイムは設定されてる?
なるほど、自分で
>>239に書いた内容はもう忘れたわけですか。
262 :
255:2011/06/22(水) 01:40:11.91
>>259 確認しないとわからないですが、
ないかもしれません。
明日調べてみます。
ありがとうございます。
263 :
249:2011/06/22(水) 01:53:29.94
>>260-261 失礼ですが、
>>249の4-6行目をよく読んでみてください。
それで双方理解できないならば、いづれかもしくは双方の
理解力に問題があるということで。
ちなみに、
>>258で書いたスマート?な方法はご存知ないですか。
"シリアル値"が分からない私も初心者
265 :
デフォルトの名無しさん:2011/06/22(水) 02:47:12.69
時刻のシリアル値ってふつー秒単位じゃないのか
なにいってんだこいつ
VBやエクセルなどのVBAではシリアル値とは整数部が1970/1/1からの日付で、小数部が時間を表すフォーマット
エクセルの普及からシリアル値といったらこっちになることが多い
269 :
デフォルトの名無しさん:2011/06/22(水) 21:48:02.32
>>256 プロジェクト→参照設定
でエクセルのライブラリ参照とかじゃない?
270 :
デフォルトの名無しさん:2011/06/22(水) 22:04:33.32
>>263 文字列に変換するなら
Debug.Print Format(DT, "yyyy/mm/dd(AAA)")
>>270 いや、俺も最初そう思ったけど、ある年月日から現在までの期間を"YYYY/MM/DD hh:mm:ss"のフォーマットで
何年、何ヶ月、何日の何時間、何分、何秒経ったかを表示したいって言ってるんじゃないの?
それ、「ある年月日から現在までの期間」が例えば 31日だったとして、
今日だったら、1ヵ月と表示するけど、同じ期間でも来月だったら、
1ヵ月と1日って表示するってこと?
うるう年まで考慮するなると、一発でちゃんとしたものができるか俺
には自信がない...。
>>255 >サーバーにはExcelがインストールされていないが、
>実行先のサーバーにはExcelがインストールされている。
これ、1行目はJP1の管理サーバーって事で良いんだよね?
Excelは実行先だけで良いはず。気になるのは、手動で動かした
ときは上手くいって、JP1から起動させるとダメだってとこだな。
思いつくのは、JP1からキックしたときの権限じゃないかな。
実行ユーザーを指定できるなら、手動で動かしたときと同じ
ユーザーで起動するようにしてみたらどうだろ。
後は、objExcelAppにちゃんとインスタンスが入ってるか(nullじゃないか)
と、FileSystemObjectで、Excelファイルが開けるか試してみて
CreateObject周りでおかしいのか、Excelオブジェクトの何かが
いけないのかを切り分けるかな。
274 :
デフォルトの名無しさん:2011/06/22(水) 23:13:20.30
ある時刻のt1 as dateがあって、そこから今までの時間なら
Dim sec&
sec& = DateDiff("s", t1, Now)
秒はこれで出るけど
月は30.5日くらいにしとく?って客先に聞かないと
んん?これって求めたいものはt1そのもの・・謎は深まるばかり・・
276 :
263:2011/06/22(水) 23:56:16.48
>>270 レスありがとうございます。
エクセルで日付にしていましたが、Format関数?で出来るんですね。
わざわざありがとうございました。
>>271 説明が駄目駄目ですみません。
>>258にも書いたのですが、
このように説明すれば分かりやすいでしょうか。
例えば、Q.次のシリアル値は何年/何月/何日 何時:何分:何秒を表しているかを求めるコードを書け。
という事をお聞きしたかったのです。
日付のデータが記録されているファイルを操作するのに、その中身がシリアル値だったので、日付形式
に変換したかったのです。
ところで、
>>252氏は私へのレスではなかったのでしょうか、アンカーもなくIDのないスレッドだったの
でよく分からなくて。
>だからData自体が最初からシリアル値になってるのにどこに自前で変換かます必用があるのかと...
>頭悪いのかな
>>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なんだけどな。
>>276 何か面倒臭そうな人なので一応レスしとくかな....
ひょっとして既に何らかの方式による既存のシリアル値のデータがあって、
それを日付に戻す方法が知りたかったのかも知れないけど、
>>236からそれを読み取れって
そりゃ無理難題。
シリアル値っていったっていろんな方式があるんだから、
>>236みたいに
日付⇒シリアル値はできたが逆はできないって書かれたら、要は2つの日時の大小比較とかスパンが
計算できる値なら何でもいいはずだと普通は思うんじゃないの?
280 :
263:2011/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:2011/06/23(木) 00:27:55.96
変な流れにしてしまってすみませんでしたが、
>>243氏のレスで私にも理解でき、
>>246の通りできましたので、
皆さんに再度お礼を言って質問を終了させていただきたいと思います。
本当にどうもありがとうございました!
度々すみません訂正です。
誤:
>>246の通りできましたので、
正:
>>249の通りできましたので、
失礼しました。
ありがとうございました。
lngTimeがLong型じゃないことのほうが気になっている俺がいる
VB6付属のMSDNライブラリのVBの項目の定数と変数の名前付け基準によるとプリフィックスには
Long型はlng
Currency型はcur
Double型はdbl
をつけた方が分かりやすいとある
Variant型はvnt
Date型はdtm
お前らさすがにレベル低すぎて開いた口が塞がらないぞ。
>>278のサイトのはVBAっぽいような気がするんだけど
プリフィックスが気持ち悪いな。Long型でもないのにlngを使うのはよくないと思う(誤解を招きかねない)
getTime関数でTimerを2回呼び出すのは時刻の正確さを欠く可能性があると思う
同様の理由でNowとTimerを併用するのも時刻の正確さを欠く可能性があると思う
getTimeB関数は任意の日時とあるのにTimerでミリ秒を補完するのはおかしいと思う
getTime関数はWin32APIのGetSystemTimeAsFileTime関数、getTimeB関数はWin32APIのSystemTimeToFileTime関数を使えばいいと思う
UTCの事を言っている人がいるのにそれには触れない件。
というか気付いていないんだろうな。
何にでも例外はあるがこのスレの連中はやっぱりほぼ・・・
続く。
UTCのことは
>>278のサイトの冒頭に書いてあるが?
293 :
デフォルトの名無しさん:2011/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する方法はありますか?
>>293 デザイン時にTabIndexの0をあえて欠番にしておいて、Loadイベントで
フォーム表示時に最初にフォーカスを設定したいコントロールのTabIndexを0にする。
VBを2年ぶりで触った俺でもすぐにできたぞ。
ところで、そういうのって「デフォルトのボタン」って言うのか....?
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 :
デフォルトの名無しさん:2011/06/25(土) 15:57:49.62
>>294,295
なるほどActivateでしたか、ありがとうございました!
Modalなのでその1回だけ実行するというロジックは不要と思います
やるとしたらStatic変数が好きです
デフォルトのボタンと言ったのは、要は自作のメッセージボックスを作っていたので・・
デザイン時のコマンドボタンのプロパティでDefaultをTrueにすればいいんでないの?
298 :
デフォルトの名無しさん:2011/06/25(土) 16:37:28.78
申し訳ない
コマンドボタンにDefaultプロパティというのがあって、
これをTrueにすることでデフォルトボタンにできるという初歩的な見落としがありました
でもActivateは勉強になりました、Form_Loadの後に来るのはResizeかPaintかとか探してはいたのですが
Defaultプロパティの本来の使い方は、Enterキー入力を受け取るボタンを決めること。
これは
>>293の言っていることと違うと思ったから、Defaultは知ってたけど紹介しなかったんだけど....
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
>Form2にはボタンが複数あって、状況によってデフォルトのボタンを設定したい
これから察するにプロパティのDefaultじゃちょっと違うよね?
Default設定したら状況によってとかいうのが出来ないよね
303 :
デフォルトの名無しさん:2011/06/26(日) 02:23:41.63
テストプログラム作ってForm_Load中でボタンのDefultプロパティを設定してみましたが
Form1ではボタン周りに黒枠が表示されてEnterキーが効くのに
Form2ではDefultプロパティの設定が無視される
ヘルプではフォーム毎にEnterを受け付けるボタンが設定できると書いてあるのに
どうもDefultプロパティの挙動がわからない・・
ボタンのキャプション周りのフォーカス枠表示も欲しいし、やはりSetFocusにします
Defaultってデザイン時だけじゃなくて実行時にも変更可能なのか
知らなかったわ
305 :
デフォルトの名無しさん:2011/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
すまん
ニンジンが初期表示だった!
Me.ComboBox1.Text = "ニンジン"
308 :
デフォルトの名無しさん:2011/06/28(火) 22:38:14.08
309 :
デフォルトの名無しさん:2011/06/30(木) 15:21:23.15
For i%=1 to 4: Combo1.AddItem Choose(i%, "ニンジン","かぼちゃ","キャベツ","たまねぎ"): Next
310 :
デフォルトの名無しさん:2011/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
ひさびさに AS の無い宣言を見たw
312 :
デフォルトの名無しさん:2011/06/30(木) 17:18:31.01
%とか&とか$とか#とか昔のBASICみたいで嫌う人がいるけど
これはコード中で型が判るから絶対に有効だよ
変数名にいちいちstrnameとかlongpointとか入れる人もいるけど実に可読性が悪くて腹立つ
strnameとname$のどっちが可読性が上かは
読む人の慣れとかクセとかでどっちが上とは言えないと思うが
世の中にはstrnameとかいう名前の数値型の変数を定義するような奴がいたりするからなぁ
型のある変数を使わなければ解決だな
毎回長文コーディングになるけど
objectとかは知らん
10年遅れのハンガリアン
っていうか、
>>310のようなマクロてんこ盛りのアセンブラみたいなコード読みたくないw
記号打つときシフトキー押すのしんどい
Dim以外では変数名を途中入力で補完できりゃいいのに
あずにゃ・・・じゃなくて、As 〜で型によって色が変われば分かりやすくね?
つか、変えられなかったっけ?
おれは、dblExsample lngExsample intExsample strExsample とか先頭みるだけで
すぐわかるけどなー。
%とか&とか$とか#とか初めて知ったw
低レベルでさーせん。
俺は$が文字型ってくらいしか知らないな。ポケコン世代だけど
その手の記号もAsと同じだから宣言時だけつけてりゃ使えたような気がする
Dim name$, unko&(10)
name = "namae"
unko(5) = 1000
って
format$
とかで明示的にStringだってのも懐かしい話だな・・
MSDNもVariantのString みたいな言い回しがめんどくさかったなぁ
322 :
デフォルトの名無しさん:2011/07/01(金) 19:47:55.35
割り算で結果がどうもおかしいと思ったらIntegerで受けてたとか良くあるじゃん
wari! = a% / b%
ならそんな間違いは起こらないし、なんでこれが流行らなかったのか不思議
そんな間違いあんただけだってw
&とか%とかそういので型変換もできたらいいなと思う
VB6.XまたはSP7に期待ですね
そんなもの出ないけど
326 :
デフォルトの名無しさん:2011/07/04(月) 18:41:27.30
時々、Lineメソッドで間違ってないのにパラメータがどうこうってエラーが出る?
プロジェクトを一旦閉じてから開き直すと直るけど
>>326 エラーが出るのならば、どこかしらが「間違ってる」と思った方がいいよ。
詳細が分からないから勘だけど、どっかでメモリリーク起こしてるんじゃないかな。
馬鹿っぽい質問に馬鹿っぽい回答だな....
>>326 変数はもちろん Variant 型だよな!
>>326 >使用しているOS、VBのバージョン、サービスパックのバージョン
331 :
327:2011/07/04(月) 22:59:04.79
馬鹿っぽくて悪かったな。
エスパーか
LE使いってどれくらいいる?
334 :
デフォルトの名無しさん:2011/07/06(水) 18:53:51.59
>>327 やっぱり、メモリリークとかでしょうね、VBの
Lineメソッドでエラーにはなるけど、決まったコードで出るわけではないし
ある特定のプロジェクトで出るわけでもないので詳細は書きようもないですが
プログラムがある程度大きい場合に、たまに発生するようです
再現したらキャプろうと思ったけど期待すると出てこない・・
335 :
327:2011/07/06(水) 23:13:20.19
>>334 エラー画面をキャプチャーしても原因はそこでは無いだろうから、
途中経過をモニタリングすべきだと思います。
(メモリの消費状況、インスタンスの開放、配列のErase等々)
どうみてもプログラムに間違いが無さそうならば、
Service Packが最新になっているか確認してみてはどうでしょう?
環境を疑う前にコードを疑えって。
ダメな奴ほど環境を疑う。
それほど対してソースコードは無いんですが実行速度が遅くて困っています
現状フォーム内にメソッドを記述して全ての処理を動かしているのですが
クラスに書き込めば速度向上が望めるでしょうか
それとも実行速度ってコード量に比例するってだけなのですか
教えてください。
LE使いなのでよう知らんがコンパイルスイッチとかいうので実行速度を最適化とかいうの使えばいいとちゃうのん?LEそういう機能がないので全くわからないが。ただの独り言です。
>>337 >クラスに書き込めば速度向上が望めるでしょうか
望めない。理論的にはクラス生成と呼び出しの分遅くなる
>それとも実行速度ってコード量に比例するってだけなのですか
いいえ
起動にかかる時間はコード量(厳密にはコンパイル後のサイズ)に影響されます
起動後の実行速度には関係ありません
コンパイルスイッチってvbにありましたっけ??
C言語とかだとコンパイラーが持ってたりしますけど・・・
341 :
327:2011/07/07(木) 08:26:20.69
>>337 どのような処理なのか分からないと高速化もアドバイスしにくいですが、
一般的にはAPIの使用、キャッシュ、バッファリング、アルゴリズムの最適化
といったところでしょうか。
フォーム内にコードが大量にあるとすると、ロードに時間が掛かる可能性はあります。
>>340 オプション画面から指定できます。
VB5からネイティブコンパイル可能になったからです。
IDEからの動作ですと、インタプリタ(のような)動作ですので、効かないと思います。
自分で契約しているサーバの負荷等を調べるものを作っているのですが、
8つ契約しているので、下記のコードで1個1個順番に行っていると遅いので、
マルチスレッド?で行いたいのですが、下記の事をマルチスレッドで同時に
行うにはどのようにすればよいのでしょうか?
(下のソースも部分的にサンプルサイト等を見て書いたものなので、自分は
ほとんど始めたばかりな感じで、マルチスレッドの基本についても全く分かりません。)
Windows XP SP3 + VB6 SP6を使っています。
もし、やり方が分かる方いましたら教えていただけるとありがたいです。
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
'データ取得
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
以上です、よろしくお願いします。
まて・・・VB6でマルチスレッドはAPI使えばいけるが
確かやばかった記憶が・・・・
どうせなら同じプログラム8つ動かしてマルチプロセス
とかどうよ?w
VB6はシングルスレッドじゃないのか
347 :
327:2011/07/07(木) 23:21:24.06
>>342 マルチスレッドにするにせよ、プロセスを分けるにせよ、
このプログラムのようなIEのインスタンスが一つしか
作成されないような構造では、上手く行かないでしょう。
まず、IEのインスタンスが8個作成されるように改造してください。
(それ自体が不可能な場合はsocketを使用するなどして、
かなりの部分を自作する必要があるので、かなり難しいかと)
IEのインスタンスが複数作成できたならば、問題は
Do Untilでのブロック動作だと思うので、DoEventsと
タイマーコントロールで問題回避できると思います。
あと、余計なお世話だとは思いますが、動かす際には
無用なリクエストが大量発行されないように注意してください。
意図せずにDoS攻撃になってしまう可能性があります。
>>347 レスありがとうございます。
IEの部分は8個作成してもOKです。
>IEのインスタンスが複数作成できたならば、問題は
>Do Untilでのブロック動作だと思うので、DoEventsと
>タイマーコントロールで問題回避できると思います。
この部分はどのようにすればよいか、もしよろしければサンプルをお願いできませんでしょうか。
動かす際には、まず自鯖で試しています。
お気づかいありがとうございます。
>>345 VBのランタイム関数がスレッドセーフである事を保証しないので使えないのと関数を使えないのと、
IDEのインタプリタ上で動かしているとクラッシュするだけで、
大きな問題は無いよ。
>>349 あと、たしか実行ファイルがPコードコンパイルじゃなかったら不具合がおきたと思うんだが。
351 :
327:2011/07/09(土) 01:00:28.84
>>342 サンプル作ろうと思ったら、環境(と、ついでに時間)がありませんでした。
ゴメンナサイ。
一週間ぐらい待てるならば作りますので、言ってください。
とりあえず、大まかな話を。
恐らく目的を達成するにはタイマーコントロールを使用してタイムスライス
っぽいことを実装するのが一番手っ取り早いと思います。
現在、Do Untilで行っている動作は完全に処理をブロックしてしまっていて
他に何もできなくなっているので、その部分をタイマーコントロールを
使用して一定周期で監視するように改造するのです。
その際、タイマーコントロールのルーチン内で1〜8までのサーバの
状態を順番に監視するようにします。
イメージはこんな感じ↓。
352 :
327:2011/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
伝わりますかね…?
While Flag
DoEvents
Wend
今から勉強して新規でプログラム作るなら、.NETでやった方がいいと思うんだが...
>>351 お忙しいところレスどうもありがとうございます。
時間は1ヵ月でも半年、1年でも待ちます。
351自体は説明内容(単語)が分からずさっぱりなのですが、
352で書いていただいたコードを眺めつつ単語も調べて試して
みたいと思います。(今の段階だとさっぱりなもので・・・。)
>>354 れすども!?
なんとなくVB6の方が操作感?というか分かりやすい気がしたもので。
VB6はもう開発終了
メンテナンスもされない。
新しいOSで動作保証がなくなるかもしれない。
自分専用のツールを作って公開しないというのなら
別に構わないが、将来自信作ができたとき、
VB6で作っていると、作り直すはめになるだけ。
というか、そもそも、
サーバーの負荷を調べる程度で、
IEを起動しているのがそもそもの間違い。
IEを起動・・・= CreateObject("InternetExplorer.Application") の部分
重いのがいやならマルチスレッドうんぬんではなく
IEを起動しないようにするのが正解。
よくわかんねーけどサーバのステータスがhtmlで取得できるならGETして中身見るだけですむよね
359 :
デフォルトの名無しさん:2011/07/09(土) 13:40:11.88
回線の負荷か
CPUの負荷ならレジストリ見ればいいらしいが
馬鹿ばっか
「バカ」と罵る奴は何がしたいのか分からんな
バカにはわからんよ。
>VB6はもう開発終了
NETも汎用性がなさそうだしな
未だにVB6製のソフトウェア使ってる企業は何で
365 :
デフォルトの名無しさん:2011/07/10(日) 18:48:15.42
バカは自分が理解できないと人をバカという転位行動をとるよ
366 :
sage:2011/07/14(木) 23:02:07.01
テキストボックスにあるカンマで区切られたデータ(CSVデータ)があって
データを逆順に「りんご,ごりら,らっぱ」→「らっぱ,ごりら,りんご」と
途中まではデータが通りここが通ってない
ReDim Preserve data(i + 1)
Array.Reverse(data)
TextBox1.Text = ""
For j = 0 To i + 1
TextBox1.Text &= data(j) & ","
Next
とするのですが動きません。ご教授お願いいたします。
すいません上げてしまいました
368 :
327:2011/07/15(金) 02:41:19.28
>>366 TextBox1.Text &= data(j) & ","
↓
TextBox1.Text = TextBox1.Text & data(j) & ","
>Array.Reverse(data)
こんなのVB6にあったっけ?
.netならわかるが・・・
手抜きだと
Private Sub Command1_Click()
Dim text As String
text = "ごりら,りんご,らっぱ"
Dim arr() As String
arr = Split(text, ",")
Dim i As Long
Dim changedText As String
For i = UBound(arr) To LBound(arr) Step -1
changedText = changedText & arr(i) & vbCrLf
Next
MsgBox (changedText)
End Sub
>>366 そもそも配列をいちいち逆順にソートし直す必要があるのかね?
For を後ろから-1してくればいいのだとおもうが
>>368-370 ありがとうございました。スレ違いだったみたいです
丁寧なご教授ありがとうございます
>質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、
これを徹底させず答えるから
保守
374 :
デフォルトの名無しさん:2011/07/29(金) 11:58:12.94
保守2
保守なんぞしなくても、この板では落ちないだろ
ふつうにOPENして読み込めばOK
一気に読み込んでsplitかけるなり一行づつREDIMして読むなりそのまま使うなりご自由に
splitかけるとして改行コードは何でしょうか
そんな事いちいち聞くなよ
vbCrLfでやってみたのですがうまくできなかったので・・・
>>380 バイナリエディタで開けば、改行にどんなコードが使われているか確認できるお
>>380 Dim Kaigyo$, Subject$, Subjects$()
If InStr(1, Subject$, vbNewLine) > 0 Then
Kaigyo$ = vbNewLine
ElseIf InStr(1, Subject$, vbCrLf) > 0 Then
Kaigyo$ = vbCrLf
ElseIf InStr(1, Subject$, vbCr) > 0 Then
Kaigyo$ = vbCr
ElseIf InStr(1, Subject$, vbLf) > 0 Then
Kaigyo$ = vbLf
Else
Stop
End If
Subjects$ = Split(Subject$, Kaigyo$)
vb6ってUTF8をそのまま読めたっけか
vbNewLineって使うのまずいんじゃね
読んで配列に入れるだけなら問題ないんじゃね?妙な変換されたっけ?
?
subject.txtってUTF8になったの?
画像見れない
Circleメソッド
じゃ無理か
目的や用途が不明だからよく分からんが
4つの白い四角形がそれぞれPictureBoxコントロールなのか?
でかいPictureBoxコントロールにぽつんとその四角描けば円も描けるだろうけど
61,61以上のPictureBox(以下、Picture1とする)にその□を書いて、
Picture1.Circle(12, 12), 11, RGB(255, 0, 0)とすればいいんでない?
※サイズはその画像から計算
その□の角が中心点だと、その半径分だけ大きいPicture1が必要だよね?
395 :
デフォルトの名無しさん:2011/08/03(水) 00:07:20.45
Line(x, 1)-(x, 5), &hff
って高さ4ピクセルの縦線なんだよ
変な仕様だよね
全然変じゃない。
ピクセルなどという、表示デバイスの都合に依存したフレームで考えてるから
変に思えるだけ。
ユーザー定義もできるーVB6標準コントロールどものスケール
XPでVB6SP6使ってるんですが
実行時エラー9 インデックスが有効範囲にありませんっていうエラーって
配列変数以外で起こる原因ってなんなんでしょうか?
399 :
デフォルトの名無しさん:2011/08/03(水) 09:54:47.09
>>396 じゃあ、ピクセル単位で(x1,y1)から(x2,y2)まで線を引く必要が生じた場合は
Psetを用いる以外にどのような方法が?
>>398 なんか覚えがある
もうちょっと詳しく
>>399 あるプロシージャ内で配列変数は使ってなく
RDOを使用してMSSQLに対してSELECT文を実行し
OpenStaticで取得したrdoResultsetのRowCountを参照して、
RowCountが1以上だったら実処理用のプロシージャをコールするだけなんですが
コールするプロシージャはそっち側でOnErrorしてますのでコール元にエラーが返ってくることはなく
なぜか配列を使ってないコール元のプロシージャで実行時エラー9が起きてて悩んでるんです
401 :
デフォルトの名無しさん:2011/08/04(木) 17:45:29.59
>>400 あーごめん、思い出すきっかけになるかと思って聞いてみたんだけど
思い出せなくてキリ番オメとしか言ってあげられない
IDEだと発生しないエラーだっけ?
他に心当たりある人がいなければ、コールする部分をコメントアウトしてみるとか
コード1行ごとにログを出力するとかして、どこで発生してるか突き止めるしかないね
vb6の不思議なとこは
関数の戻り値を関数から出るまでは何回でも変更できるし
CとかJAVAならreturnで即終了だいs
>returnで即終了だいs
returnで即終了だいすけ?
>>402 不思議と言うより、そこはVB6の優れているところだね
ただ、戻り値の返し方が関数名への代入ってのは頂けない
やはりここは関数名ではなく固有キーワードの方が良い
cやjavaなら冒頭で戻り値用の変数用意すれば同じことできるし
VB6は戻り値設定に関数名使ってるのもだるいが
関数からの抜け出しも文字数長くてしんどい
CやJavaでは、戻り値のあるなしどちらでも関数だが
VB6は片やfunction 方やsub。
これって何か意味あるかな?
>>406 もともとの行番号がついていた時代のBASICには関数はなかった。
しかし関数はなかったがサブルーチンはあった。
変数はグローバルで、サブルーチンは処理をまとめただけ。
CALLはそのサブルーチンを呼び出す命令。
subはその頃から互換性を保ちながらバージョンアップしてきた時の名残。
そもそもBASICは1964年に作られた初心者用言語で
(ちなみにC言語は1972年) 今のような使われ方、機能は想定されてなかった。
このような結構名残はたくさんあって、昔のBASICは変数を定義する必要はなかった。
ただし配列を使う場合には特別に定義する命令があった。それがVB6では変数を定義するときの
キーワードのDimになっている。DimとはDimension(n次元)の略なのに…の答えがこれ
変数の型も昔のBASICにはAs Integerとかなくて、変数名の最後に
%, &, $をつけて表していた。今も使える。
VB6の不思議な仕様はたいてい昔からの名残(互換性維持のため)と考えれば理解できるよ。
初期のBASICの仕様と、それから大きく発展したQUICK BASICの仕様を調べてみたらどうかな。
>>406 VBだってどっちにしろプロシージャーでしょ。
同じものを「何も返さない処理」と表現するか「無を返す関数」と表現するかの違いだが、
いずれにせよ深い意味なんてない。
数学的には後者の方が統一的で美しいけど、反面直観的ではないな。
線分を多角形の特殊形態だと言うのに近い。
.NETに以降したいけど、書き直すのが面倒です!
あの変換するの使っても結構修正箇所が。
(これは自分の作りに問題があるのだと思うけど)
というわけで、Windows7x64にVB6入れて使っている人いますか?
(XPモードじゃなくて)
一応、言っておくか....
.NETで作ってあるのもある。
自宅ではVB6だからそれを移行するのが面倒っていう話で。
というか、本題は。
>というわけで、Windows7x64にVB6入れて使っている人いますか?
>(XPモードじゃなくて)
>>406 単に Pascal に倣っただけでしょ。
「戻り値設定に関数名使ってる」のも同じ。
なんで Pascal は? って聞かれたら Wirth に聞いてくれというしかないが...。
>>409 MSにガイドが有るだろ
基本はプロテクトかかってないフォルダ、つまりProgram Filesとか以外にインストールでほぼ動くよ。
やってないとは思うがシステムフォルダのパス取得は直書きしないで全部関数使う
基本32bitで動くからその辺は気にしないで大丈夫だが、
COMとかDLLとかは実際に動かしてチェックしないと解らん。
あとはVirtualStoreとかの隠しフォルダに気をつけるぐらいかな
良く解らなければUAC切れ
こいつがファイルからレジストリまでユーザー単位で仮想化してるのがおかしくなる原因だ
後は互換モードを活用する
これは過去Ver.と7のAPI対応表を持ってて裏で変換してくれる
あ、プリンタAPIとか使ってるならそいつも確認
セッション0問題とかその辺が引っかかる可能性が有る。
ドライバ関係はメーカ対応無かったりで結構泣けた
移行やったの去年だから今はもうちょっと改善されてるかも?
>>413 移行できない、ではなくて、移行が面倒なんでは?
VB6製アプリが動くか、ではなくて、VB6IDE環境が動くかが知りたいたいのでは?
それに、単純にVB6のコードをVB.NETで動くようにしても、
クラス構造や例外やDBの扱いなんかが悲しいことに。
>>409 Win7(x64)で動くのかどうか知らないけど、VB6環境はXPモードでメンテのみに留めて、
メインの環境を変えちゃったほうがいいんじゃない?
InputManのimTextというコントロールについて知っている人が
いたら教えてください。
imTextをマルチラインで使った場合、半角カナの単語が行末に来る場合
単語が分割されないように自動的に改行されてしまいます。
これを分割されるようにする方法はないでしょうか?
それらしいプロパティが無く困っております。
よろしくお願いします。
>>415 スレ違い
あれは汎用コントロールであって、「VB6でも使える」だけで
VB6の付随品でもなければ、VB6用というわけでもない
そんな、VB6とは関係ないものの質問はNGです
お引き取り下さい
そもそも、正規に購入しているなら、サポートに問い合わせれば良いだけだ
書き忘れましたが自己解決しました。
>>414 あ、
>>411か、これは恥ずかしい・・・
え〜と入れてたし動いてたけど
>>414が正解だと思う
細かいとこで引っかかっていちいち対応するのがめんどかった
WebBrowserコントロールに動的に生成したHTMLを
表示したいのですが、最後の行でエラーになってしまいます。
WebBrowserコントロールに生成したHTMLDocumentを
設定するにはどうしたらいいでしょうか?
Dim doc As New MSHTML.HTMLDocument
Dim html As MSHTML.HTMLHtmlElement
Set html = doc.createElement("html")
Dim head As MSHTML.HTMLHeadElement
Set head = doc.createElement("head")
Call html.appendChild(head)
Dim body As MSHTML.HTMLBody
Set body = doc.createElement("body")
Call html.appendChild(body)
Set WebBrowser1.document = doc
OptionButtonコントロールの選択状態ってどう取得するのがスマートなの?
OptionButtonのClickイベントのたびに選択されたIndexを変数に保持する方法?
それとも状態を知りたいタイミングで一個一個選択された状態か確認する方法?
スマートさなんてのは、人それぞれの感覚で定義が違ってくるので
君にとってスマートなやり方は、君にしか解らない
VBAスレでも似たような展開になってるが、トリッキーでもコードが短ければ
それを以てスマートと感じる奴も居れば、可読性の高さにスマートさを感じる奴も居る
はたまた、汎用性の高さや、拡張性の高さにスマートさを感じる奴も居る
いそんな取得の仕方はWeb上に腐るほどサンプルとして転がってるから
自分でいろいろ見て、自分がスマートだと思った方法を真似れば良い
以上、さようなら
>>420 スマートにしたいのなら、UI部分とロジックは分離して
ロジック部分はUIを使わないでも(例えばCUIなどから)
実行できるようにするといい。
分離したロジックは別のクラスに書く
>>420 なんか愚問だな。
スマートの定義は置いとくとしても、どの方法が適切かは目的しだい。
常にこの方法が適切、なんてものはない。
例えばタブページのタブのように、オプションボタンで、あるコンテナの中に
表示される中身を切り替えたいとする。
こんな時にイベントドリブン以外の方法を採用できるのか。
例えば何かを設定する画面でユーザーがOKボタンをクリックするまで変更された
設定の適用を保留したい場合、イベントドリブンを採用して、ユーザーがオプションボタンを
クリックした時点で直ちに対応する設定値を変更してしまっていいのか。
以上、スマートなOptionButtonコントロールの選択状態の取得方法を知らない人たちの戯言でした
>>424 その後にスマートな方法をスマートに書いていると格好良かったんだが
その1行だけだとかなり滑稽というか、君のが一番惨めな戯れ言に成り下がってるな
>>425 WebBrowserコントロールのdocumentプロパティは読み取り専用ではなく設定も可能なプロパティなの?
>>427 vb.netではできるので高い技術力を持ってすればできるのではないかと。
読み取り専用ごときに怯んではいけないかと。
>>426 ム板で自己満足のコードも無い長文を垂れ流すのを、タワゴトと言わずして何と言おうか
短くても戯言は戯言だし...。
>>432 今はそれですけど、それは無しだと思うのです。
434 :
【Dnewsplus1306759181466917】 :2011/08/13(土) 09:02:32.62
Select Case True
Case Option1(0): Debug.? "0"
Case Option1(1): Debug.? "1"
:
End Select
Dim objopt As OptionButton
For Each objopt In Option1
If objopt.Value Then Debug.? objopt.Index: Exit For
Next
メモ
あと、起動時にどれかが選択状態になってしまうので
全部非選択して、ユーザーに必ず選ばせてから処理を進めたい場合は
Option1(10).Visible=False: Option1(10).Value=True
というようにダミーを隠しておくんだぬ
そんな「意地悪」をする合理的理由が何もない件。
好きな女の子に対しては、いじわr(ry
Private Sub Option1_Click(Index As Integer)
Option1(0).Tag = Index
End Sub
でおけ
うまくググりゃちゃんと欲しかった情報とか出てくるんだな
以前は見つけられなかったけどキーワード次第で今回すんなり見つけられた
俺がググるの検索順位を
いじってあげたおかげだよ。
感謝しな。
うかつにここで質問して叩かれずに済んだという話
>>440 2ちゃんねる初心者か?
どんな質問でも、叩く奴は叩く。
叩かれることに怯えるな。
とりあえず2ちゃんねるで聞く、そして自分で探す。
たまに2ちゃんねんるで釣れてないか確認する。
これが最も効率がいい。
2ちゃんねるはダメもとで書いて置く場所だよ。
>>437 tagってそんな風に使って大丈夫なの?
443 :
【Dnewsplus1306759181466917】 :2011/08/16(火) 06:25:38.36
前回バックアップした時点から更新されたファイルをUSBメモリにコピーして
他のPCにフォローするプログラムを作ってるのですが
何千ファイルものタイムスタンプを片っ端から見ていくのは
時間がかかるのでなんとかしたいのです
フォルダの更新日時というやつが、そのサブフォルダも含めて、
中の最新ファイル更新日時を示しているのなら、
かなり処理をはしょれるのですが、そうはなっていないようです
フォルダの更新メッセージを受け取るような常駐型ソフトではないし
何かいい方法はないですか
445 :
【Dnewsplus1306759181466917】 :2011/08/16(火) 21:05:02.37
新しい順のファイルリストをリダイレクトして先頭のタイムスタンプを・・・
う〜む
素直に FindFirstFile, FindNextFile, FindClose API
を使って列挙するのがいいんじゃないかな。
時刻も同時にとれるし。
USB に全ファイルを入れてもいいなら ROBOCOPY を
使って、更新されたファイルのみコピーする方法もある。
447 :
【Dnewsplus1306759181466917】 :2011/08/19(金) 01:00:25.03
>>446 今はDirループで列挙してますが
コンパイルすると結局そのAPI呼出しに置き換わるのではないかと思っています
毎日ファイリングしてる数百のデータファイルを、今作ってるソフトにかけると
数年前のファイルが置いてあるフォルダでも更新してないかバカみたいに探してるのが悲しい・・
これは、OSがそういう機能を提供してくれない限りしょうがないですね
>>447 たしかに Dir ループは Find 〜 API を呼び出してるんだろうけど、
ファイル名しか取れないでしょ?
ファイル名をとってきて、FileDateTime 関数あたりで更新時刻を
取得してるんだよね?
Find 〜 API を直接呼べば、WIN32_FIND_DATA 構造体に更新時刻
が入ってくるので、FileDateTime 関数を呼ぶ必要がなくなるんだよ。
ローカルだとFileDateTimeを呼んでもたいしたオーバーヘッドはないが
ネットワークドライブだと環境によっては悲惨な結果になる
450 :
デフォルトの名無しさん:2011/08/20(土) 14:06:58.70
Dirはいやらしい
Dirループがネスティングできないと知っていても中で使ってる関数の先の先で使ってたりして
あと、最近発見したのはDirでUSBメモリを参照すると、USBが抜けない
某サイトで開放するためにDir ""とするんだと書いてあったが、
それでもカレントディレクトリを参照してるのか開放はしてないようだった
USBメモリを参照し終わったら、それを開放するためにHDDを参照してやらないといけないみたい
451 :
デフォルトの名無しさん:2011/08/20(土) 15:07:48.28
VB6 IDEでマウスホイールでコードをスクロールするアドインが提供されていますが、動作しません。
なぜでしょうか、今はVB6もXPも最新にしてますが、かれこれ何年も思い出す度に下記を実行しているので
VB6のspやOSやPCが原因ではないと思われます
と、ここまで書いてて自分用のセッテイングに問題があるんだなと思い
ツール→オプション→詳細→SDI開発環境のチェックを外したら動作した
なんだこれー、SDIがダメならマウスホイール使えなくてなくてもいいや
http://support.microsoft.com/default.aspx?scid=kb;ja;837910 1.VB6MouseWheel.EXE パッケージをダウンロード (Click!)
2.VB6MouseWheel.EXE を適当な場所に解凍 (C直下がいいかと。)
3.[スタート]→[ファイル名を指定して実行]で以下のコマンドを入力「regsvr32 (解凍先)\VB6IDEMouseWheelAddin.dll」
4.VB6.0を起動し[アドイン] →[アドイン マネージャ]
5.「MouseWheel Fix」を選択
6.[ロード/アンロード] と [起動時にロード]の項目にチェック
X wheelとかのホイール支援ソフト入れておけば使えないこともないような気がする
454 :
デフォルトの名無しさん:2011/08/20(土) 23:32:13.58
>>452 おお、SDIでも使えるんですか
後で入れてみます
SDIでないとめちゃめちゃ使い難いではないですか?
VBのIDEだけじゃなくてエクスプローラとかバイナリエディタとか・・
複数のコードウインドウの空いたエリアにあれば参照しながら打てるし
MDIとSDIを取り違えてないか?
VBSで質問です。
gethostnameやgethostbynameを使用して
ipアドレスの取得を行いたいのですが実行エラーになります。
使用する方法ありませんか?
エラーの内容やソースも出さずに質問とは
>>456 スレ違い
それはActiveXコンポーネントという汎用APIの質問であって、VBSの質問ではない
VBSの制御構文などに関する質問ならここでもOKだが、汎用APIの質問受け付けたら
キリがない(ActiveXはもちろん、Win32APIの質問も、.NET FrameworkやDirectXなどもOKになる)から
>>1の4行目に書いて有る通り、NGってことになってる
というわけでさようなら
えっと、このスレは VBS は含まれますか?
一応。
大雑把な質問には皆エスパーして答えていることを質問者は理解すべき
いやVBSはどう考えてもスレ違いだろ
と思ったけど、
>>1には
>二.VBScript、インストーラーなどはこのスレでOK。
って書いてあるな。VBSそのものはここでOKらしい
VB6SP&
リッチテキストボックス6(SP6)のスクロールバーを両方表示に設定してる(ScrollBars=rtfBoth)のに
水平のスクロールバーが使えない
リッチテキストボックスの横幅を越える文字は自動で改行されて表示される
どのプロパティいじれば横スクロールバー有効になるの?
(垂直スクロールバーは問題ないんだけど)
>>465 ScrollBars プロパティ のヘルプ嫁。
水平スクロール バーは、RightMargin プロパティがコントロールの幅よりも
大きな値に設定されている場合に限り表示されます。
このプロパティの値は、コントロールの幅と同等か、わずかに小さいだけでも
かまいません。
>>466 トンクス
今度から真っ先にヘルプを探してみます
どうもすみませんでした
VB6でコレクションにあるクラスが入っています。
項目を取り出すとき、中に入れたデータはクラスですが、返り値はObjectで帰ってくるようになっていると思います。
この項目をあるクラスの変数に復元して入れることは出来ませんか?
エスパーすれば言いたいことは解るけど、あえて突っ込ませて貰う
>>468 日本語(自然言語)で理路整然とした文章を書けない奴に
プログラム言語は無理
>>469 あえて突っ込んでおく
意外とそうでもない
句読点も打てない奴に、んなこと言われたくねーよ。
>>471 どこに句読点が必要なんですか?
わかりません><
禿、同。
コンパイラさんやインタプリタさんって自然言語で文章書けるんだ
>>471 が、今顔真っ赤にして、恥ずかしがってる、気が、してならない。
よほど悔しかったと見える。
477 :
デフォルトの名無しさん:2011/08/23(火) 18:00:29.63
>>468 こゆこと?
Dim col As New Collection
Dim c1 As Class1
Set c1 = New Class1
c1.Key = "abc"
col.Add c1, c1.Key
Set c1 = New Class1
c1.Key = "efg"
col.Add c1, c1.Key
Set c1 = New Class1
c1.Key = "hij"
col.Add c1, c1.Key
Set c1 = col.Item("efg")
MsgBox c1.Key
'この例はClass1には Public Key As String のプロパティ作ってある
>>468 ちゃんと中に入れたクラス型ががわかっているなら
取り出す時に、同じクラス型の変数に入れてやれば良い。
キャストの手間は無い。
>>476 悔しかったというより、471は恥ずかしかったんじゃねーの?
というか、恥ずかしいという自覚を持てずに悔しがっちゃうようだとお粗末すぎるし・・・
なんで
>>471が叩かれてるのか、さっぱりわからない
>>477-478 回答ありがとうございます。
なるほど、このような時は明示的なキャストというものはしないのですね。
なんとなく動いてはいたんですが、ちょっと怖い気がして質問させていただきました。
日本語がおかしかった部分に関しては・・・お恥ずかしい限りですが焦っていたのもありました。
ご回答ありがとうございました。
WebBrowserを使いサイト内のiframeに書かれているURLにアクセスして
テキストを入力するプログラムを作っているのですが、本体とiframeで
ドメインが違っていて「アクセスが拒否されました」とエラーが出てしまいます。
IInternetHostSecurityManager.GetSecurityIdというのを実装すればいいと
いうところまでは調べてわかったのですがどう実装していいものなのかわかりません。
IInternetHostSecurityManager.GetSecurityIdの実装方法もしくは別ドメインへの
アクセス方法が他にあるのであれば教えていただきたいのですが・・・。
よろしくお願いします。
親のURLからたどればいいんじゃない?
VB6と関係ない質問ぽくね
485 :
デフォルトの名無しさん:2011/08/25(木) 04:48:59.67
何の話か判らんけど以前、ネット上のサイト読むのに
WinSockでシコシコ読んで文字コード変換までしてたけど
今はアドレス渡すだけで一発でソースをテキストファイルに落とすAPIがあるんだね
HTTPごときでシコシコはいいすぎだと思う
html程度ならふつーのOPEN命令でも読めたりするんだよな
タイムアウトなどの処理はどうだったかしらんけど
なぜ自分で試さないのか
やってる事はほぼ一緒だけど、「メモ帳」でもURL入れて開けばhtmlが出るんだよな
復活
ほんとだw出たw
Windowsの仕様?Win7とかでも出るのかなVB6サポートされてるからって
このOpenの仕様はVB6とは関係ないかんじなのかな
>>491 別にいけなかないが、自分で試せばすぐにわかることだろ。
>>488書いてから、誰かがレスするまで何時間も待つのか?
くだらないやりとりやってないで、答えてやれよ
>>488 もちろん、読める
読めるわけ無いだろ
少なくともメモ帳ではマジで開けた
498 :
デフォルトの名無しさん:2011/08/27(土) 15:29:03.29
すごーい、OPENで読めた
VB2からやってるけど、これは知らなかったわ
凄い物知りがいるんだなここは
>>486 サーバーからバッファに受信したデータを結合したりチャンク形式に対応したり
かなりシコシコなコードになったよ
でもまぁ、2ちゃんの鯖の時刻を時刻合わせに使ったり、自前のコードは色々と
応用がきくから捨てたもんじゃないけど
つまりOPENでsubject.txtを読み込み、改行コードでsplitしたあと2次元配列にいれていくってことか
subject.txtの取得時ってUAは関係ないっけ?
openで読む時リクエストヘッダを任意で指定できるのかな
なんかそう言う細かいところはできなさそうな雰囲気で結局WinSock叩く方が早いっていう結論になりそう
HTTPプロトコルを喋りたいのなら、
HTTP用のライブラリを使えばいい。
WinSockを使う必要はないし、
様々なヘッダの解釈面倒だろ。
それすっ飛ばしてWinSockにいっちゃう人って
逆に知識ないんじゃないかって思う。
というか.netに行くのが正解
httpdのログ見るかぎりはIEで接続されてる事になってるよ
>>502 とりあえずお前のお勧めのVB6用HTTPライブラリ教えてくれ
>>504 だろうねw
どうせユーザーエージェントなんて
urlmonで変えられるだろ。
507 :
デフォルトの名無しさん:2011/08/28(日) 14:46:47.87
自作のエディタで開けたからOPENで読み込んだと勘違いしてたけど
ファイル名入力のGetOpenFileNameってダイアログのAPIがファイル名にURLを与えると
IEのキャッシュファイル名を返してきて
OPENは単にTemporary Internet Filesの中のファイルを開いてるだけでした
>>507 でもそれは結局URLを読んでるのと同じだろ?
単にキャッシュ読むなら相手のhttpdログに残らないわけだが
キャッシュよむかどうかはインターネット設定によるんじゃ?
キャッシュに無ければ実際にhttpでデータとってくるだろ
インターネットの画面で右クリックしてプロパティを開くと、
WEBページのサイズを確認することができますよね?
それを利用して、サイズが変わった=ページの更新があった という考えで
更新があると
「チェックしているサイトが更新されました」
という風に画面に表示するようにしたいのですが、
このような動作をVB上で実現することはできるんでしょうか?
実現可能であればどのような関数を使って作成すればよいのかを教えてください。
お願いします。
Content-Lengthが帰ってくる保証は無いしLast-Modifiedも同じくあてにならない
以前のファイルと取ってきたファイルを比べないと正確な更新があったかはわからない
つか、そういうのはそれなりのスレで聞いた方がいいんじゃないかな
とりあえず、Content-Lengthでやってみて駄目ならでいいんじゃねっていう。
512さん教えてあげて!w
だがことわる
515 :
511:2011/08/28(日) 23:09:48.78
>>512 今はとりあえず、サイズでチェックのみの
簡単なもので作りたいと考えています。
ですのでこの際正確に更新があったかどうかは問わないもので大丈夫です
winsockのTCPの80でHEADかGETを行い読み解析
詳しくはぐぐってくれ
くれぐれも実在するインターネットのサイトでテストを行わない事
練習用のサーバを建てて実験するように
冗談じゃなく牢屋にブチこまれるぞ
ETagがあるんならそっちのほうがいいような気がしてきたが、どうなんだろうな
俺はそんなに詳しくないからわからん
岡崎市立中央図書館事件というものがあってな
サーバ管理者側が意図しない接続をうけたと警察に被害届を出せばとりあえず逮捕するという前例を作ってしまったんだよ
なんか2chって得意げにそれを挙げる馬鹿が多いよな
得意げになるようなものか?これ
投稿者はドヤ顔してるに違いない
妬むなよ、気持ち悪い。
>>520 別にそんな例を出さなくても、
誤認であっても逮捕されるなんて知ってる。
世の中のこと何も知らないんじゃないのか?
具体例を出したら例を出すなと言い、
出さなかったらソースは?と聞く。
つまり、元々の発言が、くだらないものだってって結論。
逆に言えば、くだらないものだという証明をするために
証拠を出させたとも言える。
妬むなよ、気持ち悪い。
何だこいつw
524 名前:デフォルトの名無しさん[sage] 投稿日:2011/08/29(月) 01:34:25.23
妬むなよ、気持ち悪い。
528 名前:デフォルトの名無しさん[sage] 投稿日:2011/08/29(月) 02:33:07.31
妬むなよ、気持ち悪い。
これ見るたびに2chネラって頭悪い奴が多いなと思うんだけど、
岡崎の件は普通に考えればケーサツの勇み足っていう文脈で言及されるべき事件であって、
こんなのを「犯意がなくてもお縄になる事例」として挙げる奴は脳が湧いてるのかと。
別件逮捕のネタとして使われないとは言えない時代だから困る。お前ら、バグは残すなよ
別件って
何かやましいことでもしてんのかよw
vbのツールバーのボタンサイズを変更するにはどうすればいいんですか?
普通にやればいいんじゃないの?
>>530 実際には当事者であるMDSの嘘を専門家の意見として鵜呑みしている時点で
勇み足というレベルではなく深刻な警察の腐敗が明らかな大問題
>>535 犯罪だという訴えがあって、逮捕状も出た(んだよな?当然)のに、
逮捕しなかったらそれは警察の怠慢。そっちのが腐敗しとるわ
逮捕状ってのは警察が請求すれば自動的に出ることになってるんですよw
結局使ってるのは人間だからなぁ
539 :
デフォルトの名無しさん:2011/09/04(日) 09:18:47.55
再起動するのは
Shell App.Path+App.ExeName+".exe", vbNormalFocus
End
でしょ
このコードで動くのは自分がドライブルートにある場合だけ
ルートにある場合だけApp.Pathの末尾に¥が付く理由とは?
態度が気に入らないから教えません
FileSystemObjectのBuildPath使えば\のこと気にせず
>>540 ×態度が気に入らないから教えません
○私は知識がないので教えられません
自らを正すのではなく相手に逆切れ
そんな朝鮮的な感情、ステキやん?
つーかさ、教える教えない教えられないとか以前に、
>>539に「理由」を回答する必要あるのか?
理由や原因が解れば、ユーザー側で対処改善出来る類の物なら理由を聞くのも解るが
件のはそういう類のものではない。あえて言うなら「仕様だから」で、なぜそういう仕様なのかという「理由」は
MSに聞くべき。
なのでユーザーとしては
「ルートにある場合だけApp.Pathの末尾に¥が付く」理由を聞いたり考えたりするのではなく
「ルートにある場合だけApp.Pathの末尾に¥が付く」前提での対策を考えるべきだ。
因みに俺の場合、基本クラス(全てのプロジェクトに組み込む自作クラス)のInitializeで
変数=App.Path
if right(変数,1) <> "\" then 変数=変数 & "\"
的な処理をして、
「App.Path」相当のものを「クラス.AppCurrentDir」で、ルートでもそれ以外でも
必ず末尾\有りで取得でき、
「App.Path+App.ExeName+".exe"」相当のものを「クラス.AppFullPath」で
ルートでもそれ以外でも正しく取得できるようにしている。
ついでに言うと
Shell App.Path+App.ExeName+".exe", vbNormalFocus
ではなく
Shell App.Path+"\"+App.ExeName+".exe", vbNormalFocus
として
「このコードで動くのは自分がドライブルートにある場合だけ」
ではなく
「このコードでは自分がドライブルートにある場合だけ正常に動かない」
と主張するのが普通でしょ。
>>544 FileSystemObjectのBuildPath使えよ
>>544 >「ルートにある場合だけApp.Pathの末尾に¥が付く」理由を聞いたり考えたりするのではなく
「末尾に\が付く」んじゃなくて、ルート="\"だよ。
C:\abcは、「ドライブC」の「ルートからたどって」「abcというフォルダ」
つか、ルートに\がつく理由は、それが仕様だから
最近決まった仕様でもないし、その仕様にどうこう言っても始まらない
なぜそういう仕様なのか考察するのは別のスレでやってくれ
まあルートがバックスラッシュなのはwinに限らない訳で
それを何故と問われても困るわな
でもそれで起源を辿ってみるのも面白いかもよ?
>>548 お前のわけのわからん俺クラスを使われるのより、BuildPath使った方がよっぽどいいよ
>>547 > つか、ルートに\がつく理由は、それが仕様だから
まだ、ルートに\が「つく」とか言ってるのかよ。
「つく」んじゃなくて、ルート="\"だってば。
C:\A\B
二個目の\はAのルート、BはAのルートの中にある、ってはなしだな?
何言ってるんだろうか
ルートは一つ
ディレクトリやパスを扱う場合は、"C:\A\B"のかわりに"C:\A\B\"という入力もValidなので、
いつでもBuildPathを使っといた方がいい。で、どうせFileSystemObjectを使うんだから、FSOの
その他のメソッドも積極的に使う方がいい。
BuildPathというかFileSystemObjectに拘ってる奴がいるな
\つけて\\を\に置換すればいいだけだろ
newpath$ =Replace(path1$ & "\" & path2$, "\\", "\")
こう?
FileSystemObjectのインスタンスあればBuildPath使えばいいし
FileSystemObjectを使ってない場面では自前処理で問題ないだろう
場合場合で使いわければおk
なんかいかにもVB厨らしいアホな会話w
普通に考えれば
>>556の言ってることが一番まとも。
Win98以前の時代なら躊躇する合理的理由もあったが、いまさらWin9x環境のことを考慮する必要もないだろう。
FileSystemObjectのインスタンスあればって何だよ。
ライブラリ化しとけよそんなの。
VB6で正規表現っぽい処理させるにはどうしたらいいの?
>>560 FileSystemObject = ライブラリだよ
一方、俺はめんどくさいので最初に専用の変数を用意し、
そこにApp.Pathをぶち込んで末尾の"\"を確認してない場合にその変数に"\"を追加して、
以降はずっとその変数を利用している。後悔はしていない。反省もしていない
A:\
B:\
>>563 VB厨様には「ライブラリ化する」って表現が通じないことがよく分かった。
ライブラリ化するという表現は伝わるけど、どうも
>>560 の言うライブラリ化は
違う意味のようだ。
いやまあ概念は知っといて損は無いけど
要は意図した形になってりゃ良いんじゃねーの
問題無く動くならそこから先は自己満足の世界だろ
今のスペックなら悪意でも無きゃ差なんて出ない
なんか解ってない奴ばかりだな
>>557 > BuildPathというかFileSystemObjectに拘ってる奴がいるな
ということにしないと、自己崩壊しちゃうの?
>>566 すでにライブラリになっているものを
ライブラリ化する意味はない。
普通にライブラリを使えばいいだけ。
>>573 君が作るライブラリには、VBの標準関数しか登場しないんだろうけど、それは君のスタンダードでしか無いよ
でもFileSystemObject を再度ラップしてライブラリ化する意味はあんまない気がするね。
使う人によるだろ
FSOに限らず、エラーハンドリングの一元化とか、ログ出力の一元化とか、足りない機能の追加とか
いろいろあるでしょ。ちなみにFSOに足りないのは、再帰処理。
リストビューをリスト表示にしたとき
ある文字数(15文字くらい)に行くと
途切れてしまうんですが、
文字数を増やす方法って何か無いですか?
>>574 > 君が作るライブラリには、VBの標準関数しか登場しないんだろうけど、それは君のスタンダードでしか無いよ
何を言ってるんだ?
FSOを使って新たにライブラリを作る意味が無いだろ。
ライブラリを作る場合は、
既存にはない機能を作るんだよ。
VBの標準関数をライブラリしてどうするんだw
>>576 うん、ならFSOに足りない機能をライブラリとして作ればいいわけで、
FSOはそのまま使えばいい。
>>578 そういう馬鹿なこと言ってる(もちろん自覚ないんだろうけど)と、
これがVB厨ですって感じでどこかにコピペされちゃうよw
しかし、本当にマジで言ってるのかそれ。
車輪の再開発は必要ないけど
車輪を応用したものを造るか てのは個人の好みだろ
クラスにするとかしないとか モジュールにするとかしないとか
話は車輪の再発明じゃないよ
使いやすいキーボードに
キーボードカバーをかけるようなもん。
せっかく完成されたものを使わずにラップしてどうする。
世の中に普及しているライブラリってのは一般によく設計された作られているもの。
理由があってこうなっているのに、それをラップしても使いにくくなるだけ。
ラッパーは作るのがかなり難しいんだぞ。
十分に説得できる根拠がなければ、それは単に機能低下させているに過ぎないものになる。
どうせ、ラップして簡単に使えるよ→それじゃこういう場合に使いにくいだろ→拡張するよ→繰り返す→ラップ前と殆ど変わらいよ。になる。
既存のライブラリが使いにくいのなら、ラップするのではなく使いやすくするヘルパーライブラリを作ればいいだけの話。
そうすれば、あるときはヘルパーライブラリで簡易な操作をしながら、それでいてオリジナルの全機能もそのまま使える。
長文なわりにレベルは低いな
ほら、またw 反論しろよ。だからお前はw
何がほらか知らんけど、複数の人物を同一人物だと妄想してる馬鹿がいるな。
そんなことはどうでもいいが、さすがにFSOを使用した自作のユーティリティー関数(の集まり)
をライブラリーとは言わないだのとか言った話は、馬鹿らしくて話にならない。
反論って、そもそも無知で馬鹿で非常識すぎて話が噛み合ってないのに反論も糞もあるか。
じゃあ黙ってろよw
言いたいことがあるから、黙らずレスしたんだろ?
なのに、その肝心の言いたいことがかかれてないのだから、馬鹿にされて当然。
こういう子が居るからVB使いはバカにされる
特に、「バカほど声がでかい(掲示板では必死な文を書く)」の格言通りの奴が多いから
尚更バカが目立つ
で?
VBって、VacaBakkaの略ですか?
>>586 >ライブラリーとは言わないだのとか言った話
そんなレベルの話してるやついたのか?
FSOを使うためのライブラリ作るべきか不要かの話してるやつは結構居たがな
まあそんなの環境と要件と個人の趣味で好きにすれば良い話
こんな感じ?
'FSOEx.Class
Dim mFSO As IWshRuntimeLibrary.FileSystemObject
'フォルダ以下のファイルリストを取得する
Public Function GetFileList(strDirPath$, Optional colFileList As Collection = Nothing) As Collection
Dim f
With mFSO.GetFolder(strDirPath)
For Each f In .SubFolders
GetFileList f.Path, colFileList
Next
If colFileList Is Nothing Then Set colFileList = New Collection
For Each f In .Files
colFileList.Add f
Next
End With
Set GetFileList = colFileList
End Function
Public Property Get FSO() As IWshRuntimeLibrary.FileSystemObject
Set FSO = mFSO
End Property
Private Sub Class_Initialize()
Set mFSO = New IWshRuntimeLibrary.FileSystemObject
End Sub
IWshRuntimeLibrary.FileSystemObjectのインスタンスをScripting.FileSystemObjectの変数へ代入
FileSystemObjectのインスタンスは状態を持ってないので
「どこからかデータを書き換えられる」ことがないので
いちいち生成する必要はありませせん。
つまり、標準モジュールにPublic FSO as new FileSystemObjectと書けばいい。
Set FSO = Nothing
newで宣言してるからFSOにNothing入れてもFSO呼び出されるときインスタンス生成される
こうか
'FSOEx.bas
Public FSO As New FileSystemObject
'フォルダ以下のファイルリストを取得する
Public Function GetFileList(strDirPath$, Optional colFileList As Collection = Nothing) As Collection
Dim f
With mFSO.GetFolder(strDirPath)
For Each f In .SubFolders
GetFileList f.Path, colFileList
Next
If colFileList Is Nothing Then Set colFileList = New Collection
For Each f In .Files
colFileList.Add f
Next
End With
Set GetFileList = colFileList
End Function
>>596 そこまで防ぎたいのなら
標準モジュールにperoperty getを
書けばいいだけなんだけどね。
やる意味が無いから俺はやらないけどw
DimでNewをつけてるから
>>596のコードがどこに入ろうとも効果無しだよ
>>598 mFSOをFSOに直さないとエラーでるよ
えーとFSOをそこまでしなきゃならない理由を是非
そこまでって何かすごいことをやってるのか?
VB6って今SP6だけ入れれば最新の状態ですか?
その後に、何か不具合や脆弱性のあるものの修正パッチとかありましたか?
あ、言い訳にはならないかもしれませんけど、
まだ中学生でVBもまだほとんど分からないのです。
よろしくお願いします。
俺が中学生のころはアセンブリとBASICが
バリバリ使えたが。これだからゆとりは。
それはあなたが特殊なのでは
それはあなたが特殊隊員なのでは
>>606 おもちゃをバラしたのはいいが、元に戻せなくなってしまった的な
アセンブリですか?
特殊じゃねーよ。少なくともパソコン部のもんは
みんなできたし。
なんかわざとらしい会話が繰り広げられているなぁw 何が目的か。
ここに棲んでる奴らの回答なんか当てにならんだろ
MSに問い合わせろ
>>604 ここに棲んでる奴らの回答なんか当てにならんだろ
MSに問い合わせろ
VBで作ったアプリにVBS(ActiveScript)のマクロを搭載するにはどうしたらいいの?
ActiveX.exeにすれば、VBS側からVBアプリを呼んで、VBアプリ内の関数が返した値をVBS側で取得できるが
逆にVBアプリ側からVBSを呼んで、VBS内の関数が返した値をVBアプリ側で取得したい
VBSをWSCにすれば素で出来るけど、WSCはxmlで定義を書かなければならず使いにくいのでVBSが使えるようにしたい
実際、VBSやJSのマクロを組み込んだアプリは存在しているので間違いなく可能なはずだけど
検索してもVB6とExcelなどのOfficeアプリマクロの連携の話とかばかりで目当ての記事が見つからず・・・・・
VB6-SP6、WinXP-SP3です
>>613 604です。
すみません、MSもなんか問い合わせ先が沢山あったり、
上手く伝えられないので、知っている人いたらなんとか
教えてもらえませんでしょうか。
>>614 「VBで作ったアプリにVBS(ActiveScript)のマクロを搭載する」って具体的にはどういうこと?
コンポーネントの追加でMicrosoft Script Control (msscript.ocx) を追加して頑張れ
Private Sub Command1_Click()
ScriptControl1.Eval "Msgbox(""hoge"")"
End Sub
なんでもかんでもサブセットだなぁ
>>619 それ元々Palmの開発環境だった筈。
その頃もVBユーザーを標的にしてたと思う。
>>619 もともとPalm用の開発環境だったんだっけな
windowsメッセージキューをクリアしたいんですが
どうやったらいいでしょうか?
クリックイベントを除去したいのです。
すみません。除去できました。
Windows 8 Developer Previewに VB6インストール
WindowsXPにVB6をインストールとVB6のSP6もインストールしたんだけどさ
インストーラーがwindows\system32フォルダにいろいろとファイルコピーしてたけどさ
あれってちゃんとバージョンチェックしながらコピーしてるんだろうか
XPにもともとあるファイルでこの古いVB6のより新しいファイルを上書きしちゃったりしてないだろうか
してたらどんなトラブルの原因になるかわからん
怖いな
気にするとハゲるぞ
インストール前の物と後のものを比較すればいいじゃないか。
でも、dllって問答無用で上書きじゃなかったっけか?
質問させていただきます。
プロシージャの引数ですが、オブジェクト型であっても、値渡しできますよね?
Public Sub hogehoge( ByVal obj As Foo)
のように。
この引数で渡されたobjというのは、コピーしたものが渡されるのでしょうか?
ByValとByRefの比較テスト用プロシージャ作って試してみれば
>>632 値渡し出来るけど、コピーしたものが渡されるけど、
何がコピーされたかが重要。
Dim obj as object
set obj = new Form1
call hogehoge(obj)
って書いた時、
objはForm1の実体(インスタンス)を参照する為の4バイト(多分)しか持ちません。
hogehogeを呼ぶ際、その4バイトのアドレス情報がコピーされ渡されます。
なので、ByValだからってフォームが2つになるような事はありません。
こんな感じで検証でもしてみればヨロシ
Public obj2 As Foo
Public Sub hogehogeV(ByVal obj As Foo)
MsgBox obj Is obj2
obj.value = 100
Set obj = New Foo
obj.value = 200
End Sub
Public Sub hogehogeR(ByRef obj As Foo)
MsgBox obj Is obj2
obj.value = 100
Set obj = New Foo
obj.value = 200
End Sub
Dim obj As Foo
Set obj = New Foo
Set obj2 = obj
obj.value = 0
Call hogehogeV(obj)
MsgBox obj.value
MsgBox obj Is obj2
Set obj = New Foo
Set obj2 = obj
obj.value = 0
Call hogehogeR(obj)
MsgBox obj.value
MsgBox obj Is obj2
オブジェクト変数はオブジェクト参照のアドレス値が格納されている変数で
引数でByValで渡すとオブジェクト変数に格納されている値であるアドレス値のコピーが渡されるのであってオブジェクトのコピーが渡されるわけではない
一方ByRefだとオブジェクト変数が参照しているオブジェクトじゃなくて、オブジェクト変数自体への参照が渡される
637 :
デフォルトの名無しさん:2011/10/02(日) 00:37:19.04
ご教授下さい。
AUTOCADというCADソフトのVBAで、コマンドをいろいろ作っているのですが、
コマンド実行中、他のアイコンが選択された場合にだけ Unload Me で終了したい
のですが、他のアイコンが選択されたというイベントを知るにはどうしたらいいのでしょうか?
638 :
デフォルトの名無しさん:2011/10/02(日) 00:38:53.94
配列の先頭インデックスは0だ。
この常識が通じないバカな言語が一匹居る。
それがVB
alt+タブでウインド選択する機能をデザインしたヤツバカだろうね。
同じアイコンがならんでて選ぶたびに順番変わるし
普通あの機能使うのは順番に列挙したいからだろ?
なんで選ぶたびにどれをえらんで、どれがまだ試してないのかわからないまま
闇雲に操作してんだよ
何年も何年も。
ばかじゃん。
>>639 突然なんだ? 誤爆か?
ちなみに、ちゃんと「アクティブになった順」っていう「順番」になってるじゃん。
あ
普通とか言って普通だった試しが無い法則
使い道間違えたまま何を
闇雲に操作してんだよ
何年も何年も。
ばかじゃん。
またバカが
ちょっと何言ってるのかわからないですねー
複数のファイルを選択またはドラッグドロップして、ある文字列を別のファイルに検索して、書き出したいです。
複数のファイルの参照ができないので、教えてください。
別のファイルの書き出しはできました。
646 :
デフォルトの名無しさん:2011/10/07(金) 13:57:58.06
エクスプローラからドラッグするの
またはリストボックスのセレクテッドを拡張して複数せんたくするの
あるもじれるを別のファイルにけんさくってちかんのことをいってるのだろうか
おさわりまんこのひとです
649 :
デフォルトの名無しさん:2011/10/08(土) 12:11:49.33
>>637 他のあいこんとはどkのあいこんでしょか
ですくとっぷのあいこんなら自身がふぉあぐらんどにないことをたいまでみればいいかもー
(かなりいいかげん
650 :
デフォルトの名無しさん:2011/10/09(日) 20:10:14.17
>>649 >他のあいこんとはどkのあいこんでしょか
同じアプリケーション内のアイコンなのです。
651 :
デフォルトの名無しさん:2011/10/10(月) 14:23:40.79
何で作ってるアイコンでしょうか
ImageならImage_Click、PictureBoxならPictuteBox_Click、ButtonならButton_Clickでいいじゃないですか
そこにUnload Meと書けば
652 :
デフォルトの名無しさん:2011/10/18(火) 21:52:09.27
クラスモジュールでEnumWindow関数を使いたい場合
AddressOfが使えないのですが
関数へのポインタを取得する方法がなく困っています
XPSP3でEXCEL2000のVBAで作成していますが
実現したい事はあるWindowと同じプロセスの
Windowがあった場合にWindowTitleによって
異なるMessageを送信する。です
元のWindowはデータ転送アプリで
進捗が進むと不定期にダイアログが表示され
都度進捗が止まるので自動でダイアログに
Messageを送り進捗を進めたいのです
>>652 なら標準モジュール使えばいいだけでは?
何が聞きたいのかよくわからんよ
VBScriptについて質問をさせてください
【やりたい事】
1.InternetExoirerで表示されたホームページからデータを取得したい
2.取得したデータの検索結果を自動で入力したい
取得したい部分はサンプル↓の あいうえお! かきくけこ という部分です
<form action="/hogehoge" method="post">
あいうえお! かきくけこ<br>
<input type='submit' name='aaaa value='1' accesskey='1'>
<input type='submit' name='aaaa' value='2' accesskey='2'>
<input type='submit' name='aaaa value='3' accesskey='3'>
<input type='submit' name='aaaa value='4' accesskey='4'>
<input type="hidden" name="mode" value="start">
<input type="hidden" name="ccc" value="2222222222">
<input type="hidden" name="ddd" value="1111111111">
</form>
この部分を取得して、予め作成しているスクリプトの検索にかけて
検索結果によってsubmitで1〜4のいずれかを入力する、というスクリプトを作成したいのです
検索部分について、データを取得できたと仮定してソースはできました
検索元となるhtmlからの取得と、sendkeyの部分がよくわかりません
調べてみましたが、お手上げ状態です
どなたか宜しくお願いします
素人はそういうことしないの
俺は8年前までVB6のプログラマーだったが転職して
excel のvbaやsqlでツール作るのが殆んど、、、
最近、処理速度が必要なツール作成にvb.netを使おうと思ってるがどうかね?
そういう高度な要求が来たら
ちゃんとしたシステム作りましょうよと
あとツールで処理速度が変わる訳じゃ無い
大事なのは設計と作り方、そしてマシンのスペックだ
>>656 論外。
高速化したいなら設計レベルで対応したほうが効果が高い。
ツールを選ぶのは、それだけでは補えない場合の話だが、
VB.NETは高速なソフトウェアを作るには向かない言語。
>>655 同意
>>654 「CreateObject InternetExplorer」「document.forms」でググれ
新しいのはみんなそうだけど、誰でも比較的簡単に一定のレベルと品質で
ってー方向で作られてるから特に.netだから早いってもんじゃ無いよ
ツール選択って開発効率をどうこうっていう話だろ
速さで言ったらネイティブが一番早いのが当然なんだから。
.netは実行時はネイティブで動いてるんだってばw
机上の空論言う前に、ベンチマークしろ。
.netが遅いんじゃなくてwinformsが遅いんだよね
何とくらべて早いとか遅いとか、向いてるとか向いてないとか言ってるんだ
比較対象なんて無くても絶対的に遅い物は遅い。
お前は野垂れ死無ければ、裕福だと思うのか?
>>665 比較対象のない絶対的評価で早いも遅いもない。たんに絶対的な評価がそこにあるだけだ
技術論を主観で語られても困る
お前の例だと、野垂れ死にするやつは、野垂れ死にしないやつより裕福じゃない。それが客観的事実
それを本人がどう思うかは主観問題
というか
>>656がどんな事したいのかによるよな
Excelのデータをセルをグリグリ読んで回してるとかだったらDB使えよって話しだし
いやそんな事はとっくにやってて単純にスピード上げたいってんなら.net化も有りだし
バッチ化してデータ整形だけは夜にやっとくとかまあ色々有るじゃん
処理速度上げたい処理とやらを具体的に書いてくれなきゃなんとも言えん
668 :
のぞみ ◆fv9SHj5ibk :2011/11/01(火) 20:31:40.22
ちょっと質問です 最近VB弄り始めてばかりです 前は日本語プラグry
やってたんですけど
まァ本題へ
パスワードをかけて そのパスワードが違ったら違いますという
成功していたら 成功していますという処理にするにはどうすればいいんですか?
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
(Name).Enabled = False
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If TextBox1.Text = "nozomi" Then
MsgBox("認証成功")
(Name).Enabled = True
Else
MsgBox("違います")
End If
End Sub
と打ったんですが
(Name).Enabled = False
~
ってでてくるんですけど 何がおかしいんですか?
頭がおかしい
670 :
のぞみ ◆fv9SHj5ibk :2011/11/01(火) 20:43:30.66
わからないならわからないでいいですよ
【知っているが…】
「 ̄ `ヽ、 ______
L -‐ '´  ̄ `ヽ- 、 〉
/ ヽ\ /
// / / ヽヽ ヽ〈
ヽ、レ! { ム-t ハ li 、 i i }ト、
ハN | lヽ八l ヽjハVヽ、i j/ l !
/ハ. l ヽk== , r= 、ノルl lL」
ヽN、ハ l ┌‐┐ ゙l ノl l
ヽトjヽ、 ヽ_ノ ノ//レ′
r777777777tノ` ー r ´フ/′
j´ニゝ l|ヽ _/`\
〈 ‐ 知ってるが lト、 / 〃ゝ、
〈、ネ.. .lF V=="/ イl.
ト |お前の態度が とニヽ二/ l
ヽ.|l 〈ー- ! `ヽ. l
|l気に入らない lトニ、_ノ ヾ、!
|l__________l| \ ソ
スレのタイトルと1をもう1度よく読みましょう
>>668 VB6なら多少わかるけど
見たことない文法だからVB6以前のものなのかな?
それともVBSとかいうやつなのかな?
674 :
のぞみ ◆fv9SHj5ibk :2011/11/01(火) 21:02:00.63
あァ悪い間違えた
Visual Basic 2010だお
パスワードを入れる前はFrom?の有効はオフでパスワード認証成功したら
Fromの有効をオンにする方法はどうやるのですか?
VB2010ってここのスレが該当なの?
676 :
のぞみ ◆fv9SHj5ibk :2011/11/01(火) 21:18:41.50
677 :
デフォルトの名無しさん:2011/11/01(火) 21:22:16.19
678 :
デフォルトの名無しさん:2011/11/01(火) 21:44:49.22
>>1のテンプレにさ
対象外のVBのバージョンも列挙しようよ
あまりにも.NETのやつら来すぎ
タイトルを読まない人が、ましてテンプレ読むとは思えませんが。
そういうの無駄な努力って言うんだよ。
そもそも、テンプレなんて、言っちゃ何だけど書いてる奴の自己満足。
EULAみたいに読まれなくても書いてあることに法的な意味があるわけじゃないんだから。
テンプレ書いてあるだろで済ませる為のもんだろ
何も書いてなけりゃいちいち説明せにゃならん
済ませるって何を済ませるんだよ。
あんたの気が済むかどうかってこと?
ああそうですかw
VBスレらしい知的な会話だな
>>682 VBは関係ない。VBのせいにするな。
単にお前が馬鹿なだけだ。
VBで電卓作って、動きは完成したんだけど
メニューバーの表示を押したら、ラベルの計算した数式が表示されるようにしたいんだけど
どうしたらいい?
メニューエディタで表示ってやつは作れた
あまり関わりたくない臭いはするが…
表示したい計算式は文字列として存在してるの?
計算結果は自力で計算するの?
ボタンを押して、それぞれのラベルにそれぞれの文字列を代入するだけの話?
>>687 どうもすみません
ボタンを押してラベルに計算結果を表示させてるんですが
例えば1+2=3って押したらラベルには3って表示されてるんだけど
その答えの計算式である1+2=3をメニューバーの表示に表示させたいんです
メニューのcaptionのの値を変更とかそんな話題なの?
>>688 Label1.Caption = 表示したい計算式
VB6なのですが。
csv読み込み→リッチテキストボックスに表示→
必要な情報を検索(find)→テキストボックスに表示
というものを作りました。
csvの内容は品番、ロット、その他情報が1行ずつ入力されています。
リッチテキストボックス+findを使ったやり方で以下の問題にぶつかっています。
・リッチテキストボックスに情報を全て読み込ませないと検索できない(情報が多い)
・リッチテキストボックスが狭くて、行が折れていると複数行としてカウントされる。
・列毎に検索対象を絞れない(その他情報に品番が書かれていると対象になる)
初めて作ったプログラムなので根本的な所から間違っている気がするのですが
こういった情報を検索する場合、どういった方法が良いのでしょうか?
一から作り直す覚悟はあるのですが、必要なキーワードが思いつかず
MSDNやgoogleでの検索にも行き詰っています。
どうかお助けを。
リッチテキストを使わなければ解決するよね?
>>693 すみません、openで開いたファイルというのは
リッチテキスト等で表示させなくても
読み込んだデータを検索したりすることが出来るということでしょうか?
csvの内容を読み込んでその読み込んだデータをそのままテキストとしてユーザに見せる必要はあるの?
全てのデータを見せる必要がないなら、csvを変数に読ませておいてその変数の中を検索したら?
findっていうのが俺は使ったことないからどんなのか分からないけど・・・
で、変数の中を検索して見つけたところを別の変数に部分的に書き出すなり何なりして
表示用のテキストボックスでも用意してそこに表示するとか
>>690 それだったらラベルに計算式が表示されませんか?
ラベルには答えを表示したままで、表示エディタにその答えの計算式を表示させたいのです
計算式というのは電卓なので動的で、必ず決まった計算式というわけではありません
繰り返しになりますが、
>>686のような計算式を表示エディタに表示したいです
すみませんが、よろしくお願いいたします
>>695 >csvの内容を読み込んでその読み込んだデータをそのままテキストとしてユーザに見せる必要はあるの?
ないです。Findで検索するために表示してます。
>変数の中を検索して見つけたところを別の変数に部分的に書き出すなり何なりして
変数の中を検索するとは、Instrを使用するということでしょうか?
>>697 そんなレベルの人がそんなもの今更VB6などでやる必要あるの?
他の言語やソフトを覚えた方がいいよ、会社でVB6しか使ってはダメでもないかぎり
>会社でVB6しか使ってはダメでもないかぎり
まさにそのとおりの状況です。
じゃあ仕方がないな
会社にVB6の入門書やVB6が使える人がいるだろう、じっくり勉強してください
>>696 表示エディタ.Caption = 表示エディタ.Caption & 押したキー.Caption
>>702 どうもわざわざありがとうございます
動きはこういうことですね
ソースは
>>701のような感じなんでしょうか?
>>701もありがとうございます
>>699 今すぐ離職を考えたほうが良い。
技術者として使い物にならなくされる前に。
>>703 入力はただのテキストボックス
メニューを押すとテキストボックスの式を計算して
その結果をラベルに代入しているだけ
>>705 なるほど
どうもありがとうございました!
ちょっとやってみます
707 :
デフォルトの名無しさん:2011/11/07(月) 12:04:47.18
実行って、ビルドしてからしかできませんか?
>>699 リッチテキストでのプログラムが出来たなら
type,get辺りでググれば出来ると思うよ。
>>708 ありがとうございました。
簡易的なものは組めましたので
何とかなりそうです。
でも今からVB6てのはお勧めしないよいや割と本当に
現状でも保障なんて無いしな。
Officeなら2010でもまだVBA生き残ってるから大丈夫だろうけど
>>708 どうにか作ることが出来ました。
本当にありがとうございました。
712 :
デフォルトの名無しさん:2011/11/09(水) 16:48:23.22
710はキモい文章をお書きになりますね
仕事で困ってる人間へのアドバイスが
"お勧めしない"ってのは無理な話だよな。
UNICODEがまともに使えないって時点で終わってるし
仕事でプログラムやってるならVB6だけで食えるという人なんてもういないだろうからどうでもいい話だわな
今の時期に入門としてVB6を指定したのなら鬼畜かそいつを辞めさせたいかどちらかだろう
FA制御系だとVB6の方が都合良かったりする。
FA制御って何でやるの?
>>716 IOやGPIBボードで。こういうことを聞いてる?
ttp://www.interface.co.jp/io/index.asp メカ自体はPLC(シーケンサー)での制御だけど大量のデータ演算なんかはPCを使う。
最新環境はマイクロソフトやプログラマーの都合だけであって、エンドユーザーからすれば
新規装置でも過去装置との互換を保つ方が何かと都合がいい。
>>699はそういう環境なんじゃないかと思う。
俺なんかもWin95〜XPまではVB6も使ってるけどね。需要は多いよ。
719 :
デフォルトの名無しさん:2011/11/21(月) 02:40:22.80
>>714 VBでUNICODEがまともに扱えないとは
例えばどんな状況でしょう?
VBはUNICODEが基本でしゅが
VB6のコントロールでUNICODEにまともに対応しているやつってあるのかな
UIが対応してないんだよね
古いソフトをVB6で更新する仕事を受けたんだが、
テキストファイルをバイトサイズで分割して〜
というような仕組みだったので
UNICODEにしてしまうVB6ではちょっとめんどくさい事になった。
そういう仕事を請け負う会社が無くならない限り
VB6は不滅です
byte区切りならテキスト形式で開かなければいいし
改行で分割するならバイナリで開けばいいし
2バイト文字区切りならバイナリで区切って文字コードで判断すればいいし
VB6のせいなのかねぇ
2バイト文字の途中で区切ってもいいのか?
だとすると、もはやテキストではないので
バイナリファイルとして考えれ
単に、固定長テキスト形式ってヤツだと思うが・・
それが単に固定長でもないのよ。
AパートとBパートがあるとして、
確かにAパートもBパートも固定長だが、Bパートは1〜複数存在する。
改行は無い。
AパートもBパートもそれぞれさらに細かく分割される。
バイナリで読む方法はもちろん試したが、文字化けが生じてしまった。
最終的には、ADODB.streamの文字コード変換を使って解決した。
728 :
デフォルトの名無しさん:2011/12/07(水) 12:55:30.21
Ethernet-シリアルコンバーターを接続した装置への通信プログラムを作成しようとしています。
シリアル通信プログラムは
ttp://www.picfun.com/serial00.html 等のサイトで基本的なコードは書けたのですが、Ethernetを経ているのでどのように装置にアクセスしたら良いのかわかりません。
ルータ(192.168.1.1)
┣制御PC((192.168.1.2)
┗Ethernet-シリアルコンバンーター((192.168.1.3)━(RS-232C)装置
環境:Visual Basic 2008 Express Edition
よろしくお願いします。
Visual Basic 2008 ってありなのか?このスレ。
無しですよ?
Ethernet-シリアルコンバンーターというのが
どこのメーカーのなんと言う製品なのかによるな
VB6のIDEでタブを入力するとスペースに変換されてしまうんだけど
これはどこで設定したら良い?
735 :
デフォルトの名無しさん:2011/12/07(水) 23:27:05.55
じゃあ解決だね
>>735 マニュアルとドライバぐらいダウンロードしないよ。
制御PCに仮想COMドライバをインストールすればよい。
後は普通のCOMポートと同じように使用できる。
もしくは、もう一台シリアルコンバーターを買ってきて、
制御PCのCOMポートに接続してあげればよい。
もし制御PCからUDPを使って装置を制御する事を期待しているなら、
装置のファームウェアを変更して、RP-COM(FIT)H-AFの専用コマンドに
対応するように作りかえる必要がある。
ただし、この手のハードウェアは制御線の動作に癖があるので、
CS/RSやCTS/RTSを変わった使い方してるとまともに動かない事もある。
739 :
デフォルトの名無しさん:2011/12/08(木) 01:36:46.69
728です。
大変参考になりました。
ありがとうございました。
その程度の内容ならVBじゃなくてもベクターなどから適当なBasicなり他の言語でもひろって作ればええやん
>>727 >文字化けが生じてしまった
あたりまえだ。
固定バイトで区切るんだから、2バイト文字の間で区切ったら
文字と対応しないバイト列になるんだから
表示できない。
文字コード変換してとか解決したように見えただけだろ。
もし表示できてるなら、指定バイトで区切られてないはず。
表示したものをもう一度書き出すプログラムなんて世に送り出さないでくれ。
>最終的には、ADODB.streamの文字コード変換を使って解決した。
2バイト文字を切ったとかじゃなくて、そもそも違う文字コードのを
データを表示しようとして化けただけじゃないか
シフトJIS固定長で文字が境界またぐなら、格納時に考慮しとくべき問題だが
>>741 すみません、スマホしかないもので。
ダメもとで、とりあえずあちこち見ながら書いてはみたものの。
でもそれ程基礎的な物ならスマホ上でも動くアプリあるかもしれないですね。
もう少し勉強し直してみます、ありがとうございました。
スマホで動くものをVBで作れと?
Androidのアプリなら作れるけど
VB6でやろうとするのはどんな苦行だろう
Windows Mobileと呼ばれる前のPocket PC 2003で動くeVB3用アプリなら作れるけど
俺はeVC3なら作れる
いわゆる趣味でプログラミングとかしてんだけど
ちょっとした作業ツールとか作るの慣れたVB6が楽すぎて未だにVB6から離れられない
すごく初歩的な質問なんだけど、インスタンスの生成方法がさっぱり分からんorz
Dim btn As CommandButton ' コンパイル通るし、実行してもエラー起きない
Dim btnA As New CommandButton ' New キーワードの使い方がだめ とエラーが出る
Set btn = New CommandButton ' 同上
Dim a As New Class1 'Class1は何も書いてない適当なクラスモジュール。 問題ない。
おそらく、CommandButtonは抽象クラスだから生成出来ないのかな?と考えてはいるんですが
エラーメッセージが変だし、Class1でコンストラクタなど定義してないにもかかわらず、生成出来る不思議。
そして、ネット上で探してもノイズ(VB.NET)が多すぎてよく分からんorz
あと、変数の宣言を強制する方法は分かったけど、
(デフォルトで入れておけよ…デフォルトで入ってないから未定義の変数を読み出す様なひどいソースを引き継ぐことになったorz)
型変換、キャストも強制するオプションはどうすれば?
あと、誰かLongのリテラルの書き方教えてくれ、
Dim j As Long
j = &HFFFF
MsgBox(j) ' -1 !?
MsgBox(&H10000 - 1) ' 65535
とりあえず
Const H0xFFFF = &H1FFFF - &H10000
Const H0x8000 = &H18000 - &H10000
というようなのを定義してごまかしてるけど。
とりあえず、この入門書(笑)は風呂の焚き物にしかならんな…
私こと初心者が適当な風に回答します
>>751 CommandButtonなどのコントロールは、たしかNewでインスタンスは生成できないとか
「VB6 動的 コントロール」でググるとコントロールの動的追加について記載サイト出てくるかも
>>752 こゆこと?
Dim a As Long, b As Integer, c As Single, d As Double
↓
Dim a&, b%, c!, d#
a = 100& (Long型)
b = 100% (Integer型)
c = 100! (Single型)
d = 100# (Double型)
オプションは分からないけどキャストは
CInt() CLng() CSng() CDbl() とかそういう関数あるよ
754 :
753:2011/12/09(金) 05:10:49.37
勘違いしてたり間違ってたりしてたらごめんなさいね
>>751 UI部品のインスタンスを動的に作成する場合にはいくつか制限がある。
フォーム上にボタンを張り付けて、Indexに0と指定しておく。
でもってコントロール配列に対して「Load Button1(1)」とすれば、
インスタンスを生成できる。
>>742 答えは
>>743。VB6が勝手にUNICODEにしてしまうところでそうなった。
境界またぎはさせてないよ。
配列でロードする方法ならIndex 0のプロパティがほとんどコピーされるから
実行時に型を変える(TextBoxに入力したコントロール名のを作成)とかで
ない限り、配列ロードでいいんじゃないの。
えー
ださいよー
New使ってるからLoadでのコピーは用途違うんじゃねの?知らんけど
>>753 ああ、なるほど、ケツにつけるから併用出来るのか
MsgBox(&HFFFF&)ででけた
自動でキャストされることになれてないから、キャストを明示的に指定しなきゃいけない様に設定できたら
VB初心者のおいらでも安心してくめるかなと。そうした方が後継者もあんまり混乱しなくてすむし。
>>755-760 thx。要素数に応じて、コントロールを並べることを考えてたからコントロール配列で良さそうだわ。
コントロール配列使えばたぶん必要ないことだと思うけど、
VB6にはまだ匿名関数でクロージャをやったりとか出来ないよね?(確認)
コールバックとか難しそうだな…AddressOfで取得したのを直接実行できないのかよ。
AddressOfは外部APIに渡すときしか使えなかったような
何言ってるのかさっぱりわからん
>>763 いやさ、おまえらみたいになれてる奴には気にならんかもしれんけど
http://d.hatena.ne.jp/snaka72/20100126/1264514893 ここに書いてあるようにCallByNameっていうevalっぽいものじゃなくて
Sub hoge(callback as Method)
callback()
End Sub
hoge(AddressOf(foonction))
みたいに出来るもんだと思っててさ。まあ、セキュリティ的に直接関数ポインタを実行出来ない方が正しいと思うけど。
しかし、このIDE使いにくいな… &HFFFF& <-コレはいい、 &HFFFFF& <-勝手に&外される &H0FFFF <-勝手に0を消される
勝手に&が消されるのは指定しなくてもLong型で認識されるからじゃねの
CallByNameで諦メロン
(インスタンスとか意識して作ったことないから俺には話の内容が高度すぎて)何言ってるかさっぱりわからん
ちげーよw
VBはじめたいのですがもうVB6.0は手に入らないのでしょうか?
VB6用の本を買ったのですがVB2010というのでもいけますかね?
VB6とVB2010では全然違うから
VB6のやり方ではVB2010では何もできない
VB2010のやり方ではVB6では何もできない
>>769 6.0と2010は全く違うものです
それに6.0は今から覚えるには古すぎるのでお勧めしない
数年前はMSDNのイロイロ入りの奴で手に入れるのが通説だったんだが
今はどうなのかねえ。
>>769 VB2010はVB6とは全く別物。.netベースになってる。 VC++2010みたいにWin32も開発できるなんてことは”ない”。完全に.net専用。
つか、新しく始めるならなぜにVB6とか苦行するしw
.netでもかまわないならC#とかおすすめよ。C#の方が新機能とかの追加が早いし。
研究とかで.netが使えないなら、C/C++あたりが無難。誰でも使えるしな。
RADツールがほしいならDelphi3〜7という手も悪くない。マイナーだが、プログラム経験があれば1週間もあれば誰でもかけるようになるだろう。
過去の遺産の引き継ぎとか、明確にVB6でなければならない限り、VB6を使う理由もないし、使うべきじゃない。
入手先の前にまず再考を。 別にその本をどぶに捨てたところで全然惜しくないしな。
>>774 Cはある程度できるんでC++にしようかなと思います。
ただ簡単なソフトを作ったりするのにはVBが一番簡単かな?と思ったんです
ディスコンになって10年経過してる商品について
>>769はさすがにネタ投入(ただし全然面白くないが)
としか思えんけど。
逆にネタじゃないなら相当頭がどうかしてる。
こんなところに書き込んでるわけだから、最低限webにアクセスできる環境にはあるんじゃないの?
たとえそうだとしてもそのレスをする必要はないような
いつもイライラしてるIT土方が来たようだな^^
いつまでもVB6なんて使ってる化石をからかっただけですけどね
やべえ、真性のアスペかよこいつw
どこに「いつまでもVB6なんて使ってる」なんて書いてあるんだw
おい、つまらんレスはするなバカども
>>781 じゃああなたが面白いレスの手本見せて下さいよ〜
簡単なもの作るだけならExcelでも使っとけ
つかVBマクロて人気なんだな
OpenOfficeに最も望まれてる追加機能がVBA対応とか
これじゃVB無くならんわ
>>783 Excelっていう土台と、初心者と本格的プログラミングの中間にある
開発環境が他にないからね。
Accessまでいっちゃうと、本格的プログラミング寄りで、何より、データベース
って土台は初心者にキツイ。
ということなのだろう。
ただ、そろそろVBAは、言語体系を.NETに近づけたほうがいいとは思う。
Excelとかのマクロ言語はVBAやめてJavascript系にしちゃえばいいのに
786 :
デフォルトの名無しさん:2011/12/11(日) 16:34:15.51
学校のVisual Basic 6.0で線形探索とファイル処理を使ったプログラムを作る課題がでました。
Excelでデータを作って対応させるのように指示を受けました。
私は商品名を入力し、実行するとその商品の画像を表示するようにしたいのですが、
この場合、Excelのデータ作成はどのように行えばいいですか?
商品名と画像ファイル名だけじゃないの?
学校ってまだVB6使ってるの?
>>784 近づけるというか、いっそうVBAとCOMを取り除いて、.netベースにしてしまって
VBAの代わりにVB.NET(移植向け)、C#(新参/初心者向け)を使えるようにすればいいんじゃね?
ExcelやAccessでlinqが使えれば、業務系の人にもうけが良いだろうし。(むしろにて異なるものでキモがられるかね?)
>>785 .netって基盤を作ってきたMSだから、今更Javascriptはないと思う。
OOoはVBAとか誰得なものをつけるより、Javascriptでマクロを組めた方が遙かに現実敵だとは思うが。
Google Docsの方はJavascriptだけども、サーバサイドで動くので使いにくいね。
>>786 研究室の過去のプログラムの更新にやむなくってのは分かるが
学校で今更VB6を教えてるって、その学校かなりヤバくね?
中学校の部活か何かでVBAでプログラミング体験とかなら分からんでもないが。課題もそのレベルだし。
情報系じゃないが、若いセンセが嘆いてた
教える老人のノート、数十年前のものいまだに使ってるって
ワイは日本人やが聞いた情報によると、もうじき中国はバブルがはじけて昔の貧乏な元の中国に戻るらしいで
みんなも知っての通りもう経済は破綻してて、取り戻すのは無理なんだそうや
その世界ではごっつい有名な政府関係者筋から聞いた確かな情報やで
まあお前らほどの頭の良い連中には、今さらなくらいのネタやな、失礼なくらいかもしれん
お前らからすればもう常識的なくらいの知識やろ?
Windows7で「Microsoft Shell Controls And Automation」を参照設定してexeファイルを作り、XPのパソコンで実行すると、
実行時エラー430(クラスはオートメーションまたは予測したインターフェースをサポートしていません。)が発生しました。
shell32.dllのバージョンが原因なのでしょうか?
Dim oShell As New Shell
Dim oFolder As Folder2
Set oFolder = oShell.BrowseForFolder(0, "選択してください。", 1)
If oFolder Is Nothing Then
Exit Sub
ElseIf oFolder.Title = "デスクトップ" Then
MsgBox "デスクトップは選択できません。", vbOKOnly + vbCritical
Set oFolder = Nothing
End If
If Not (oFolder Is Nothing) Then
txtFolder.Text = oFolder.Items.Item.path
pFileDir(lstFile.ListIndex + 1) = txtFolder.Text
End If
Set oFolder = Nothing
794 :
デフォルトの名無しさん:2011/12/12(月) 15:51:10.15
VB初心者なのですが、
xlsmファイルって読み取ることができますか?
読み取れるようであれば例文教えていただけると
ありがたいですm(_ _)m
Excelが入ってれば読めるよ
796 :
デフォルトの名無しさん:2011/12/12(月) 15:58:29.53
>>795 Excelも入れていて読み込めるはずなのですが
xlsmfile = New FileIO.TextFieldParser("ファイル名.xlsm",
System.Text.Encoding.GetEncoding("Shift_JIS"))
xlsmfile.TextFieldType = FileIO.FieldType.Delimited
xlsmfile.SetDelimiters(",")
この文では読みこめないのでしょうか?
>>796 createobjectして読み込むんだよ
>>796 ひょっとして.net+VSTO?VSTOは実は単なるCOMラッパーだったりするから微妙だけど。
そもそも、Microsoft.VisualBasic.FileIO.TextFieldParserって、zipしてある奴も読めるのか?
MSDNをさっと目を通すと、CSV/TSVとかのテキストファイル前提っぽいが。
>.GetEncoding("Shift_JIS"))
あれ?普通、xlsx/xlsmの中身のエンコードってUTF-8とかUnicode系じゃねーの?
あと念のために聞くけど、PC初心者?まるで分かってないオーラが漂いまくってるけど。
ついでに、VSTOはそんな便利じゃないよ。イテレートもろくに使えないし。
799 :
デフォルトの名無しさん:2011/12/12(月) 16:27:08.33
>>797 試してみたんですができませんでした。
createobject の使い方教えてくれませんか?
そういえばExcel2007以降とか見たこと無かった。
801 :
デフォルトの名無しさん:2011/12/12(月) 17:01:08.62
>>798 テキストファイルを読むことを前提にしているので大丈夫です。
>あれ?普通、xlsx/xlsmの中身のエンコードってUTF-8とか
Unicode系じゃねーの?
調べてみます。
PC初心者です。
これから勉強していきたいのでよろしくお願いします。
>>794 読めます。
中身はZIP形式で圧縮されたテキストファイルです。
試しに拡張子をzipに変更した後、開いて、中のファイルをメモ帳ででも開けばよい。
>>799 ググった? あと、ここはVB6スレなんだが間違いはないか?
>>796のコードはVB6のコードには見えないな。文法が違う
細かいこと気にスンナよ
>>801 ここID出ないから、名前欄に1個前のレス番を毎回入れるか
最初にレスしたレス番を入れるとかしてくれないと誰か分かりづらい。
絞り込みして見る事もできね。
Googleで VB6 XML 読み込み をキーワードに検索して結果の1件目。
t-yoshi-tomi.at.webry.info/200905/article_2.html
>Dim XmlDoc As DOMDocument 'xmlデータ用変数
>Set XmlDoc = CreateObject("Microsoft.XMLDom")
>>806 言語が全く違うんだから気にスンナレベルじゃねーだろw
>>807 VB6ならExcel COMから読み出せば良いんじゃね?
VB.NETなら、どこかのZIPライブラリ使って中のxmlをlinqで列挙するのがお手軽かと思うけど
すげー初歩的、ランゲージリファレンス嫁ってレベルだと思うんだが
イベントについてさっぱりなので教えてくれ。
eventキーワードでのイベントの定義については分かった
RaiseEventでのイベントの発生も分かる
だけど、実際にメソッドを結びつける方法が分からん まるでわかめ。
http://privatepaste.com/3e1d507e11
イヴェントの使い方
'Class1.cls
Public Event EventDaYo()
Public Sub Hoge()
RaiseEvent EventDaYo
End Sub
'Form1.frm
Private WithEvents c1 As Class1
Private Sub Form_Load()
Set c1 = New Class1
End Sub
Private Sub Command1_Click()
Call c1.Hoge
End Sub
Private Sub c1_EventDaYo()
MsgBox "EventDaYo"
End Sub
>>810 キモの部分は
Private WithEvents c1 As Class1
Private Sub c1_EventDaYo()
これ?
でもコレって、ClassAの中にあるCoClassBのイベントにはどう対処するんだ?
ClassA:
Public Property Get CoClassB(index as integer) as CoClassB
CoClassB:
Public Event CoClassScream()
ってあった場合…
ClassAが内包しているクラスのイベントをリレーしないとだめ?
というか単純に配列の中にオブジェクト入れてた場合はどうなるの?
WithEvents 発生したイベントをキャッチするための入れ子を宣言する
(配列にできない、Newで宣言できない、Moduleでは宣言できない)
WithEventsを宣言したForm(またはClass)内でしかそのイベントをキャッチできない
>>810 Class1で宣言したイヴェントはClass1内からのみ発生させられる
Class1のインスタンスから発生したイヴェントをキャッチするには
WithEventsでClass1のイヴェントをキャッチする入れ子を宣言し
それにあらかじめインスタンスをつっこめばそのインスタンスから発生したイヴェントをキャッチできるようになる
が入れ子に設定されたインスタンスからのイヴェントしかキャッチできない
>>812 (配列にできない、Newで宣言できない、Moduleでは宣言できない)
↓訂正
(配列にできない、Newで宣言できない、標準Moduleでは宣言できない)
内包リレーってこんな感じか?
'Class1.cls
Public Event EventDaYo()
Private WithEvents c2 As Class2
Public Sub c2_EventKaYo()
RaiseEvent EventDaYo
End Sub
Private Sub SetC2(c As Class2)
Set c2 = c
End Sub
'Class2.cls
Public Event EventKaYo()
Public Sub HogeHoge()
RaiseEvent EventKaYo
End Sub
'Form1.frm
Private WithEvents c1 As Class1
Dim c2 As Class2
Private Sub Form_Load()
Set c1 = New Class1
Set c2 = New Class2
c1.SetC2 c2
End Sub
Private Sub Command1_Click()
Call c2.HogeHoge
End Sub
Private Sub c1_EventDaYo()
MsgBox "EventDaYo"
End Sub
816 :
デフォルトの名無しさん:2011/12/14(水) 05:09:59.08
817 :
デフォルトの名無しさん:2011/12/14(水) 05:20:06.22
質問者は質問をわかりやすく明確に
回答者は回答をわかりやすく明確に
カオスな流れになってるぞ
イヴェントをキャッチしたいForm(またはClass)内でWithEvents入れ子を作れ
Class1内のClass2インスタンスのイヴェントを
そのClass1のインスタンス内でキャッチしたけりゃClass1内にWithEventsを書いてそのClass2のインスタンスへの参照入れろ
Class1以外、たとえばForm1でClass1内のClass2のイヴェントをキャッチしたけりゃ
Form1内にClass2のWithEvents書いてClass1内のClass2のインスタンスの参照を渡すか
Class1内でClass2のイヴェントをキャッチしてClass1でイヴェントをキャッチしたってイヴェント発生させろ
質問者と回答者の会話が噛み合ってないな
イベントは別のクラスに書くんだよ
ヴェとか書くからなんかごちゃごちゃした文章に見える
823 :
デフォルトの名無しさん:2011/12/14(水) 16:28:56.24
VBのアプリで、USBメモリにテキストファイルを書きだした後
タスクバーから取り出しを実行すると定番の
「デバイス'汎用ボリューム'を今停止できません。」
の表記が出て、アプリを終了するまで停止できません。
一応調べましてFileSystemObjectを使い、ファイル保存の際に使用していた
dirからFolderExistsに変更ましたが、"アプリ起動後"にUSBメモリを挿すと
想定通りUSBメモリの取り外しが行えるものの"アプリ起動前"から
USBメモリが刺さっていると上記のエラーが出て取り出しができないのです。
更に調べて、上記に加えて最後にchdir("C)でローカルドライブに変更してやると
アプリ起動前にUSBメモリを挿していても、問題なく取り外しが行えるように
なったもののどうもしっくりきません。
どなたかこの状況から原因をエスパーできる方はおりませんか?
ローカルに書き出してからUSBにコピーするのがいいよ
□投稿者/ サテア 一般人(1回)-(2011/12/15(Thu) 10:25:45)
環境/言語:[windows7/visual basic6.0/?]
分類:[VB6以前]
4つのテキストボックスに入力した数字をソートしてラベルに小さい順に表示するプログラムを作成するノルマを与えられています。
しかしvisual basic6.0だとあまりい良い文献がなく、ほとんど参考になりません。
ちなみに自分はオブジェクトを配置するくらいの技能までは持っています。そこから先がすすめません。
何だよそのノルマと技能はwww
リストボックスに入れてソートさせるのがVBっぽい
827 :
デフォルトの名無しさん:2011/12/18(日) 12:22:19.04
>>823 大きな問題として
Dir関数って、フォルダを参照した後で内部的に終了処理がなされてないよね
Loopでファイルの列挙ができるようになってる都合上、参照し続けてしまう
前の方のレスにも書いたけど
Dir ""とすれば開放できるとするサイトがあるけど、それでもカレントフォルダを参照してしまう
で、話は戻るけど
やっぱりDir関数を修正した以外の場所で使ってるんじゃないの?
またはchdirかも知れないけど、
最後にchdirでUSBメモリ以外を参照すれば抜けるっていうのは、その証拠でしょ
>>825 初心者に対する非常に良い問題なのだが、VB6っていう環境が
初心者の学習に向いてない。
投稿者は明らかに初心者なのだが、こういう掲示板で
どういう言葉遣いで質問するかわからないから変な用語使うハメに。
単純にソートアルゴリズムの勉強させられてんじゃないの
自分も新人の時に最初の課題として出されたよ
実際自前でソートする事なんかほぼ無いが
あの時色々と調べて得た知識は今も生きている
そっとしといてやれよ
実はわざわざVB6でやらせて苦行を強いる上司のパワハラ
>>827-832 ここはVB6のスレなんだ。
VB6は古いとか.NETやれとか言ってるやつはスレち。
答える気がないなら来るな。
って書こうと思ったら、ここへの質問じゃないのか。
まあいいや。
VB6のスレなんだからVB6かわいがってやってくれ。
VBでメモ帳を作成しろと言われた
誰かサンプルソースZIPでくれエロい人
>>832 >>825はな…どっかの掲示板の転載やで…
答えは求めてないだろ。
(かといってヲチする板でもないがな)
VB6でやれって言われたのか?
>>838 ここはVB6.0のスレ。
VB2010はゴミ箱に捨てて、VB6.0で開発したほうが良い。
それが出来ないなら余所のスレに行け。
うぜえなこいつ
>>839 スレ違だボケって意見には賛成できるけど
>VB2010はゴミ箱に捨てて、VB6.0で開発したほうが良い。
コレは同意できないw
842 :
デフォルトの名無しさん:2011/12/21(水) 05:57:54.47
じゃ、VB6で
Shell "notepad", VbNormal
よくサブルーチン(戻り値のないメソッド)をCallで呼び出しているけど
アレは直接呼び出すのと違うの?メリットって何?
>>844 VB6のリファレンスってまだ残ってたのか! と思ったらコレVB.netのじゃん…
>プロシージャを呼び出すときに Call ステートメントを使用する必要はありません。ただし、そうするとコードの読みやすさが向上します。
>argumentList を指定する場合は、かっこで囲む必要があります。
つまり、引数を括弧で囲めるようになるのか…確かにこれは有用だな。
むしろ、括弧を省略しなければいけない仕様の方をdo…おやこんな時間に誰だろう?
俺はずっと以前からCall使ってる。
理由は、コードが見やすくなるからだ。
>>846 まぁ、本当はCall命令はFunctionステートメントやSubステートメントが
無かったころの残骸なんだけどな。
VB1.0の頃には、見た目以外にはほとんど意味の無い命令になった。
だいたい、VBってタイピング量にかけては最悪だろ。
If で開始して、End If で終わる。
Do while〜 Loop で終わる。
CとかJavaとかC#は if で開始して } で終わる。
コードの見やすさからすれば断然C#。
VB6やっててよかったと思う事は、俺にはただ一つ。
VB6 で作ったクラスとかをほぼそのままVBAにも適用して動作可能にできる点だ。
(DB関係はそれでExcelにも使えてる)
タイプ量=みやすさ とでも思ってるのか
ほんとに綺麗なソースもホントにひどいソースもみたことないんだな、きっと
見やすい見にくいとかどうでもいいよ。動けば
>>847 BASICの頃のはラベルへGOTOとかGOSUBじゃなかったっけ?
CALLとか使った覚えなさす。 もっともあの頃のBASICはテキストデータを格納して
マシン語を走らせるためのブートローダー的なものだが。
>>850 お願いだからいろんなモジュールのグローバル変数をごっちゃにして
未定義でなおかつ代入してない変数を読み出して、たまたまうまく動いているプログラムを量産しないでください。
イコールの位置とかそろえなくて良いけど、インデントくらいはまともにやってください。
If a = 0 Then ' インデントレベル 0
If b = 0 Then c = 0 ' レベル 0
d = 0 ' レベル1
End If ' レベル0
…これ難読化ツールでも使ったんですか?…
絶対自分しか見ないってんなら良いけど
他人が見るの前提ならCallは付いてた方が良いよな
つか付けてくれ
あと.Textとか.Valueとかも付けといてくれ
Option Explicitも忘れないでー
変数なんだかオブジェクトなんだかSubなんだかFunctionなんだか
そもそも作った人がtypoミスしたまま気が付いてないとか
解らないから!解らないから!
>>851 インデントもロクにしないっていうのは
単に初心者かCOBOL文化の名残り?
>>853 おそらく仕事/上司が気に入らない事への腹いせでやって、逃げていったんだと思う。
一般的に禁忌と言われてることを一通りやってるし、ドキュメントも残ってないし。
ちなみに禁忌って言ってるのはだいたいこのこと。
・インデントをろくにつけない。つけないと言うより、したりしなかったり。全くしないよりたちが悪い。
・リテラル値を多用してハードコーディング
・もちろんファイルハンドル#1なども、一時的、永続的含めて直接指定
・他のモジュールで宣言してあるグローバル変数の多用
・変数の宣言をしてないことは日常
・文字列を数値化したり、文字列化したりしながら使用
・↑と併用して、状態として保持しておくべき値をコントロール(主にラベルなど)のキャプションで保持
・他のモジュールへコントロールを渡してそこでUIを操作
・ロジックとUIの分離? いえいえ当然、積極的に混合してます^q^
・バージョン管理? キチンとしてるよ! ほらここから数行下までのコメン(ry
・適切なコード内ドキュメント
'ファイルをクローズ
Close #1
少なくても初心者なら、ここまでひどい事するか? これは分かってる奴が意図的にやってるようにしか見えないぞ。
>>854 そのぐらいなら、まだ許せるんじゃね?
・2000行を超える超巨大関数。もちろんバグつき。
・無駄にテクニカル。
CallByName、AddressOf、VarPtr、ActiveX、etc...
・何処でもやたらとDoEvents。
DoEventsが無いと長時間応答なし、でもあると落ちるみたいなバグつき。
・何処でもやたらと状態遷移で管理。でも状態遷移図はコーダの頭の中だけ。
>>854 どっからどうみても俺が今やってるプロジェクトのソースだが
今VB6でやってるのかよw
どんな会社だよ。
ついでにそんな会社にいるあんたのレベルも知れてるな
新規はさすがにないだろうが、既存システムの修正はまだあるだろ
VB6で新規もありうるんじゃね
今もVB6のソフト使ってるなら
そのパソコン(?)で新たに何かしようとその会社が考えてたら
そのパソコンで稼動するソフト制作を要求するんじゃねの
VB6はMSのサポートが終わってるという建前で小さい新規の開発はお断りしています
リプレースがあってもVB6の糞コードを
アップグレードウィザードで.netに引き継いでやってたりするから怖い
なんだかんだVB6ってよく出来てたと思うんだよなー。
.NETはC#だけにしてVBはVB6の延長で進化すればよかったのに。
微妙にC#に出来てVB.NETに出来ないことがあって面倒だ。
どんな言語でも最初は簡単でも後から難しくなるもんだw
865 :
デフォルトの名無しさん:2011/12/26(月) 00:49:07.79
汎用に使えるプロシージャだと、先頭に機能だけ一言書いて
わざとインデントなくしてコメントも削除して納品することがある
流用されないようにというケチな気持ち
ねえよカス
そもそもソース提供してる段階で流用を認めないとかあり得ないと思うが
ちょこっとしたソフトでも、開発に2人月かけたとして
納めた会社が大量にコピーして使ったりしてるのを見ると
どうかと思う。もっと金とるかライセンス契約にするか。
ま、そういう会社はOFFICE製品とかも海賊版使いまくってたり
するんだけど。
もしドラブラよろかよ
もしドラえもんにあったら その時は ブラジャーによろしく
今なら「もしドラブラよろ」でググれば出てくるな
もしドラゴンクエストでブライがよろいを着たら?
もしもし、ドラ焼き100人前ブラックでお願いします よーそろー?
もしドラ×ブラよろかよレベル高ぇーなオイ
875 :
デフォルトの名無しさん:2012/01/02(月) 14:47:56.67
ゴミのような奴しかいないスレになってるな
そんなに謙遜するなよ
877 :
デフォルトの名無しさん:2012/01/06(金) 23:34:52.86
初めて書き込みます。
現在、VB6.0でプログラミング機能付きのRPN電卓を作るという課題に取り組んでいます。
電卓機能についてはある程度できたのですが、プログラミング機能の方が全く分かりません。
どこが分からないかというか・・・どのように動いているのかイマイチ理解できていません。
解説していただけたら助かります。
Scriptlet
879 :
デフォルトの名無しさん:2012/01/07(土) 00:11:57.42
いきなり上げられたexeをクリックする勇気は無いな
学校って進歩とか進化ってしないの?
いつまでVB使うの?
センセイがくたばるまでだよ?
実務ならまだしも、学校とかは別にVBでもいいじゃん
VBだとコーディングスキルはさほど身につかないだろうけど
手軽にプログラムを作る楽しみを実感できる
いきなり敷居の高い高等言語を強制して
何も形にならずに「プログラミングってつまんねー」ってなるよりは
下等でも手軽な言語で簡単なものを色々作り
思い通りのプログラム・アプリケーションを作ることの楽しさをまず知ってもらい
高等言語に移るのは下等な言語に自分で限界を感じるくらいのスキルが身についてからで十分
学校が何の学校かによる。
話の流れからすると、ごく普通の高校レベルを
想定しているようだが、その程度の学校で
プログラミングに何を求めるかだ
某県立工業高校情報コースだった10年ほど前、PC-98のMS-DOSから動かすたーぼしーでCの実習したの思い出した
>>881 実を言うと、参照が無くなったら即座に解放するというガベコレ方式のお陰で、
常時動作させる(例えば自動情報収集系)ようなソフトを手軽に作るには
VB6は便利。
.NETとかJavaで同じような事をしようとすると、気軽にインスタンス生成するのが
難しくなる。考えて作らないと。
あと、VB6で作ったクラスはExcelでも「ほぼ」そのまま使えるという利点がある。
.NET以降は、オブジェクト指向の理解が必要なので、学校ならカリキュラム的に
長くなると思う。
個人的には、初心者にはまずCをやらせたい。学校ならやってるとは思うが。
ここは進化しなくて良いよ。
>>887 ちょっと何言ってるのか(w
それって普通は逆で、循環参照の問題がクリアされてないVB6の方が普通は注意を要する。
ドトネトやジャヴァにはその心配がない。
>>888 循環参照は気をつけてたら良いよ。
簡単にメモリリークで落ちるよね。
その「気をつける」ってのが、そんなに考えなくても可能。
.NETとかJVMは、ある程度溜まってからガベコレするので
ソフトがひどい時は数秒止まるでしょ。
常時自動で情報収集するとか、FA用途とかみたいに
絶対に停止させたくないものだと、数秒止まるとか致命傷になる。
>>889 VB6に固執してる人ってすぐそれだけど、そんな事実はないよ。
N88-BASICの時代じゃあるまいしそんな間抜けなことするわけないでしょw
っていうか、それを言うならシングルスレッドのVB6の方が余程リアルタイム性の
要求される処理に向いてない。
話にならん。もうアホかと。
循環参照って
Dim a New Class1, b New Class1
Set a.value = b
Set b.value = a
みたいな感じのこと?
まあそんな感じだけど。
>>887の彼の発言が奇妙なのは、俺はVBランタイムのメモリ管理に詳しいわけじゃないが、
どのような方法にしろ自動管理である以上断片化は避けられないはずで、
であれば.NETのガベコレの(括弧つきの)「問題」と同じ問題を抱えているはずだと思うけど。
まあガベコレで数秒処理が止まるとか言ってる時点であれだけど
レガシーな人なんだろ
負の遺産だけど
VB6ランタイムのGCは参照カウント方式で、
カウント数が0になったら領域解放。
.NETとかJavaはバーチャルマシンがGCを担当。
マークアンドスイープとかコピーイングの方法の複合に加えて
古い・新しい領域せ世代別にも管理。
ここで、古い領域のGCがFullGCと呼ばれるもので、
>>891の説明している
「数秒止まる」だろうと思う。
ヒープの断片化が問題なわけじゃなくて、ある時一気に
@生存オブジェクトのマーキングAマークなしオブジェクトの除去、
Bヒープの再配置 という流れでGCを行うので、GC自体がかなりの処理
で重たかった。ヒープの再配置を行うので、どうしてもアプリケーションの
停止時間が発生する。昔のJavaのwebアプリだと、数秒どころか数分無応
答という事があった。
http://www.atmarkit.co.jp/fjava/rensai2/webopt06/webopt06.html 企業の基幹システムだと搭載メモリ量も多く、いったんFullGCがはじまると
手が付けられなかった。チューニングで対応したり、夜中に再起動させたり。
俺は.NETには詳しくないんでJavaで解釈するけど、今のJavaはさらに別
のGC方法があって、VMの起動オプションで指定するんだけど、GCの流れ
が@→A→@→Bみたいになる。アプリケーションを停止するのは@だけ
で、AやBの時はアプリケーションと並列処理される。
だから、以前ほど「数秒止まる」というのは体感しにくくなっている。
かといっても、この方法も万全じゃないんで、上の古い方法と組み合わせ
で使う。だから結局、無応答時間を完全に回避できないんだけどね。
.NETも、IDE使ってると時々プチフリみたいな事が起こって、会社の先輩か
らは、これが.NETのGCって説明されたけど、本当かどうかは知らない。
ただ、プチフリ程度でも、問題になる領域のソフトはあると思うけど。
GCについては詳しく知ろうと思ったら余裕で本一冊になる。売ってる。
>>883 VB6ってどちらかと言えば
>敷居の高い高等言語
の方に入らないか?まあ、確かに電電の方とかC言語よりアセンブリの方がより直接的で分かりやすいって人も居たが。
今のC#のすべての機能(linq/ラムダ式、型推論)を使いこなすのは難しいかもしれないけど
VB6でやる程度のことなら、C#/VB.netとかの方が遙かに楽に出来ると思う。
それに、オブジェクト指向の説明だって、継承とかその辺の仕組みとかについての説明は難解かもしれないが
すでにあるクラスやメソッドを使う分にはむしろ楽になるだけだろ。 少なくても、今扱ってる変数・値が数値か文字列かはっきりしない言語よりは分かりやすいかと。
GCの事に関しても、それに気を遣わなければならないレベルの事なら、他の言語を検討しても良いわけだし、明示的にコントロールしても良いわけだし。
そもそも、VB6ってExcelのマクロを組むためだけの言語だろ?教育目的で使うなと思うんだが。
RADツールが使える環境なんて.net系以外でもDelphiとかいろいろあるわけで、わざわざVB6を選択する必要は無いし。
学校側がVB6使いたがるのはVBScriptやExcelのVBAに応用しやすいからという理由からじゃね
>>896 VB6を糞にしてるのはVariant型だよな。
Variantは使わなければいいだけの話じゃないのかな
よくある事だが、VB6で作られたソフトで、標準モジュールもクラスモジュールも無いという事はよくある。
関数への切り出しすらなく、イベントプロシージャに全部長々と書いてあったり。
変数もVariantバリバリ。
初心者がwindowsアプリを作るにはVB6がやさしいのな。
>変数もVariantバリバリ。
おまえコレが言いたかっただけだろ
>>901 CやJavaでwindowsアプリ作るのはしんどいぞ。
まあVBAに転化しやすいてのは小規模アプリとしては大きなアドバンテージ
今後ExcelやAccessが消えるとは思えないしねぇ
>>896 >そもそも、VB6ってExcelのマクロを組むためだけの言語だろ?
VBAの間違いだよな?
とりあえず、Joel on Softwareの「はじめてのBillGレビューのこと」
でも読んでからVariantに呪いでもかけてみるといいよ
動的型付け言語って全部Variantだけどなw
>>905 もちろんVB6系全般だよ。むしろ、それ以外で使い道あるか?
VB6は特にofficeのCOMを操作するために特化した言語・環境だろ。それ以外の用途なら他にいくらでもマシな選択肢はあるし
>>908 COM操作に特化したってのはまあ同意できる面もなくはないが
VB6はべつにofficeに特化してるわけではない
VBAはVBのサブセット的な位置づけで、VBAが実質officeの操作に特化してるというなら
同意できる面もなくはない
とりあえずお前がVBとVBAの区別ができてないのが良くわかった
VB5CCEの話とごっちゃになってそう
912 :
デフォルトの名無しさん:2012/01/09(月) 20:43:37.75
初心者ですが、Visual Basicを始めるにあたって周りに教えてくれる方がいません
簡単な物理計算をして、それを表示できるだけでいいのですがお勧めの指導書などありますか?
答え : いまの時点でVBを0から始める馬鹿はいない
914 :
デフォルトの名無しさん:2012/01/09(月) 21:20:21.49
>>913 すいません、始めなければならないんです
0からでも
>>914 現在入手可能な、お勧めの指導書はありません。
0からオンラインヘルプを頼りに始めるのが良いと思います。
まあ落ち着け
VBとVB.netは別物だぞ
まずこれを理解してないと会話が成り立たない
単純な計算と表示だったら他のBASICの入門サイトなどで代用できるよ
N88互換のBASICも生きてるものがあるだろうし、そっちから攻めるといいんじゃないかな
918 :
デフォルトの名無しさん:2012/01/09(月) 21:29:07.72
>>915 そうなんですか?オンラインヘルプか...
>>916 自分が使っているのはVisual Basic2010express editionなのでVB.netとはちがいますよね?;
せつこ、それどっとねっとや
920 :
デフォルトの名無しさん:2012/01/09(月) 21:35:03.64
>>919 え、そうなんですか?
なんということでしょう...
>>910 VB6とVBAの違いっていっても大してねーじゃん。平等に(ry
僕が言いたいのはVB6自体、COMを扱う、つまり主にofficeを扱うために作られたような言語でしょ?
そりゃ、それ以外の用途にも使えるかもしれないよ?でも向いている訳じゃないだろ。
VB6はVBAと違ってGDIを直接触らなくてもグラフィックを描画出来るかもしれないが、それもおまけみたいなものだし。
>>921 えとさ、COMってOfficeの事じゃないよ
1から勉強しなおしたほうがいいんじゃない?
923 :
デフォルトの名無しさん:2012/01/10(火) 02:48:07.37
一口にVBって言っても色々あるようですね
少し書店などで立ち読みしただけでは初心者には組めそうにないと思ったので...
やはり大学の授業や講座などを受けるべきなんでしょうか
>>922 揚げ足とりすぎ
COMとofficeは表裏一体だろ。もちろんoffice意外に使えないわけじゃないけどさ、使わないだろ?それ以外だとIE周りとか?
COMはofficeとVBのための技術といっても過言じゃないし、VBはCOMを扱うための言語、
ならVBはofficeのための言語って言っても差し支えねーじゃん。VB6、COM、Officeこいつらは三つ子の兄弟だよ。
>>923 何をしたいかによる。大学っていっても情報専門の学科以外での授業なんて、中学生の部活でちょっとやる程度のことしかしないよ。
新しくVB6を始めるのはあり得ないが、VB.netなら特に苦も無く学べるんじゃない?
全く経験が無いならC#の方が取っつきやすいとは思う。どっちもほとんど同じものだからどっち選んでも良いけど。
とりあえずここはVB6スレであってVB.netはスレ違だ
Officeのための言語ならここまで広まらなかっただろうな
>>924 だからさ、Windowsのあらゆる部分にCOMは使われてるの。
マルチメディア関係、サウンド、動画、もほとんど
COMだぞ。
927 :
デフォルトの名無しさん:2012/01/10(火) 03:51:52.39
>>924 なるほど...
聞いた感じかなり難しそうですね
CもVBもあまりかわらないものなんですか?
>>924 揚げ足でも何でもなくて本当にお前の理解不足だから
そのていどの理解力でCOMがどうこう言うのはやめれ
>>926 そうらしいね
レジストリのクラスIDとして登録されてるのがCOM?
DirectXもCOMだよ
COMはwindowsの中核を成す技術仕様だぞえ
officeはそれに準拠してるというだけだよ
それにCOM自体はUNIXなんかにも実装されとる
個人法人問わず自作のCOMコンポーネントが大量に配布されてるじゃん
officeとVBだけってんじゃあ勿体無さすぎだなぁ
>>927 VBでって事はwindowsは確定だとして、簡単な物理計算と表示だけで良いのなら
Excelに関数かマクロ突っ込むだけで事足りるんじゃなかろうか?
コンピュータ動かすんやからCもVBも.NETもJavaも全部ほとんど一緒やろ!
似たようなもんやで〜〜
全部IFとかFORとかそんなんやん!!どや?
Javaにforってあるん?
935 :
デフォルトの名無しさん:2012/01/13(金) 00:34:01.99
すみません、VB上でWin32APIのSleepを使って、現在のスレッドを
1000ms(1秒)一時停止させる処理を入れたいのですが、その際、
下記のようなソースの場合、DoEventsが実行されるタイミングは、
Sleep 1000でスレッドが停止して1秒たち、再度一時停止していた
スレッドが再開した後でしょうか?
それとも、Sleep 1000で1秒間分のスレッド一時停止が開始された
直後にDoEventsが実行されるのでしょうか?
やりたいことは、Sleep 1000でストップしている間に、他のスレッド
で発生してたまったWindowsメッセージを処理させたいと思っています。
---以下ソースの一部---
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Sleep 1000
DoEvents
End Sub
>>935 「それとも」って接続詞の使い方間違ってない?
どっちも同じ意味にしか聞こえんけど....
ああ、
>>935の意味がやっと分かったw
要するに
>>935はスレッドが何か全然分かってないんだね。
コード(当然DoEventsを含む)が実行されるということは、そのスレッドが
制御を持ってる(ブロックされてない)ということ。
〜が実行されるのは眠った後ですか?なんて質問は愚問過ぎ。
実行されない状態を作るのがSleepなんだよw
938 :
935:2012/01/13(金) 01:23:04.80
>>936 わかりにくくてすみません。。
Sleepで一時停止中か、一時停止しスレッドが開始した後か
という意味です。
停止中はどのような命令も実行されないわけですが
940 :
935:2012/01/13(金) 01:25:28.49
>>937 ありがとうございます
やはり、Sleepが実行されて、そのスレッドが止まると、
当然次の処理であるDoEventsも停止中は、実行されない
と言うことですね。
であれば、DoEventsするスレッドを別に立てるしかないという
ことでしょうか?
>>940 いやまず最終的に何がしたいのか書かないと何とも言えんと思うけど....
「(重い)処理」を別スレッドでやるのなら普通はDoEventsなんて必用ないですよ。
DoEventsは、UIスレッドで(ビジーループ的な)重い処理を実行しても
UIが無反応になることを避けたい場合だけに使うんですよ。
942 :
935:2012/01/13(金) 01:50:55.91
>>941 説明不足ですみません。
>>935は一例としてあげたソースになります、実際には、、
UI(Form)に配置したTextBoxに時計表示を出して、それを1秒ごとに更新して
表示させたいのですが、同時に3秒ごとに別の処理の繰り返しをしたいと思っています。
その際、3秒待つのに単純にSleep 3000という行を追加すると、UIの時計更新が止まって
しまうので、3秒待っている間でもForm上の時計表示は動かしたままにしておきたいと
思い質問しました。
ちなみに、UIスレッドとは、Formのソース内に書かれているプロシージャ群の
処理が実行されるスレッドということでしょうか?
x秒ごとに処理したいのにスレッドを止める必要ないでしょ
だいたい処理が瞬間に終わるわけでもあるまいし。
インターバルを設定できるTimerってのがあるんだけど
VB6でマルチスレッドってActiveXを使うやり方?
できた
Private cnt As Integer
Private Sub Form_Load()
cnt = 0
Timer1.Interval = 1000
End Sub
Private Sub Timer1_Timer()
cnt = cnt + 1
Label1.Caption = cnt
If cnt Mod 3 = 0 Then
Shell "notepad" '重い処理
End If
End Sub
VBは1つのスレッドで、DoEventsによって並列処理を
しているように見せているだけ。
Sleepしたらそのスレッドは止まるのだから、VBプログラムの全てが止まる。
DoEventsでそういうことをやっているとデッドロックしやすい。
DoEventsをSwitchToThreadを同じようなものだと思っていると痛い目を見る。
非同期処理したいのであれば、Timerを使うべき。
マルチスレッドがやりたいならvb.netを使ったほうがいいよ
vb6でやるならマルチプロセスでやったほうがいいな
ActiveXExeのスレッドでマルチスレッドをやってみたことはある。
非同期で処理しようと思ったら、結局別スレッドで作成した
FormにTimerをおいて、そこから処理をスタートさせなければならない。
メソッドやプロパティはオブジェクト側のスレッドで同期して実行されるので
別スレッドのオブジェクトを呼び出しまくると、全然並列処理にならないw
>>934 あるよ。
FOR EACH的なものまである。
>>933 制御文レベルだとどれも似たようなもん。
しかし、それをもってほとんど一緒というお前はまだまだ素人。
>>942 Sleep 3000 は、3秒間何も出来ません、の意味。
やるんなら
Private Sub Timer1_Timer() 'インターバルを1000にしておく
Static cnt As long
If cnt = 0 Then
'ここに3秒ごとの処理を入れる
End If
Text1.Text = Format(DateTime.Now(),"yyyy/mm/dd hh:nn:ss")
cnt = cnt + 1
If 3 <= cnt Then
cnt = 0
End If
End Sub
>>945 それだとcntが32768でオーバーフローになる
VisualBasicEditor(VB6 や OfficeVBA のエディタ部分)の
初期フォントの決定ルールを教えて欲しいです。分かる方、いますでしょうか。
日本語環境なら、MS ゴシック、英語環境ならCourier Newのようです。
オプションダイアログからフォント設定を変更した後ならレジストリに記録されてましたが、
インストール後からフォント変更するまでは、レジストリには項目がありませんでした。
知りたい理由は、VisualBasicEditor上に同じフォントで文字を描画したいからです。
同じフォントで描画ができればいいので、稼働中のVisualBasicEditorのフォント名などの情報や
HFONT、LOGFONTなどを取得する方法がありましたら、そちらの方が適切に思うのですが、
VBEウィンドウに対してGetDC、GetWindowDCした後、GetTextFaceなどでは駄目でした。
初期フォントや稼働中フォントの取得方法が分かる方、どうぞよろしくお願いします。
ここってやっぱりVB.NET扱ってませんよね(´・ω・`)?
>>952 扱ってたら
>>1に「VB〜6.0の」なんて書いてありませんよね。日本語理解できてますか(´・ω・`)?
やっぱり扱ってませんでしたか
お騒がせしました(´・ω・`)
957 :
デフォルトの名無しさん:2012/01/27(金) 04:15:41.25
>>951 VBインストール直後はフォント情報がレジストリにないということは
レジストリ読んでみて、登録されてなかったら、そのデフォルトフォントにすればいいのでは?
レジストリ読むAPIはAPIビューアの定義は間違いだらけだから気をつけて
あれってVB5の時から間違ったままだから、初心者に諦めさせるように故意に間違えてるんだろか
APIの引数はByVal As Longで宣言して
StrPtrとVarPtrで渡す時代
>>957 レス感謝です。もうレスは無いかと半ば諦めてました。
今のところ、まずはレジストリから取得するようにしています。
デフォルトフォントはOSの言語で決まるようだったので、できれば決め打ちではなく、
VB6と同じような何らかの決定ルールに従いたいと思ってました。
(英語版VB6を日本語版WinXPで試したところ、MS ゴシックがデフォルトフォントになりました)
詳細は読めなかったのですが、中国のサイトでソフトが紹介されているのを見つけたので、
少数ながら、海外にもユーザーがいるみたいなので、それもフォントを決め打ちにしたくない理由の1つです。
色々試してみて、どうやらレジストリから取得しているわけではなさそうなのですが…。
960 :
デフォルトの名無しさん:2012/01/28(土) 08:35:49.31
そうねぇ、外国のOSならMSゴシックはないよねぇ
とするとWindowsのどこかに・・
フォント名が定義されてるレジストリは余りないようだけど
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
あたりはどうでしょ
こんなのを別のフォント名に変えてVBを新規インストールしてみて
その変えたフォントになるかどうか
ま、人に配布するソフトはそんな推測で作っちゃいけないよね
>>960 VB6新規インストールは行っていないものの、
レジストリ上の"MS ゴシック"、"MS Gothic"、"msgothic.ttc"を
別のものに変えて試してみたのですが空振りでした。
色々試してみたところ、VB6については、OSの言語に依存しているのではなく、
[コントロールパネル]-[地域と言語のオプション]-[詳細設定]-[Unicode 対応でないプログラムの言語]
の設定に依存していることが分かりました。
また、この項目で「中国語(香港)、(マカオ)、(シンガポール)」を選択すると、
VBEで使用するフォントが必要な状況になるとVB6が強制終了してしまうことが分かりました。
内部でベタで持ってるのかもしれませんね…。
とりあえず、レジストリから取得、取得できない場合はベタ書きにしようと思います。
961に誤りがあったので、誰かが変に参考にしないように訂正を。
[Unicode 対応でないプログラムの言語]の設定を
「中国語(香港)、(マカオ)、(シンガポール)」にするとVB6が強制終了すると書きましたが
それは英語版VB6の話で、日本語版VB6の場合は問題ありませんでした。
会社で仕事関係の一切の情報持ち出し、持込禁止になってから止めてたんだけど、PCにVB6インストールしようかなあ。
久しぶりに触りたくなってきた。
おれはGUIはvb6でしかつくれねーから入れちまった
そろそろドトネト移行しようよ・・・・
でもメンテとかで久々にVB6触ると限られた環境だからか
色々コーディングするのに頭使って燃えるわ
久しぶりにVB6のプログラムをメンテしたりすると、よくSet書き忘れるわ
>>966 ありすぎて困る
ついでにVBに戻ると型から書いたり
今考えるとdimて打つのがめんどくさいなぁ とおもた