VBプログラマ質問スレ(6.0以前) Part48
1 :
デフォルトの名無しさん :
2006/05/04(木) 02:55:26
2 :
デフォルトの名無しさん :2006/05/04(木) 02:56:46
3 :
デフォルトの名無しさん :2006/05/04(木) 02:57:19
4 :
デフォルトの名無しさん :2006/05/04(木) 02:58:34
http://www.microsoft.com/japan/msdn/vbasic/support/vistasupport.aspx Visual Basic チームは、Visual Basic 6.0 アプリケーションが WindowsR Vista? でも
"そのまま" 動作する互換性を提供することを表明します。」
Visual Basic チームは、Windows XP で実行できる Visual Basic 6.0 アプリケーションが
Windows Vista でも実行できるようにすることを目標としています。
また、Windows Vista で実行できる Visual Basic 6.0 の開発環境を提供するための取り組みも行っています。
このドキュメントで説明するように、Visual Basic 6.0 ランタイムは、Windows Vista のライフサイクルをとおして
サポートされます (メインストリーム サポートが 5 年、延長サポートが 5 年の合計 10 年になります)。
マイクロソフト プロダクト サポート ライフサイクルの詳細については、
http://support.microsoft.com/gp/lifepolicy (英語) を参照してください。
マイクロソフトでは、ユーザーが Windows Vista で Visual Basic 6.0 アプリケーションを実行できるようにするため、
Windows Vista に Visual Basic 6.0 ランタイムの主要コンポーネントを同梱する予定です。
Visual Basic 6.0 ランタイムを使用するように記述されたアプリケーションが Windows XP と Windows Vista の両方で
同様に動作する互換性を確保するため、一連のアプリケーションを使用してテストを行いました。
Visual Basic 6.0 IDE は、延長サポートの一環として、2008 年 3 月まで Windows Vista でサポートされます。
Windows Vista チームと Visual Basic チームでは、Windows Vista で Visual Basic 6.0 IDE のテストを行い、
IDE が以前のオペレーティング システムと同様に機能するようにしています。
乙。
前スレで遅いと叩かれていたけど、VC厨は比較して言ってるのか? インタプリタって釣ってるだけだよな・・・。
結局前スレの最後のアレ、何だったんだ。 遊んでただけか?
>>10 VC++覚えたばかりの連休厨房でしょ
まあ、いずれにせよ
> 四.荒らしは相手しない。
このスレも自分が見えてない奴が多いなあ。 いや、一人で八面六臂の活躍wをしているのかもしれんが。 どうみても「必死」なのはVB擁護している奴の方でしょ。 必死が悪いかどうかは別にして。 VBからかってる奴は文字通り「からかってる」んだよ。 つまりネタでやってるの。当たり前だろw 人間ってのはコンプレックスを突かれたときに過剰反応するもんなんだよ。 自分に自信があるか、あるいは逆に自分の無能さを十分に自覚していれば VB使いが低能だ、みたいな中学生みたいな煽りは無視できるでしょ? いちいち反応しないと気がすまないのは図星を突かれてるからだ。 悪いけど実際問題VBに固執している奴の大半はVBが便利だからではなく VBしか使えないから固執しているんだから、まずそれを自覚しろって。 そして下らない煽りにいちいち反応すんなよ。餓鬼じゃあるまいし。
14 :
デフォルトの名無しさん :2006/05/04(木) 12:01:33
VBの凄いところはIDEだと思う。 eclipseとか使うけど、VBほどの使い勝手のよさを感じられない まぁ、「慣れ」かも知れないけど…
VBしか使えないから固執してる図星野郎。 それが俺っち。 一応プログラマやってます。 派遣社員だけど。
10倍も20倍も速いVC++で組めなくても、食っていければいいや。
>>16 その考え方は正しいすな。
目的を達成できる安くて早い手段を採用すればよい。
サンデーpな漏れもVBしか使えんけど目的のものが作れればそれでいいや
そうだね。 MSXの時代は、BASICで作られたプログラムより、 C言語で作られたプログラムのほうが見違える速さで、 憧れの的だったけど、今となっては別にVBで十分な場合多いし。
すみません、便乗して質問なのですが どの言語から始めていいのかわかりません。 最終的にはバリバリの3Dゲームを作りたいのですが VBでも十分でしょうか?
>>20 今から敢えてVBを選択する意味はないです。
DirectX使いたいなら素直にunmanagedなVC++いっとけ。
>>20 はじめはともかく最終的にはVBではキツいでしょう。
レスありがとうございます。 最終的にはVC++を習得するとして 現時点で、入門用としてVBを使うことは推奨されることなのでしょうか?
25 :
デフォルトの名無しさん :2006/05/04(木) 12:45:41
>>25 だからこそ一発目にトリッキーな言語を交ぜるのは推奨しないす。
>>23 まあ、VB6でも使えることは使えるけどね >DirectX
このスレでこんなこと言うのもなんだが、
3Dゲームで画面描画は全部DirectX使うんなら
あえてVB6を使う利点はないと思うよ。
ありがとうございます。 それではVBとVC++の間を取ってDelphiから始めたいと思います。 皆さんの意見は大変参考になりました。
29 :
デフォルトの名無しさん :2006/05/04(木) 12:50:12
>>26 でも、ピッチの広い階段は大変だぞ。
入門だからまずアプリが作れたという満足感とか楽しさを進める
かつてMSX-BASICを楽しんでいた中学生の頃、 数当てゲームを作れた満足感より、 スプライトを使って作れたアーチェリーゲームのほうが、 満足感はかなり高かったなぁ。
でも、スプライト衝突判定で、 スプライトA 自機 スプライトB 自機の玉 スプライトC 敵機 どのスプライト同士が衝突しても同じ処理しか出来なくて、 挫折したなぁ。 スプライトに一応番号はあるんだけど、 「この番号とこの番号が衝突したら」っていう判定が出来なかった。
おっさん、おっさん、帰ってこい。
どのおっさんを呼び出してるの?
35 :
デフォルトの名無しさん :2006/05/04(木) 14:55:50
今はC#使ってるけど、ぶっちゃけクラスはVBAで覚えた。
Delphiっていうか某ランド系はDirectXとの相性が悪いって聞いた事あるな 実際どうがか知らんけど
そういや、VisualStudio6.0ってまだ売ってるの? .NetになってVB使う意味は無くなっちまったよ。 つーことで、環境が許すときはいまだにVB6.0、 .NetのときはC#だな。
>>38 デッドストックがどこかにある程度だろ。2、3代前の開発環境だろ
>.NetになってVB使う意味は無くなっちまったよ。
これは同意。
VB可愛いよVB
.Netってそんなにいいの?
>41 Webアプリケーションだと天国と地獄ほどの違いがあるな。
44 :
38 :2006/05/05(金) 00:11:49
>>43 ASP.NETでな。
とりあえず、イミディエイトだけでも少しはましにしないと
6.0以降はeclipseにも及ばんなー。
VCでしか物作らないMS様はそんな事きにしませんか。
>43 VB6.0ならば「IISアプリケーション」と言う名前の機能で作成できる。
FunctionやSubプロシージャのアドレスをVBのデバッガで調べ、EXEを作りVidualstadioのC++のデバッガで使いたいです。 そこでAddressOf演算子でアドレスを表示させ、それを使おうと考えました。 しかしAddressOf演算子はDLLの引き数にしか使えないようです。 なにかよい方法無いですか?
>>47 > しかしAddressOf演算子はDLLの引き数にしか使えないようです。
DLL の引数、ではなく、関数の引数、ではなかったか?
ダミーの関数をつくってその引数にすればよかったと記憶している。
違ったらごめん。
50 :
デフォルトの名無しさん :2006/05/08(月) 20:05:43
VB6.0 SP3を使っています。 すでにアプリからExcelで帳票が出力できている状態で、 これをPDFでも出力したいなぁってことで1から組むのではなく 単純にxlsファイルをPDF変換して出力しようと思っています。 調べてみたところシェアならActive Reportsで行けそうな感じなのですが フリーでこういったDLLやOCXあるよーって方います??
53 :
47 :2006/05/08(月) 22:02:35
>>48 ,49
原因がわかりました。
アドレスを得ようとした関数がクラスモジュールにあると駄目なようです。
Basファイルにある関数のアドレスなら取れました。
当初の目的から逸れますが、デバック関数をBASに作り、
目的の関数の前後でコイツを呼び出して何とかしようと考えています。
C++のデバッガ使うなら、VBでシンボリックデバッグ情報を出力しろよ。
55 :
デフォルトの名無しさん :2006/05/09(火) 15:21:09
>>53 クラスをインスタンス化して無いとか言う落ちじゃないのか?
56 :
デフォルトの名無しさん :2006/05/09(火) 15:45:03
そろそろ時期OSも出る頃だし次の案件からVB6をやめてVS2005にしようか悩んでいる。 VB6ってVistaでも開発環境できるのかな? それよりも動かせるのかな? 何よりも自分がVS2005が使えるのか・・・ VB6しか触った事が無い人でもVS2005って扱えるんでしょうかね?
お前には無理だ
>>56 Vistaはまた遅れるらしいよ。
また、Vista上でVB6アプリは動く様にするらしい。
まぁそんな事しなくても、VirtualPC上の2000で動かせばいけど。
59 :
デフォルトの名無しさん :2006/05/09(火) 16:29:27
>>57 やっぱそうだよな。
それ以前に相談したらそんな暇あるならさっさと案件進めろと言われた・・・
>>58 安心した。
60 :
デフォルトの名無しさん :2006/05/09(火) 18:21:14
ASPだけど、VBScriptだからこっちで質問していいのかな・・
開発環境
サーバ:Windows2003
クライアント:WindowsXP
IIS4.0
VBランタイム6
目的
Access、またはExcelで帳票を作成して印刷したい。
質問
Set objAccess = Server.CreateObject("Access.Application")
または、
Set objExcel = Server.CreateObject("Excel.Application")
でエラーが起きてしまい、なぜかCreateObjectでAccessとExcelが使えません。
ちなみに"Scripting.FileSystemObject"は使用できました。
どうすればエラーが起きないようにできるのでしょうか。
エラー内容
-2147024891 006~ASP 0178~Server.CreateObject アクセス エラー~許可を確認中に
Server.CreateObject の呼び出しに失敗しました。このオブジェクトへのアクセスは拒否されます。
自分で調べた結果
・VBランタイムのアクセス許可→許可してもだめでした
ttp://support.microsoft.com/kb/278013/ja ・アウトプロセスのアクセス許可→解決方法通りにできない
ttp://support.microsoft.com/kb/198432/ja よろしくお願いします
61 :
デフォルトの名無しさん :2006/05/09(火) 18:43:50
とりあえず、ASPからExcelやAccessは操作するなって
62 :
60 :2006/05/09(火) 22:11:34
>62 MSの責任ではなく、サーバーでの使用を保証していないものを 使おうって発想の方が遥かに責任が重いかと。
どうせ設定が悪いだけなんだろうけど、 そういう危なそうなことをしようとも思わないので、 なにが原因か調べる気が起きない。
>>64 「設定が悪い」のではなく、そんな使い方は
MSの「想定の範囲外」なので、
原因究明なんて無意味&無駄。
>>59 また荒れそうな話するけど
「そんな暇あるならさっさと」っていうのはこの件に関してはやばいな。
将来確実に直面する問題を先送りにすればするほどあとで困るのに。
(先取りしすぎてもリスクがあるが、今はそう言う時期でもないだろう)
VB6の次はVB.NETにする予定があるなら、出来るだけ早いうちから
ちょっとずつ移行しておいたほうがいいよ。「お前には無理」かどうかの
調査にもなるし。
けっきょく仕事はVB.NETじゃなくてJavaに移行したとかいうときでも
完全に無駄にはならんだろう。
あとVB6自体はVistaで動いても、他社製のocxなんか使うならそっちの対応も必要だ。
>>58 の最後の提案でいいようなきも駿河w
68 :
デフォルトの名無しさん :2006/05/10(水) 10:50:15
>>67 VMWareだと、旧OSの為のDisplayドライバやチップセットドライバが必要になるけどそれで良いのか?
VirtualPCだと440BXにS3-Trio64Vだから結構古いOSでもドライバが用意されてる
>>68 そうなんだ。じゃぁVPCでいいや。
しかし「440BXにS3-Trio64V」て、まさに昔使ってたPCだ。w
VBプログラマ質問スレ(6.0以前) Part48
http://pc8.2ch.net/test/read.cgi/tech/1146678926/ から移動してきました。
あるフォルダのサイズを得る為に、ヘルプを参考に
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder("D:\")
MsgBox f.size
の様な VBS を書いて実行すると、「800A0046:書き込み出来ません」
のエラーが出てしまいます。
ディレクトリのサイズを参照しているだけなのに、書き込めないとは
どういう事なのでしょうか・・・?
検索すると、権限の問題らしいのですが、Administrator で実行
していますし・・・
71 :
デフォルトの名無しさん :2006/05/11(木) 21:01:44
>>70 どの部分でエラーが出てるのかが分からないけれど、
Dim fso as Object
Dim f as Object
にすればいいのかな?
>>70 どこから移動してきたってぇ???
それはさておき、そのスクリプトは
どこから起動した?
ブラウザ?それとシェル?
>>70 "D:\"はフォルダじゃなくてドライブな気がするが
>>70 ルートはフォルダじゃないから
ドライブの容量見たければ
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
msgbox fso.GetDrive("D").TotalSize
75 :
デフォルトの名無しさん :2006/05/11(木) 22:52:18
大量のファイルを変換して保存したいんですが、変換ソフトがいっこずつしか変換できないんで終わる気がしないです マウスの操作が繰り返しなんで、マウスの移動やクリックというのはプログラムで操作できるんでしょうか?
>>71 エラーは「MsgBox f.size」の部分で出ます。
で、VBS ファイルとして実行してるので、型宣言はないのです。
>>72 VBSファイルとして、Exeとかと同じ様に実行しました。
>>73 ルートフォルダ配下の全ファイルの容量、のつもりでした。
>>74 サンプルなのであのコードでしたが、実際は、GetFolder の引数は可変になります。
色々なサブディレクトリ(フォルダ)の容量を取得したかったのです。
77 :
デフォルトの名無しさん :2006/05/11(木) 23:19:34
>>77 System Volume Information って全部にあるな・・・
79 :
デフォルトの名無しさん :2006/05/12(金) 00:41:32
「書き込みできません」ってなんだっけなぁ? 自分の出たことあるきがするんだけど思い出せない。 なんでこのエラーメッセージやねん!って突っ込んだ気がするけど。 よく考えれば、あぁ。そういうことかと思った気がするんだけど。んー?
「System Volume Information」フォルダがあるドライブ=ファイルシステムがNTFS
>>81 FAT16にもFAT32にもあるんだけど。
83 :
デフォルトの名無しさん :2006/05/12(金) 10:49:51
「System Volume Information」フォルダがあるドライブ=NTFSを使うOSでマウントしているorしていたことがある
IE6でマウスで選択した文字列を検索できるようにしたいのですが、
keyword=の<book>をeuc-jpで渡す方法がわかりません。
どこにどのコードを追加すればよいでしょうか?
strSelText = objFrmDoc.selection.createRange().text
strArgments = "" & CHR(34) & "
https://www.library.shinjuku.tokyo.jp/opac/cgi-bin/sellist? type=0&allc=&page=1&keyword=<book>&sentaku=and&title=&sentaku=and&author=&sentaku=or
&publish=&sentaku=or&isbn=&pubydate1=&pubydate3=&bunrui=&syubetu=all&kan=all&media=all
&count=10&order=publish&before=select&authorid=&opacfile=&titleid=&i1=&i2=" & CHR(34) & ""
strArgments = Replace(strArgments, "<book>", strSelText)
objWshShell.Run CHR(34) & EXE_PATH & CHR(34) & " " & strArgments, 1, 0
85 :
デフォルトの名無しさん :2006/05/12(金) 20:32:43
>>75 マウスは動かせないけど、こんなのを応用してみてはどう?
http://www.microsoft.com/japan/msdn/columns/scripting/scripting061499.asp '==========================================================================
'
'
' NAME: Calculater.vbs
'
' COMMENT: calc.exe にキーストロークを送る
'
'==========================================================================
Dim WshSHell
set WshShell = CreateObject("WScript.Shell")
WshShell.Run("calc")
WScript.Sleep(100)
WshShell.AppActivate("Calculator")
WScript.Sleep(100)
WshShell.SendKeys("1{+}")
WScript.Sleep(500)
WshShell.SendKeys("2")
WScript.Sleep(500)
WshShell.SendKeys("~")
WScript.Sleep(500)
WshShell.SendKeys("*3")
WScript.Sleep(500)
WshShell.SendKeys("~")
WScript.Sleep(2500)
素直にバッチファイルを使えばいいだろ。
ちょいと質問 VBでオブジェクトをCollectionにぶち込むのと リスト構造でオブジェクトを持つのでは どっちが効率がいいの?
>>87 意味不明。なんか頭の悪い質問だな。
マウスによる操作とキーボードのどっちが効率がよいかは
「何をするか」によるだろうに。
89 :
87 :2006/05/13(土) 13:03:13
>>リスト構造 ごめん ListBox の事じゃなくって 双方向リンクリストの事だ 説明足んなくてすまん
>>87 どんな状態が「効率が良い」と思ってるのか。
コレクションだろうがリンクリストだろうが、
アルゴリズム次第でどうとでもなるし。
使わないコンポーネントや参照設定にチェックを入れている場合、 インストーラ作成時に無駄にDLLやOCXが梱包されること以外に、 目に付くような弊害って何かありますか
>>82 その場合、削除が可能なはず。
NTFSドライブに存在するSVIフォルダは削除不可能、閲覧不可能なただのゴミ。
94 :
デフォルトの名無しさん :2006/05/14(日) 05:23:26
最近の計測機器を制御するソフトをみてみると 圧倒的にVisual Basicが多いのですが。 なんで?
簡単だから
>>94 同じ機能のソフトを、生CとVBとVC++とJavaとアセンブラで書いてみやぁ。
本当はそういう分野にはVBは向いてないんだけどね。 例えば通信一つとってもスレッドが使えないから、タイマ使うか UIがフリーズするの覚悟でループでポーリングするかするわけだけど、 いずれにしてもPCや機器の性能を100%生かせない、どっかストレス感のある アプリになってしまう。
>>97 いや当然DLLと組み合わせてやるんだよ。
__asm { } とかでCの中に機械語も直接書けるから、
バンバンIn/OutするDLL書いて、VBから
コールしてる。
すいません、わかる方いればぜひ教えていただきたいのですが、 VBで対象プロセスの優先度を変更のやり方を教えてくださいな 検索はしてみたんですがそれらしいものがまったくでなかったもので^^;
>>100 痛い人だなあ。。
アセンブラ使おうが何使おうが、通常のユーザーモードで動作するアプリが
勝手にIOにアクセスなんてできないんだよ。
Winに限らずマルチタスクOSとはそういうもの。
っていうか、IOにアクセス可能かどうかなんて話はしてないし。
VBが制御に向かない理由の一つとして、ワーカースレッドが使えないと言ってるだけ。
>>101 Win32 API を使う。SetPriorityClass() かな。
>>102 お前、何も分かってないな。
まぁいいけど。
105 :
デフォルトの名無しさん :2006/05/14(日) 23:09:56
ソースで、シングルステップで動作を確認して、 コンパイルして実行ファイルを作ったのですが 実行ファイルの動作がソースと異なる事態が発生してしまいました。 簡単に書くと if A=1 then B=B+1 else C=C+1 end if 見たいな感じなんですが、A=1にはめったに行かない(ソースで確認しました)はずなのに 実行ファイルではすべてAに行ってしまいます。 何か原因ありますか? OSはwindows2000,VB6.0です。
あのさーここは学研の『ムー』の読者投稿欄じゃないよ。 エスパーはおらんつーのw
とりあえずアサーションなりStopなり使って どこでA=1になってるか調べてみなきゃなんとも言えんでしょ
>>105 「A=1にはめったに行かない」じゃなくて
「B=B+1にはめったに行かない」だろうが。
日本語もまもとに書けないからバグるんだよ。
VBAで、MsgBoxで選択範囲の列数・行数を返すやり方すらわからない自分はVB向いてないですか?
エスパー厨は無視して そのA、またはAに代入してる関数や変数、またはその関数に使われている (その変数に代入している)関数や変数・・・のどっかの関数が、IDEとEXEで 返す結果が違うんだろ。さかのぼって追いなさい。 たとえば Function Hoge() Hoge = なにか End Function ... A=Hoge If A=1 Then... ていうときに「なにか」のところが怪しいとか、そんな感じで見ていくの。 EXEでAの中身を調べたかったら、フォーム上のLabelやファイルに出すとか。 じつはEXEではElseの方を通ってるけれど勘違いしてた、という可能性も あるから、「どっちを通った」みたいな情報も出力するといい。
>>110 エスパー厨って失礼な奴だな。
あのねえ、そうやって質問者を甘やかすのは本人のためはもちろん
スレの利用者全体の利益に反すると思うぞ。
少なくとも回答者に千里眼的能力を要求するような質問を
許容すべきではないと思うがね。
109です、すいませんでした。 正直に言うと、VBAの宿題出されてまったくわけわからなくて助けてほしかったんです。 甘えてばかりでごめんなさい。
113 :
107 :2006/05/15(月) 01:58:09
113の御方 Excelです、わざわざありがとうごいます!
116 :
デフォルトの名無しさん :2006/05/15(月) 17:43:17
117 :
デフォルトの名無しさん :2006/05/15(月) 22:32:35
VB2005で作ったものをVB6.0で編集することできるんでしょうか?
そんな餌(
119 :
デフォルトの名無しさん :2006/05/15(月) 23:05:51
本気です。学校で作ったものを編集しようと思ったんですけど 家にはVB2005しかなくVB2005でやろうとしたらなんかアップデートされて 拡張子とか変わっちゃたんですけど、いったんVB2005で編集してそれをVB6でも 編集できるようにすることはできるのでしょうか?
やってみればわかるだろ
OSはXP、VB6を使ってます。 dim as a integer dim as b integer dim as c integer a=5 b=8 c=2 の時、 上記のうち最大値と最小値msgboxにを表示したいんですが、 別の変数としてdを置いて、処理をする際に dに最大値を保存するやりかたは効率的ですか? あとmsgboxに二つの値を表示するのってどうすればいいですか?
まあ間抜けな質問だとは思うが矛盾はしてないと思うよw
124 :
119 :2006/05/15(月) 23:43:45
なんどもすいません。 つまり学校のVB6で作ったものを家のVB2005で加工したら拡張子とかが 変わってしまったんですけど、それを学校のVB6で加工することは無理なんでしょうか?
そんな餌(
>>124 マジレスするとVB6とVB2005ではバージョンが違うからファイルの内容もコードも全部変わっちゃうから無理。
バックアップしてある書き換え前のやつから掘り起こすしかない。なかったら諦める。バックアップ取らないお前が悪い
バックアップも何も、ウィザードはオリジナルのソースを わざわざデリったりしないよ。 当たり前でしょw どこの世界にそんな意地の悪い魔法使いが だから、最初からそんな餌(
VB6(SP6)でVB4ランタイムを使用したプロジェクトを修正中なのですが、 SSPANEL等の読み込みが出来ません。 「ライセンスがありません」といった内容でした。 ネット上で配布されてるランタイム一式をインストーラーを使って 導入したのですが、 なにが問題なのでしょうか?
>>130 SSPANELって、VB6には添付されてないんじゃないっけ?
今VB6を起動出来ない環境なので確かめられないけど。
MSのサイト見てみ。
別のに置き換えるしかないかと。
132 :
デフォルトの名無しさん :2006/05/17(水) 11:54:17
開発ライセンスと実行時ライセンスは別だったような。 実行時インストーラーで入れても開発できない。 SS系(3Dコントロール)は確か、CDのToolsの下にあったような。 それもVB5までだっけ?4->6なんてコンバージョンは作り直してたから知らんわ。
SS系は、とにかくバグだらけで、滅茶苦茶評判が悪かった様な。
134 :
デフォルトの名無しさん :2006/05/17(水) 22:26:06
フォルダに随時更新されてくる画像を読み込んで画面に表示させるにはどうすればいい?
>>134 FindFirstChangeNotification
137 :
130 :2006/05/18(木) 10:07:57
レスどうもです。
>>131-132 それか!
やっぱり、CDに入ってるのと、配布されてるランタイムは別物なんですね。
先方から、「エラーが出たけどこれ入れたら直った」って言われたから
なんで動かないのか悪戦苦闘して状況悪化してました。
# 只、むこうはそれで問題なく開発できてるんだよな…
リドミにはCDには入ってるようなことが書いてあったけど、
其れらしいものがみあたらないので
先方に別物に置き換えて良いか確認します。
あ、SPREADの6.0を入れてるけどそれは関係ないですかね
>>133 其れ聞くとなおさら乗り換えた方がいい気がしてきた
あるIPアドレスのMACアドレスを取得するのはどの様にすれば出来ますか? APIを使えば出来るのでしょうか?だとしたらAPI名はなんですか? それとも、イーサネット・ヘッダから何らかの方法で取得するのでしょうか?
>>130 こういう人って何考えてるのかな。どっか心を病んでるとしか思えん。
俺はVB4からのコンバートなんて全くやったことも無いが、
MSDNライブラリで"sspanel"で検索する手間さえ惜しいのか。
死んだ方がいいと思うよ。
141 :
デフォルトの名無しさん :2006/05/18(木) 13:01:14
>>139 こういう人って何考えてるのかな。どっか心を病んでるとしか思えん。
142 :
デフォルトの名無しさん :2006/05/18(木) 13:45:45
以下のようなコードで、DriveListBoxを使用して、DirListBoxに設定しています。 ただ、FDが入っていないときにDriveListBoxでAドライブを指定すると、 「実行時エラー'68':デバイスが準備されていません。」と出てきてしまいます。 メディアが入っていないきは、何もしないようにしたいのですが、下記のコードではエラーを受け取ってくれません。 Dir1.Path = Drive1.Drive On Error GoTo Aaaa Aaaa: If Err.Number = 68 Then Exit Sub End If どうしたらいいいでしょうか? ご存知の方、お聞かせ下さい。 よろしくお願いします。
143 :
130 :2006/05/18(木) 13:46:08
>>139 申し訳ありません。
MSDNは勿論参照いたしましたが、
それで解決できなかったので質問させていただきました。
別所ではネット上のランタイム導入等で動作している(らしい)ので
なんとかならないか模索している次第です。
vb6しかやったことないですけど vb2005でも改行は( _)なのですね メモ帳でも右端で折り返してくれるのに、 何故こんな記号を使ってるのでしょうか?
>>140 どう解決したかを書き込むと、同じ事で悩む、
これからここを見る人の役に立つんだが?
>>142 SetErrorMode API とか。
147 :
デフォルトの名無しさん :2006/05/18(木) 15:01:07
>>144 >>146 1行目と2行目を入れ替えたら直りました。
でも、ちょっと驚きです。
ありがとうございました。
>>147 自分のアホさ加減に驚いたのか?
そうじゃないなら、On Errorのヘルプくらい見れ
こういうことがすぐわかるレベルになるには何年もかかるのでしょうか
>>150 普通は、生まれて初めてヘルプ読んだその時に分かる。
152 :
130 :2006/05/18(木) 16:09:39
何度もすいません。
>>130 の表記に問題があるようなので再度疑問点を記載させていただきます。
VB4の機能(SSPANEL等)を利用したVB6プロジェクトを編集する際
ネット上で配布されているTHREED32.ocxを含むパッケージをインストールし
コンポーネントの追加から参照を行いましたが
フォームを表示させようとするとライセンスエラーが表示されます。
先方でも同じ現象が発生しましたが、
同様の方法で回避できたそうです。
ネット上で配布されているTHREED32.ocxは
開発環境では使用できないのでしょうか?
他にも何か必要なファイルが存在するのでしょうか?
また、VS6ではCD内には収録されていないのでしょうか?
>>152 CDなんか自分で中身見ればいいじゃん。
154 :
130 :2006/05/18(木) 17:18:28
リドミの中にあるフォルダがは存在しないかったので、 CD内を一通り確認しましたが それらしいのはみつけられませんでした。 もしかしてファイル名が違うのではと思い、追記した次第です。
>>146 すいませんおっしゃる通りです・・・ SendARP ってので出来るみたいです。
>>152 君本当に病気でしょ?
だからそんなもんMSDNライブラリに書いてあるつーの。
こんなとこにツラツラ書いてる間になんでMSDNライブラリ開いて検索する気にならんの?
158 :
わけあってVB4を使ってる人 :2006/05/18(木) 19:47:39
記入された文字を保存しておいて次回起動するときに 見れるようにしたいんですがどうすればよいのでしょうか?
起動ってなんだ?PCが?OSが?ソフトが?見れるって?なにがやりたいんだ?
160 :
わけあってVB4を使ってる人 :2006/05/18(木) 19:56:18
すいません ソフトを起動するときです
記入された文字を保存しておいて次回起動するときに見せるプログラム書け
162 :
わけあってVB4を使ってる人 :2006/05/18(木) 20:08:47
保存の仕方がわからないんです 教えてください
古本屋でもまわって入門書買ってきたら?
>>158 用途を満たすか判らんけど、簡単なのはINIファイルかなぁ?
165 :
デフォルトの名無しさん :2006/05/19(金) 00:51:01
回文(あいうえおえういあ)プログラムを Reserve関数を使わずに作りたいんですけどどうすればいいんでしょうか? 素人過ぎて困ってます。。OSはwindowsXPです。 誰か助けて下さい。
回文か。 学校の課題ってのは20年進歩がないんだなw だから課題は自分でやらなきゃ意味ないだろ つーかReserve関数って何?w
167 :
デフォルトの名無しさん :2006/05/19(金) 02:28:54
ああ、すみません。Reverse関数でした。 はぁ、以前からある課題でしたか。 そんなこともできない自分に自己嫌悪・・・
読め。ともかく書いた対角化求めよ! ( ´・∀・`)へー
>>165 Dim i As Integer
Dim s As String
s = ""
For i = 0 To 8
s = s & Chr$(&H82A0 + ((i And 7) + CInt(CBool(i And 4)) * 2 * (i And 3)) * 2)
Next i
これでとりあえず s に「あいうえおえういあ」が入る
170 :
130 :2006/05/19(金) 11:23:04
CD内のファイルを発見いたしました。
リードミーに書かれている手順に従ってレジストリの登録を行ったのですが
相変わらず参照が出来ません。
試しにオブジェクトを挿入してみたところ
実行時エラー713が出ます。
レジストリの登録が正常に出来ていないのでしょうか。
何度かやってみましたが駄目でした
>>154 Disk3に入っていました。
Disk2までは確認したのですが3の存在に気付いておりませんでした。
>>152 MSDNに記載されている情報は一通り参照したけれども、
状態が解決しないので質問させていただいています。
鬱陶しいのは重々承知しておりますが、先方にも匙を投げられて
頼れる所が無かったので。
171 :
130 :2006/05/19(金) 11:34:11
直接、手動でOCXのレジストリ登録作業を行った所、認識されました 他にも同様の症状が出ておりますので、検証してみます。 何度も失礼致しました。
172 :
165 :2006/05/19(金) 14:32:00
>>169 ありがとうございます。
InputBoxに書いた文字を回文表示したい場合、
どうすればよろしいんでしょうか?
何度もすみません。。
>>172 Dim i As Integer
Text2.Text = Text1.Text
For i = 1 To Len(Text1.Text) - 1
Text2.Text = Text2.Text + Mid$(Text1.Text, Len(Text1.Text) - i, 1)
Next i
174 :
デフォルトの名無しさん :2006/05/19(金) 16:28:04
アクティブウィンドウ(自フォーム以外)の位置とサイズを取得する方法、 および同じく位置とサイズを変更する方法を教えてください。 自フォームなら取得も変更も簡単なのですが、別アプリを操作したいので困っています。 WindowsXP,VB6SP6です。
176 :
175 :2006/05/19(金) 16:35:18
>>174 アクティブなのでいいのなら GetForegroundWindow で十分だな
178 :
172 :2006/05/19(金) 16:52:14
>>173 ありがとうございます。
重ねてすみません。
入力した文字が1回のクリックで
MsgBoxに全て表示できるようにするには
どうすればいいのでしょうか。
今後の勉強のためにも、
何故そうなったかという解説もお願いします。
>>178 が何を言いたいのかわからない俺は文盲で良いや。
180 :
173 :2006/05/19(金) 17:12:37
181 :
173 :2006/05/19(金) 17:46:15
>>179 教わった方法だと1つのMsgBoxに
1文字ずつしか表示されないんです。
これを1つのMsgBoxに1つの文(回文)
となるようにしたいんです。
>>180 本気でわかってないんです。
はぁぁ、ごめんなさい。。
>>181 (゚Д゚)ハァ?
forを抜けたところでMsgBox Text2.Text で出来るでしょ?
VB6にはsprintfないの?
VB6を使用しているのですが、データを保存する 表関数はどうすれば作成できますか?
↑日本語でおk
関数に表と裏があることをどこで知ったんだ
190 :
174 :2006/05/20(土) 05:35:26
>>175-177 どうもありがとう。
とりあえずFindWindowは条件的に使えないけど
GetForegroundWindowとSetWindowPos、
そしてSetWindowPosを調べてて見つかったGetWindowRectで
取得も変更も出来ました。
6.0を使用していますが、VBで指定アドレスのメモリ参照は どのようにすればできるのでしょうか? 参照した値をテキストボックスに表示したいのですが可能でしょうか?
>>191 っReadProcessMemory API
>>192 そちらをググって見たらイロイロ出てきました。
いまから調べてみます。
ありがとうございました。
194 :
184 :2006/05/20(土) 22:25:35
sprintf("%04x%04x%04x" ,a ,b, c) に相当することをやるには、もしかして、Format関数を 組み合わせて頭を捻らないとダメ?
>>194 16進数に変換するのが目的なら、Hex。ただし、頭の0はつかない。
197 :
184 :2006/05/20(土) 22:59:31
頭の0は簡単につけたいところなのですが。 すると、HEX$したあとに文字の数を数えて不足分だけ0を頭に足す、という行為を 3変数それぞれに行って、最後に+で結合する必要がある?
>>197 そだね。
Right("000" & Hex(a), 4) & ...
>>194 頭を捻る必要は全くない。
>>195 ん?
よく意味が分からん。
どういう事?
JavaVMって何だ?
200 :
デフォルトの名無しさん :2006/05/20(土) 23:53:36
>>195 blogは、本当なのか?それならそれでいいけど
IDEは今の感じがいいな~
eclipseのプラグインとして動くようになったらデバッグとかが面倒くさいなあ~
すまぬ既レスだった
WebBrowserコントロールについての質問です。 あるページを特定のリファラーを送って表示する方法を教えてください。 ググってもMicrosoft.XMLHTTPなどでリファラーを送ってファイルをDLする方法とかは分かったのですが WebBrowserコントロールでの方法が分かりません。 単にあるページを確認のために表示するだけが目的で、まともなブラウザを作ろうってわけではないので WebBrowserコントロール以外を使うつもりはありませんが、 無料で使えてリファラー指定できるブラウザコントロールがあるなら、そちらの紹介でも構いません。 とにかくやりたいことが単純単一なので、手軽に出来る方法を探してます。宜しくお願いします。
ちょっと前にその手の話題挙がってたね。 出来るって言ってた奴居たけど何処行ったかな?
>>203 素直にWinsockでプロトコル組んだ方が早い思う。
読んだデータをTempファイルに書いてローカルで表示させればOK。
NavigateのHeadersに書いてはどうか
208 :
203 :2006/05/21(日) 20:29:18
>>207 出来ました。どうもありがとうございます。
いきなり「出来ない。」と言われて諦め気味だったけど
しばらく様子見ていて良かった。
ここでの「出来ない」「無理」「不可能」は 「俺は知らない」という意味だと思って無視した方がいいよ。 今までも出来ないとレスが付いた後に解決方法が書かれたことが何度あったことか… 本当に出来ない場合も多々あったが、 一個人の知識で言う「出来ない」「無理」「不可能」など、なんて不確かなことか。
ここでの「出来ない」「無理」「不可能」は、 「そんな事はVBではやらない方がいい。別の方法を見つけろ」 という意味だと思った方がいいよ。
いや、
>>209 が正しい
無知で頭悪い癖に偉そうに人様に意見だけ垂れたい奴がいるんだよw
ところで、VB.NETなんていらないよなぁ。 C#.NETはともかくとして、VBはVBのまま、ずっと進化して欲しかった。
それはないw .NET慣れたらもうVBには戻れんよ、いや本当。 まあIDEの重さだけはちょっとアレだけど。
VB.NET いらね。 .NET Framework 上で VB 動かす何かをかませればいいのに。
P-CODEをILに変換しよう!
> 「そんな事はVBではやらない方がいい。別の方法を見つけろ」 > という意味だと思った方がいいよ。 一理あるようで、実はこういうこと言う奴は視野が狭い。 最良の結果を得るためと言うことなら、全ての処理に置いてVBなんか使わない方がいいし、 「この処理はVBだと面倒なので他の言語でやった方がいい」という部分があったとしても 一部面倒でも全体で見ればやっぱりVBの方が楽だったりする。 そもそもここに質問に来る奴は、ある処理をするのに適した言語・方法を聞きにしてるのではなく VB言語を使うことを大前提に、どうすればいいかを聞きにしてることが多いので VBでの解決方法を教えた上で、個人的意見として「~言語の方が適してるよ」と添えるのはいいが 回答もせずに「その処理にVBなんか使うな」ってのはお門違い。 唯一この台詞を言って良いのは、「もっと処理を速くするには?もっと軽くするには?」という類の質問だけだ。
ガキの自己弁護に何をむきになってレスしてるのかね。
220 :
デフォルトの名無しさん :2006/05/23(火) 09:21:38
>>216 あんたも視野が狭いね。
VBで出来ない、すべきでないことを勧めるのはおかしいでしょ?
APIコールばっかりのプログラムとか、コールバック関数を使うとか。
そういうの使いたければ、こんなところで聞くレベルではないぐらいになるべきじゃないの?
自分で情報に辿り着いて、その上で判断できない奴はさ。
VBでやるっていう前提が、単なる開発環境としてのVBなのか、VBという言語開発環境の通常使用の範囲内なのか。
他の言語なら簡単にできることを、わざわざVBでやるっていうのは、まあ選択肢のない開発下っ端にはしょうがないんだろうね。w
> APIコールばっかりのプログラムとか、コールバック関数を使うとか。 なんでたった一つ使おうとしただけで、 「ばっかりのプログラム」になるのだろうな。 > 他の言語なら簡単にできることを、 APIコール部分以外はVBで簡単に出来る。 大部分を簡単に出来る言語を選ぶのは当然。 ちょっと実現しにくいものに出会っただけで、 言語全部置き換えるのはバカだろ。 仕様をすべて分かっていない限り、どの言語がふさわしいか判断することは出来ない。 お前が当事者じゃない限り、お前が選択することは不可能だよ。
VBではちょっと面倒だな、って部分はDLLにすればいいだけじゃん。
223 :
デフォルトの名無しさん :2006/05/23(火) 10:31:01
えっ そんなの当たり前じゃないのか
220の書き込みで、狭すぎる視野を持つ人から見ると 通常の視野を持つ人の意見は視野が狭く見えるということがわかった。 あとはどうでもいい。220の書き込みにそれ以上の価値はないからw
>>220 世間には職業プログラマと暇な学生しかいないと思ってるのかな。
本業の傍らでプログラムを書いて業務をまわしている人が実際は結構多いと思うぞ。
そういう人たちに、いろんな言語を学べとか、過去の資産を捨てろなんて
そんな「暇な」時間は無い訳だよ。
仕様をころころ変えるMSやそれについていってるプログラマはある意味「暇」を
もてあましているともいえるぞ。
これら「兼業」プログラマにとってとっつきやすいからVBが伸びてきたと思う。
みんなが言いたいことは 「出来ます厨」とか「VBでやるべきでない厨」とか 「エスパー厨」がウザイだけなんじゃないかと
>>225 本来は選ばれたプロフェッショナルのみが行えるべき行為を素人が中途半端なレベルでつく(r
228 :
デフォルトの名無しさん :2006/05/24(水) 09:24:50
>>226 電波な質問とか、悩み相談もうざいけどね。
質問の体を成していないのとか。
229 :
デフォルトの名無しさん :2006/05/24(水) 09:56:23
WebBrowserでボタン押したり、ラジオボタン押したりするにはどうしたらいい? テキスト入力はWebBrowser1.Document.getElementsByName で出来たんだけどボタンがおせない。 <input type=image src="/Img/bt_o_01.gif" name=checkout-balian value="お届け情報入力へ" alt="お届け情報入力へ" border=0> このボタンと <input type=radio name=card value="銀行振込(前払い)"> このラジオボタンおすにはどうしたらいいのか教えて頂戴
DOMを極める
232 :
デフォルトの名無しさん :2006/05/24(水) 11:38:02
VB初心者です。 質問なのですが、同じプロジェクトで複数のFormを使っている場合 実行を行うと今作っていたFormではなく別のFormを実行してしまいます。例えば、1-2というFormを実行したいのに 1-1を実行してしまいます。1-3、1-4を実行したい場合も1-1を実行してしまいます。なぜでしょうか? 環境はwin2000proでVB6.0を使っています。 だれか教えてください!
234 :
デフォルトの名無しさん :2006/05/24(水) 11:59:44
>>233 できました!ありがとうございます。。。
>>229 テキストでもボタンでもラジオボタンでもgetElementsByNameで取得できるはず。
ボタンはClickでOK。ラジオボタンはシラネ。
236 :
デフォルトの名無しさん :2006/05/24(水) 18:49:39
229です 解決しました。ありがとう。
237 :
助けて :2006/05/24(水) 21:39:30
リッチテキストボックスの行間を狭くしたいのですがどなたか分かる方教えてください。
ウス目で
VB6.0を仕事で使っていたのですが、 データベースとの接続はツールがしていたのでADOとかあんまり使ったことありません。 データベース関係以外は自分で書いてたんでやりたいことは大体出来ます。 VB6.0+データベース(ODBC接続)の本で良いのがあれば教えてください。 入門書探しに行ったのですがVB自体の本ばかりでデータベース関連ってあんまりないんですよね・・・。
何で今更、ADOでもOLE DBでもなく、ODBCなわけ?
書き方わるかったですね。ADOなんです。
>>243 ヒント:役立ち度は
MSDN、google>>>>超えられない壁>>>>本
質問です。 Picture1,Picture2という2つのPictureBoxを作って(プロパティは何も変えてません) LoadPictureでPicture1,Picture2にグラフィックをロードしたあと、 この2つがロードしたグラフィックが同じかどうかを判定するにはどうすればいいか教えて下さい。 Picture1.Picture = Picture2.Picture でいけるかと思ったんですが、ダメでした。
どうやって解決したかを書かない事故厨はもう来るな
248 :
デフォルトの名無しさん :2006/05/25(木) 15:22:28
環境WinXP,VB6.0Pro RichTextBox(以下リッチ)に関して質問です。 実行時のリッチ入力画面で"Ctrl+d"を押すことにより、入力カーソル位置に今日の日付を挿入するプログラムを作りたいのですが、 カーソル位置に挿入する方法がわからず困っています("Ctrl+d"とかの話は大丈夫です) 既存の方法ありましたらご教授ください。よろしくお願いします
249 :
173 :2006/05/25(木) 15:39:50
250 :
デフォルトの名無しさん :2006/05/25(木) 15:42:14
>>243 トンです。
本買えました。大体思っていた内容で助かりました。
252 :
デフォルトの名無しさん :2006/05/25(木) 22:30:17
はじめまして。春からVBをはじめた大学生です。 諸先輩方に質問がございます。 最近、関数を学んでいます。引数と戻り値があると知りました。 今は発展段階で、"配列を引数にもつ関数"という表現がありつまずいています。 この"配列を引数にもつ関数"とは一体どういうことなのでしょうか。 理解できません。できれば、簡単な例をくださるとありがたいです。
関数渡す値が引数。 その引数が配列になっているだけ。.
254 :
デフォルトの名無しさん :2006/05/25(木) 22:44:37
お手数をおかけしますが、具体例を教えてくれませんでしょうか。
255 :
デフォルトの名無しさん :2006/05/25(木) 22:47:19
質問する場所が分かりませんので、ここで質問させてください。 VBを独学で学ぶことは可能でしょうか?不可能でしょうか? やはりプログラムの学校などに行った方が・・・宜しくお願いします。
>>252 ,254
> できれば、簡単な例をくださるとありがたいです。
「できれば」ということは、できなくても構わないということなので例は無し。
> お手数をおかけしますが、具体例を教えてくれませんでしょうか。
はい、お手数なので、具体例は教えてあげません。
つーか何でもかんでもコード欲しがる奴大杉。
解説にコード添えられないとこの程度も理解できないほど理解力に乏しいなら
言語に手を出すのはやめておけ。
無知(知識が無い、少ない)は救いようがあるが、バカ(理解力が乏しい)は救いようが無いから
>>255 「学ぶ」こと自体は独学で出来る。というか独学というもの自体が文字通り「学ぶ」ことだからな。
身に付くかどうかはオマエの理解力と努力次第。
257 :
デフォルトの名無しさん :2006/05/25(木) 23:01:37
ひどいですね。 初めてここに来て全部ロムってませんがこんな感じなのかな。 コードを望んだわけではなかったのです。 失礼します。
まあ口調が偉そうな奴は例外なく無能で日ごろ叩かれてストレス溜まってる奴だから 気にせず笑って(いや何か痛い奴だなと苦笑ながら)スルーした方がいいよw
っていうかね、いまからプログラミング始めるならVBは最悪の選択の一つといって まあ間違いないと思う
やっぱ暖かくなるとレベルの低い質問者が増えるね。
何にでも初めてはあるわけで
262 :
デフォルトの名無しさん :2006/05/25(木) 23:41:15
確かにレベル低いね ここで質問しても解決しないから他行ったほうがいいね
>>254 Sub Kansuu(a() As Byte)
・
・
・
End Sub
Dim a(5) As Byte
Call Kansuu(a)
>>255 可能。
>>263 さんくす!
2ちゃんねるって優しいところですね。
>>245 です
>>247 さん、すいません。
Picture1.Picture = LoadPicture("・・・")
Picture2.Picture = LoadPicture("・・・")
のあとにif文で
Picture1.Picture = Picture2.Picture
を判定してもfalseになってしまいます。
たとえ同じグラフィックでもロードする度に取得する値が違うようです。
理由は分かりませんが。
なんで、
Picture3.Picture = LoadPicture("・・・")
って感じで一回別のPictureBoxにロードして、そのあと
Piuture1.Picture = Picture3.Picture
Piuture2.Picture = Picture3.Picture
と入れればif文判定もtrueになります。
これでいけました。
もっと簡単なやり方がありそうですが、VB初心者なんで今はこれしか思いつかないです。
長文すいません。
>>265 そんなので同じかどうか判断しては駄目だと思うが・・・
普通にバイナリコンペアしないと。
Picture1とPicture2に同じものをロードしておいて比較する意味ないだろ
268 :
デフォルトの名無しさん :2006/05/26(金) 12:59:04
ファイルとしての同一性を求めてるのか。 画像としての同一性か。 プログラム内インスタンスとしての同一性か。
質問者が解決したって言っているんだから良いじゃない。
>>268 画像の整理をしたいのでは。同じ画像が別名でよくダブる。
どんな画像か知らんが。
俺はそんなときまず同じファイルサイズのものを抽出する。 どんな画像かは言わんが
そういう整理なら、専用ツールが幾らでもあるね。
273 :
デフォルトの名無しさん :2006/05/26(金) 14:58:27
質) loadpicture()で取れる値って同じファイル参照しても値が毎回違うのはメモリのアドレス返してるから?
>>273 LoadPicture が返す値は、ロードした画像を示す
単なる「ある値」であり、その値そのものを比較したり
意味を求めたりするのは無意味。
比較してこれでいけましたって言ってるんだから良いじゃない。
>>273 ビットマップハンドル
IPictureDispの既定メンバがHandleだから
『Debug.Print Picture1.Picture』 は 『Debug.Print Picture1.Picture.Handle』 になる
あと同でもいいんだけど LoadPicture は IPicture を返すから 正しくは
Set Picture1.Picture = LoadPicture("・・・")
って書くんだよ
PictureBox.Pictureに関しては何故か Set が省略できる謎仕様だ
278 :
デフォルトの名無しさん :2006/05/27(土) 00:47:01
VB6でWinsockを使ったソケット通信で、 サーバ側PGの受信待ち時間を○秒って指定できるんですか? できるならやり方教えてください。 お願いします。
>>276 別に謎じゃないよ。
VBの暗黒面に近づいてるのは確かだけどw
'Form1
Private Sub Form_Load()
Dim hoge As New CHoge
hoge.TextBox = Text1
End Sub
'Class Module "CHoge"
Private mTextBox As TextBox
Public Property Let TextBox(txt As TextBox)
Set mTextBox = txt
mTextBox.Text = "hoge"
End Property
プライドも何もかも捨ててお願いがあるんですが、 どなたかヒントください…orz -1- 長方形を選択したとして実行する。 その右端から、縦と横を入替えて、値を表示するプログラム。 -2- 行列A,Bが、セル範囲に入力されているとする。 この行列の積を求めるプログラムを作る。 ※シートマクロで、行列範囲を表す3つの範囲を書くスペースがあったとして、 一つ目がA、二つ目がB、三つ目(これはセルの左上さえ入力されていればいい)を、 入力する部分を作っておき、行列ABの答えを、三つ目のセルを左上として、行列を作ること。
280ですが、なかったことにしてください…。 無駄な書き込みしてすいませんでした。
VB2005 Expressの事で質問したいのですが、ここで良いでしょうか?
ここはVB6にしがみついて死守するスレなのでやめとけ
>>284 と言っても2005のスレが無いようなのですが・・・・
取り敢えずぐぐります
>>285 2002, 2003, 2005はVB.NETの括りになる。
2005からマーケティング上の理由でVB.NETの名称は使わなくなったが .NET Framework上で動く同じ範疇のもの。
というわけで つ VB.NET質問スレ (Part15)
>>286 なるほろ、そういう事でしたか。thxです
すでにあるフレームに新しくコントロールを 追加するときは、どうしたらいいですか? どうしても親のフォームの方に載ってしまいます。
>>288 Set コントロール.Container = Frame1
>>286 「マーケティング上の理由」ってどんなの?
291 :
デフォルトの名無しさん :2006/05/28(日) 11:34:02
VB5の開発環境にVB・.NETを含むVisual Studio 2005 Express Editionを インストールして同一のマシンでの開発環境の混在は可能でしょうか?
>>291 謹んでお答えしましょう。
一分で調べがつくようなことを人に尋ねないと気がすまないお方は
プログラミングという行為そのものから撤退すべきです。
ご自身のためにも、周囲の人たちのためにも。
-- 以上 --
>>289 ありがとうございます。
すでにフォーム上に存在しているコントロールを、
マウスのドラッグなどでフレーム内に移せないでしょうか?
ドラッグなどして移せればできる。移せなければできない。
>>295 その様に作ればできる。
一行でできる方法はない。
うーん。 では、後から気が変わっても、 簡単にフレームに入れることはできないんですね。
>>295 フォーム上にあるコントロールを切り取ってフレーム上に貼り付ければ移せれる
301 :
デフォルトの名無しさん :2006/05/29(月) 22:11:13
このスレレベル低いね
304 :
デフォルトの名無しさん :2006/05/30(火) 00:07:50
VB6で多言語対応のダイアログを作成したいんですが、どうすればいいんでしょうか? VCやVB.NETのように言語別にダイアログを作成するのは無理なんでしょうか?
ちゃんと方法が書かれてあるが?
VB6&XPで(画面全体の)スクリーンショットとりたいんだけど MSDNで書かれている keybd_event(VK_SNAPSHOT, &H79, KEYEVENTF_EXTENDEDKEY, 0) keybd_event(VK_SNAPSHOT, &H79, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0) をやってみてもフォーカスがあるフォームのショットしか取れん 他のサイトでも2番目の引数が0とか1とかバラバラに説明されてるからようわからん ↑の方法だとフォーカスがあるフォームのショットしか取れんの??
2番目のパラメタは、MSDNによれば、"This parameter is not used."なのだ。
not used っちゅーことは使わないってコト? ならフォーカスor全体を判別しないってことなのかな?
keybd_event(VK_SNAPSHOT, 0x79, KEYEVENTF_EXTENDEDKEY, 0); keybd_event(VK_SNAPSHOT, 0x79, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); VC6,W2Kで試したけど、ちゃんと全体のSS撮れるよ。 まぁ、PrintScreenキー(Alt無し)をシミュレートしてるんだから当たり前だし、 Altを押しながら実行すれば、アクティブウィンドウのSSになる。
notebookだからfnキーを押しながらじゃないと無理っぽい fnキーの仮想コード調べたけどよくわからんかった ってかあるのか?
>>311 そのコードを調べるプログラムなんてVBなら5秒で書けるが。
keydown とか keypressイベとかでは取れないよ
Fnキーってハードウェアレベルでエンコードされちゃってるんじゃないかと思うが。。
ハードウエア情報を取得し型式データベースと照合して ノート型モデルかどうか判別するという洒落。
うちのはノートじゃないがFキーあるぞ?
強制的にキーコード送ってるのだからノートとかって関係ないんじゃまいか?
うちなんかノートじゃないのにFn(n:1~12)キーがある
Fnってのはファンクションキーのことではないと思われ
PageUp,PageDownとかがが上下左右キーと同じに割りつけてあるときに Fnキーと一緒に押さなければならないキーボード(Fnキー)を指してるんではないのか?
多くのノートPCに使用されているキーボードでFnキーはコントローラのレベルでキーコード変換がされているのでFnキーの取得はCPU側からはできない
323 :
デフォルトの名無しさん :2006/05/30(火) 13:12:28
VBからAccessのレポートのプレビューを見たいのですが、 うまくいきません。 Set ap = CreateObject(
324 :
323 :2006/05/30(火) 13:15:00
うぉ、途中で切れた。Σ(゚д゚;) Set ap = CreateObject(”Access.Application.9”) ap.OpenCurrentDatabase( mdbName ) ap.DoCmd.OpenReport( reportName, acViewPreview ) ap.CloseCurrentDatabase ap.Quit っとこんなソースで、 acViewPreview をacViewNormal にすると印刷はできるのですが、 プレビュー時には何も起こらないんです。
すぐCloseしたりQuitするから何も起こらないように見える プレビューしたいならQuit呼んじゃだめだよ プレビューならViewer的なAccessアプリケーションをつくり 外部EXEとして実行をする方がリソース開放とかいろいろ考えなくて楽だよ
>>324 終了するまでまってQuitするにはこんな感じでいけたと思う。
While Not ap.ActiveSheet Is Nothing Wend
ap.Quit
>>326 すまん、例がExcelだった・・・まぁ同じ感じで出来ると思うから
328 :
323 :2006/05/30(火) 15:20:02
すぐ閉じてたのが原因だったのですね。ありがとうございます。
>>326 さんの外部EXE形式のViewer作戦を試してみたいとおもいます。
>>327 さんのは「ap.ActiveSheet」でひっかかりました。_| ̄|○
329 :
デフォルトの名無しさん :2006/05/30(火) 15:21:05
駅を逆に入力する
331 :
デフォルトの名無しさん :2006/05/30(火) 16:10:36
>>330 やはりそういった方法しかないのでしょうか?
>>329 ・駅名を取得する
・2つの駅間の時間を計算する
せめてこの2つはFunction化しないことには、
>>330 が最小手順の解決方法になりますよ。
>>330 またはStartStation と EndStation の値を入換える
If StartStation > EndStation Then
xx = StartStation: EndStation = StartStation: StartStation = xx
End If
XXからYY表示が逆になるのがいやなら Dim fStartStation As Integer Dim fEndStation As Integer fStartStation = StartStation: fEndStation = EndStation If StartStation > EndStation Then fStartStation = EndStation: fEndStation = StartStation End If '出発駅から目標駅までの時間を計算する。 For K = fStartStation To fEndStation - 1
336 :
デフォルトの名無しさん :2006/05/30(火) 19:38:35
>>332-334 そういう考え方があるんですね!
大変勉強になりました。
ありがとうございます。
338 :
デフォルトの名無しさん :2006/05/31(水) 00:08:52
質問なのですが・・ accessをインストールせずにVBだけでaccessのDBファイルを 最適化できるものなんでしょうか? access環境のないPCがないので実験不可能です。 すいませんがどなたかお教え下さい・・・ VBはSP6 OSはwin XPです。
>>300 できました!!
ありがとうございます。
>>311 Fn押しながらPrint Screenだと、
それにAlt組み合わせるのできないかも。
うちのDynabookだとできなかった。
>338 出来る。 最適化どころかMDBに対してはほとんどの事が可能。
どうやってやるんですかとか聞いてきそうだな。
しかも具体的なコードを書いてくださいとか言ってきたりしてw
なので先に言っておく
>>338 、とりあえずやり方は自分で調べろ。
それでもどうしても解らなかったら、解った範囲でやり方やコードを書いて再質問すること。
丸投げとか、1週間もしないうちに再質問したりとかしないでね。
>>341 DAO 関連って、最初っから全部入ってるんだっけ?
>>343 いやそうじゃなくて、Windows をインストールした直後から使・・・って、
VB入れたらインストールされるんだっけか。
・ADO XPと2003には2.6のライブラリが最初から入ってる 2000は2.1が最初から入ってる ・JRO XP、2003、2000とも2.6のライブラリが最初から入ってる ・ADO Ext. XP、2003、2000とも2.7のライブラリが最初から入ってる 故にVBのRumtimeはADO関係同梱版でなくてもいい しかしMDACは最新のを入れた方がよい ・DAO どれにも最初から入ってない 再配布可能の3.5を入れた方がよい
>>345 ㌧。
しかしJROって初めて聞いた。
ジャロ?w
最近VBScriptを覚え始めた者です フォルダ選択ダイアログは出せるのですが ファイル選択ダイアログって出せるんでしょうか? 教えてください
>>336 '出発駅から目標駅までの時間を計算する。
K = 0
Do
Jikan = Jikan + TrainTime(K)
If K = StartStation - 1 Or K = EndStation - 1 Then
Jikan = 0
End If
K = K + 1
Loop While (K < StartStation - 1 Or K < EndStation - 1)
Jikan = Jikan + TrainTime(K)
Msg(ry
変数増やしたくなければこっち使うべし
あと配列は基本0から使おうな?
'目的地が配列の何番目かを求める。
Target = Text2.Text
K = 0
Do
EndStation = K
If Target = Station(K) Then Exit Do
K = K + 1
If K = 8 Then
MsgBox Target & "!?" & vbCrLf & "そんな名前の駅はありません!"
Exit Sub
End If
Loop
なら0から使っても大ジョブ
Train Kept A Rolling
>>349 配列を0からにしないといけない明確な理由は?
変数を減らすために最初の練習用?サンプルを大幅に変更する意味はなに?
>>351 俺は349じゃないけど、配列のインデックスの開始を0以外にする、なんて
VB独自の作法は使わない方が無難。
そんなもんコード読む人間(もちろん未来の自分自身も含む)を不要に混乱させるだけ。
配列の開始は常に0から、を暗黙の前提として期待できる方がコードは遥かに読みやすい。
それにまあ頭の悪いVB厨だと思われるの嫌でしょ?w
>>352 Basicなら前提として1からと決まっている。
0から開始するなんてVB独自の作法は使わないほうが無難。
キチガイだなw
Cは0から Basicは1からがデフォ
For も1から回すの?
おいおい配列のインデックスは古いBASICもVBも指定しなければ0からだろ。 CやVB.netは0固定だし、わざわざ1からにする理由は無いぞ。
最新の国際標準は1からですが、
スマソ。途中で送信された。 最新の国際標準は1からですが、 個人的には0からの方がいいと思います。
>>357 MS$も配列の開始を統一してないし、一般(初心者)に開始は1からのほうが解りやすいと思ってみたり・・・
ただ、
>>352 が言っているように昨日の自分は他人の自分で、未来の為に統一しといた方がいいと俺も思う。
俺は0からに抵抗無かったからピンとこないんだけど、初心者には1からの方がわかりやすいのかな。 実際の所どうなんだろ。 後ひまわりとか日本語で書けるから初心者向きとか言ってるけど、それもどうなんだろ。 やっぱり初心者はアルファベット難しいのかな。
0オリジンと1オリジンの宗教戦争をここでやっても仕方が無かろう
363 :
349 :2006/06/02(金) 14:02:05
こんなとこまでゆとり教育か
あ、いや煽りなのは分かってるがどうしても言ってみたくなった、許してくれ
>>351 煽りでは無く質問とみて返答させていただきます。
>配列を0からにしないといけない明確な理由は?
俺はそう教えられてきたし他の言語も触ってるんで、そのほうがいいと思っただけ。
>変数を減らすために最初の練習用?サンプルを大幅に変更する意味はなに?
俺はわざわざユーザーが指定した出発駅と目標駅を入れ替えてFor文使うより、
Do使って二つの駅の時間差合計したほうが自然だと思ったからこうした。
たしかに初心者には理解しづらいコードかもしれんが、こういうやり方もある事を示したかったし
これを期にDo~Loop構文覚えてもらえれば幸いだと思う。
「その”自然”とか”配列は0から”とかはお前の価値観だろう」って言われればそれまでだが、
俺はこのほうがプログラマには読みやすいと思ったからこうした。
スレ荒れるのは忍びないので宗教戦争はこのくらいにしておくれ
364 :
351 :2006/06/02(金) 14:41:00
>>363 俺はどっちでもいいって考えだから質問してみただけなのに・・・書き方が悪かったのか
初心者うんぬんは解りづらくしなくてもと思ったからついでに聞いてみた。
みなさん、これで終了でよろしく。
メニューを開いて、ポイントしている項目を取得する方法はありますか? たとえば、 ファイル ・・・新規作成 ・・・名前を付けて保存 ・・・上書き保存 とかあって、ファイルをクリックしてメニューだして、マウス動かして、 カーソルが「名前をつけて保存」の上にあったら、それを取得する方法です。
>>365 今VB動かない環境なので確認出来ないけど、
Mouse_Move とかでメニューのプロパティの .Text とか見たら?
>>366 それは無理だよ。メニューポイント中はmoveイベント発生しないよ。
>>367 そうなんだ。ゴメン。
じゃぁ、メニューの上でマウスカーソル動かすと、ステータスバーに
それが出てくるくる変わるやつはどうやってるんだろ?
たしか、サブクラス化して読んでた例があったような。
WM_MENUSELECTを捕まえればいいんじゃね?
なんかみんなホントすげぇな 何年くらいかかるの?
>>373 質問に答えられるようになるのにじゃね?
もしそうだったら、人それぞれ。知っていること(やったこと)なら1日でも可能(w
377 :
376 :2006/06/03(土) 13:22:17
シートコピーすりゃ良かったのか くだらない質問申し訳ない
VB6のIDEで、現在プロジェクト内で作成している関数一覧を表示し、ダブルクリックで その関数の場所に飛ぶといったことはできるのでしょうか? また、それが可能な場合、いくつかの関数を一まとめにして、階層的に表示することは 可能でしょうか? イメージとしては下のように表示され、ダブルクリックでその関数のところを編集できると いった形です。 ┬関数A ├関数郡B │├関数B-1 │└関数B-2 └関数C
関数村字関数
380 :
デフォルトの名無しさん :2006/06/04(日) 02:33:09
Excel VBAについての質問です。 文字列と数字列が規則的に混在する文字列中から文字列のみを抜き出すのって 可能ですか? 具体的に・・・ "アイウエオ0123" "カキクケコ4567" といった"全角文字列"+"全角or半角が混在する数字列"といった組み合わせ なのですが、その中から"全角文字列"のみを抜き出すには、どういった方法 がありますでしょうか?
381 :
380 :2006/06/04(日) 02:53:30
うあ!?すいません。sage忘れてました(^^;;; あ、ちなみに文字+数字の文字列は、文字数が決まっていません。 "さしすせそたちつてと12345" ・・・とか・・・ "なにぬ9876543210" ・・・ってのもあったりします。
Replaceで数字だけ置換しちゃうとか ループ回して一文字ずつ数字かチェックして数字でないのだけ繋げていって文字列にするとかでいいんじゃね? あと、sage忘れって、ここって別にsage進行じゃないでしょ? ageていいんじゃないの。むしろ、質問はageたほうがいいのでは。
383 :
380 :2006/06/04(日) 03:24:02
あ、ageてよかったんですね(^^; 失礼しましたm(_ _)m あ、そか、Replaceか! Loopで一文字づつ削ってたんですけど、あまりにもスマートじゃない気がして たんで・・・助かりましたm(_ _)m 早速やってみます。
>>380 A ループを使ってReplace関数で数字を空文字に置換
B 正規表現(RegExp)で数字以外を抽出
C 1文字ずつチェックしIsNumeric関数がFalseを返した文字を繋げる
あたりが基本的な処理だが、数値・数字は必ず末尾数桁のみというなら
D 後ろからループ回して1文字ずつIsNumericでチェックし、Falseになった文字位置までをLeft関数で抽出
の方がいいかもな。
まあ正規表現でも数字が1カ所にまとまってるならs/[\d0-9]//一発で終わりだけど。
>>378 誰かが作ったアドインで、そんなのがあった様な気がする。
ググってみては。
386 :
デフォルトの名無しさん :2006/06/04(日) 09:58:34
環境VB6 SP6 XP SP2 別スレつくるAPIで 内部でFunction関数つかったらソフトがおちるんだが・・・・ こんなやついるの? ググで調べても落ちる情報はない感じ おとなしく.NETでソフト書いたほうがいいのかいな? ドトネト使うほどのソフトじゃないので好きなVBでやってたんだが・・・
ホスト規制とかされてんじゃないの
>>386 「別スレつくるAPI」て何?
2chのスレを作る関数??
>>386 VBはマルチスレッドに対応していない。
> VBはマルチスレッドに対応していない。 捕捉すると、スレッド自体は作れてしまうので VBでマルチスレッドが可能だと勘違いする奴も多いが スレッドを作れることと、マルチスレッドで処理を行えることは同義ではない。 ぶっちゃけ言うと、VBで作ったスレッドで行える処理はものすごく限られてる。 アレやったら落ちる、コレやったら固まるって事だらけ。 何をしたら落ちるかは明確になってる部分もあれば不明瞭な部分もある。 とにかく対応していないんだから落ちたらそういう物だと思うしかない。 例えば防水仕様じゃない腕時計に、水を1滴垂らしたからと言って いきなり壊れるとは限らないが、水を被って壊れても 「まー、防水じゃないんだからしょーがないな」って感じだろ。 出来ればVB使いたいにしても、.NETの選択肢があるならそっち使え。
391 :
デフォルトの名無しさん :2006/06/04(日) 13:54:36
>>389-390 おk
じゃぁそうするかww
おとなしくドトネトでやるっす。
まぁ、できないかな?
って感じの疑問だったんで元々選択肢にはいれてたんで。
サンクスでした
>>391 昔のDDJ辺りでスレッド作ってやっちゃいけない事集みたいなのが有った気がする
というか出来る事集だったかな
ThreadID1 = GetWindowThreadProcessId(h, ByVal 0&) この文の最後のByVal 0&の0&ってどういう意味なんですか? ただの0とは何か違いがあるのでしょうか?
>>394 型宣言文字
&はLong型をあらわす。
>>394 宣言が As Any になってるので、「値としてのロングのゼロ」を渡すと明確に書いてる。
397 :
394 :2006/06/05(月) 08:53:49
>>395 さん
>>396 さん
ありがとうございます。理解できました。
GetWindowThreadProcessIdのVB6での宣言を
調べてみると
Declare Function GetWindowThreadProcessId lib "user32.dll" _
(ByVal hWnd As Long, lpdwProcessID) As Long
となっていました。第二引数をAs Anyというより型を宣言しないでVariantに
しているようです。それで0&という風にちゃんと型を指定していたのですね
しかし、それならどうして宣言時にAs Longとしておかないのでしょうか?
いちいち呼び出すときに&を明示しなくてもよくなると思うのですが、
何か事情でもあるのでしょうか.
>>397 その引数は、本来「プロセスIDを受け取る変数のアドレス」を設定する物。
でも、スレッドIDだけが知りたい場合、ゼロを指定するので、そうなってる。
399 :
394 :2006/06/05(月) 13:10:29
400 :
デフォルトの名無しさん :2006/06/06(火) 23:42:32
Command関数のことでちょっと ①hoge.exe ABC XY ②hoge.exe "AB C" "X Y" ③hoge.exe "AB C" XY ④hoge.exe ABC "X Y" ってなかんじで起動したときに①~④全部二つの引数として取得したいんだけど、なんかいい方法ないっすか? 要は、""で囲んだ文字列は一つの引数として取り出したい よろしくおねがいしまっしゅ!
>>400 普通に文字列操作
サンプルも腐るほど転がってる
すみません、誘導されてきました。excelVBAで質問なのですが as0125えet後Etたッワ のような前半が半角、後半が全角の ランダムな文字列から前半と後半を分離しようと思うのですが ASC(2バイト系文字)がおかしくなってしまって困っています いったいどう対処すればよいかどなたかアドヴァイス頂きたいです。
403 :
400 :2006/06/07(水) 01:01:26
>>401 おっしゃるとおりです。
探すの面倒だったから自作した、、
まぁ、要はこういうことをしたかったわけで・・・なんかそういうAPI関数みたいの無いかなぁと
Private Function getArgument(ByVal command_line As String) As Variant
command_line = Trim(command_line)
If "" = command_line Then
getArgument = Empty
Exit Function
End If
Dim retArray As Variant, c As String, pre As String, flag As Boolean
ReDim retArray(0)
flag = False
For i = 1 To Len(command_line)
c = Mid(command_line, i, 1)
If """" = c Or flag Then
If Not ("""" = c) Then retArray(UBound(retArray)) = retArray(UBound(retArray)) & c
flag = IIf(flag And """" = c, False, True)
Else
If " " = c And Not (" " = pre) Then
ReDim Preserve retArray(UBound(retArray) + 1)
ElseIf Not (" " = c) Then
retArray(UBound(retArray)) = retArray(UBound(retArray)) & c
End If
End If
pre = c
Next
If IsEmpty(retArray(UBound(retArray))) Then ReDim Preserve retArray(UBound(retArray) - 1)
getArgument = retArray
End Function
> API関数 "みたいの"ならある。
C/C++ のargsだとその辺のコマンドラインの解析はやってくれてるけど あれはCRTがやってるの?それともAPIレベル?
CommandLineToArgvWというAPIが無いわけでもない。 けど、だいたいはCRTが処理しているはず
>>402 何がしたいのかサッパリ分からんが、一文字取り出してから
StrConv でシフトJIS文字にしてバイト数を見るとか。
408 :
デフォルトの名無しさん :2006/06/07(水) 17:05:28
初心者質問だけどカンベンしてくれ・・ 会社で今、まじ困ってる。取得した日付(第二引数に入力された値)が、 ちゃんとした日付型かどうか判定(文字とかが入ってたらだめ)するには、 どうすればいい??どんな関数を使えばいいんでしょうか??
IsDate()
410 :
デフォルトの名無しさん :2006/06/07(水) 18:39:24
初歩的な質問かも知れないけど教えてください。 異なる2つのセルの値を比較して、値が異なっているなら 両方のセルに色をつけるという関数は作成可能でしょうか。 VBAマクロでは簡単に作れたのですが、ユーザー関数で作成したいんです。 宜しくお願いいたします。
おーとめーそんで終わりだろ。
関数式の入ったセルに値を入力されても泣かないこと
414 :
デフォルトの名無しさん :2006/06/08(木) 02:14:37
エクセルのVBの仕様なのですが、手持ちの書籍や、参考になるサイトが少なく 困ってることがあります。 QueryTablesなのですが、 With ActiveSheet.QueryTables.Add(Connection:= _ url, Destination:=Cells(row_num, 1)) .RefreshStyle = xlInsertDeleteCells .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "19" .Refresh BackgroundQuery:=False End With このように記述して、インターネット上から株価のログを取得しています。 しかし、繰り返し処理をしているうちにだんだん重くなってしまい、 固まってしまうこともしばしばです。 何か良いアドバイスをください。。
415 :
デフォルトの名無しさん :2006/06/08(木) 12:13:26
エクセルのVBでの質問です。 ある課題なんですが、「与えられた半角文字列中に含まれる、最初の数字列を抽出し ろ」 という事なんですが、使用する関数はmidのみと指定があります。 そしてfor-next,if関数などを使用することとあります。 アルゴリズムの勉強らしいのですが、色々考えましたが分かりません。 教えてください。 EX, 文字列は " aBc 011 122 Z" 実行結果→011
midのみと言いながらfor-next,ifなどを使えという時点で問題がおかしい
文字列操作系の関数はMIDのみってことじゃない?
for-nextやifは関数ではないので 問題はおかしくない。
for-next,if関数とかいてある時点で問題がおかしい
>>415 先頭から一文字づつ取り出して、最初に数値が出てきたら、
数値じゃなくなる迄別変数に追加する。
としか言い様がない。
423 :
デフォルトの名無しさん :2006/06/08(木) 14:01:19
vbからデータベースに接続できないときにイベントビューアーに エラーログを出力をしたいんだけど、どうやればよいのでしょうか?? 誰か助けてください(__)
424 :
423 :2006/06/08(木) 14:09:25
自己解決しますた!!
塩まいとけ
>>424 どうやって?
解決策を書く気は全くなし?
429 :
デフォルトの名無しさん :2006/06/08(木) 15:20:06
418です >420 ありがとうございます でもうまく書けません 今forで1つずつ取り出しをして それをifや do loopを 組み合わせてるんですが だめです できれば 詳しく教えて下さいm(__)m
>>429 あの文章よりもどう詳しくしろと言うのか。
もっとやさしい課題から理解しないと無理では
433 :
デフォルトの名無しさん :2006/06/08(木) 16:04:42
初歩的な質問だけど、お願いします。 C:\HOKYU.INI このファイルがあるかどうか判定するには どのような関数を使えばよいのでしょうか?
434 :
423 :2006/06/08(木) 16:10:29
VBScriptのオブジェクトを使って Dim Wsh Set Wsh = CreateObject("WScript.Shell") Wsh.LogEvent 1, "XXXのエラーです" とすることで、 イベントビューアのアプリケーションログにエラーが書き込まれます。 ↑ だって、コピペだけど
>>429 開始フラグクリア
数字列変数クリア
1.1文字取り出す
2.文字の判断
2-1.数字文字である
2-1-1.開始フラグが立っている 数字列変数に追加 1.に戻る
2-1-2.開始フラグが立ってない 数字列変数に設定 開始フラグを立てる 1.に戻る
2-2.数字文字でない
2-2-1.開始フラグが立っている 終了
2-2-2.開始フラグが立ってない 1.に戻る
437 :
デフォルトの名無しさん :2006/06/08(木) 18:58:17
>420 どうか,コ-ドを お願い致します m(__)m m(__)m
>>437 バグってても、コンパイルエラーが起きててもいいから、
自分ができるところまで書け。お前が与えられた課題だろうが。
440 :
デフォルトの名無しさん :2006/06/09(金) 09:23:58
>>6 を見るとVB6はこれからも業務で使われ続ける流れになるのかな?
それとも、COBOLみたいなことになる?
ぶっちゃけるとそろそろ2005系に移行したほうがいいのかな?
442 :
デフォルトの名無しさん :2006/06/09(金) 11:57:47
まぁ保守がメインになるんじゃない? 俺は色々なことがラクになるから2005つかってるけど
443 :
デフォルトの名無しさん :2006/06/09(金) 12:52:08
>>442 何が楽になりましたか?
COBOLみたいなことになるなら6ONLYって訳にはいかないかなと思って…
>使用する関数はmidのみと指定 誰もやらないし暇だったので(w もうちとスマートに数字文字判定部分出来るのか? Const Ex As String = " aBc 011 122 Z" Dim i As Integer Dim f As Boolean Dim c As String Dim s As String Debug.Print "[" + Ex + "]" f = False '一応初期化 s = "" '一応初期化 i = 1 Do While Mid$(Ex, i, 1) <> "" c = Mid$(Ex, i, 1) Select Case c Case Is = "0": s = s + c: f = True Case Is = "1": s = s + c: f = True Case Is = "2": s = s + c: f = True Case Is = "3": s = s + c: f = True Case Is = "4": s = s + c: f = True Case Is = "5": s = s + c: f = True Case Is = "6": s = s + c: f = True Case Is = "7": s = s + c: f = True Case Is = "8": s = s + c: f = True Case Is = "9": s = s + c: f = True Case Else: If f Then Exit Do End Select i = i + 1 Loop Debug.Print "[" + s + "]" End Sub
IsNumeric
446 :
デフォルトの名無しさん :2006/06/09(金) 14:37:55
>>444 それならcase文はこれだけでいいだろ
Select Case c
Case "0" To "9": s = s + c: f = True
Case Else: If f Then Exit Do
End Select
447 :
デフォルトの名無しさん :2006/06/09(金) 14:38:28
>>445 関数はmidだけなんだとさ、意味ない制限だな
448 :
デフォルトの名無しさん :2006/06/09(金) 14:39:36
>>415 の関数制限なくしたら
お前らならどう実装する?
449 :
448 :2006/06/09(金) 14:50:17
おれはこうした Const Ex As String = " aBc 011 122 Z" Private Sub Form_Load() Debug.Print "--------------------" Debug.Print "[" & Ex & "]" Dim arr() As String arr = Split(Ex, " ") Dim var As Variant For Each var In arr If IsNumeric(a) Then Debug.Print "[" & a & "]" Exit Sub End If Next End Sub
>>446 やっぱりなぁ・・・文字でもOKだったか
>>449 スペースで区切られている保証はないかも・・・まぁ課題は区切られているけど(w
452 :
デフォルトの名無しさん :2006/06/09(金) 17:11:14
>>451 文字列の仕様に基づいてsplitの区切り文字変えればよかろ
まあ、スペース区切りの”囲いとかだったらちょっと処理足りないが
>>452 区切り文字が無かったら駄目でしょってこと
454 :
デフォルトの名無しさん :2006/06/09(金) 17:52:25
初心ですいませんが、質問させてください。 N88BASICでいう A$(0)="nihon" A$(1)="amerika" A$(2)="chuugoku" はVBだとどうのような配列で作ればよいのでしょうか? あと、VBで define A(0)=12.5 みたいなのはありますか? よろしくお願いします。
const
APIのSetTimer関数でタイマー処理するとき P-Codeコンパイルじゃないと即落ちするんですけど そんなもんでしょうか? CallBack関数内の処理をほとんど空にしてもなります。
>>458 コピペするだけで現象が再現する必要最低最小限のコードは?
>>459 form1にボタンを2個とラベル1個を貼る。どれもプロパティは変更なし。
-------------------form1--------------------
Option Explicit
Private Sub Command1_Click()
Dim timeCapa As TIMECAPS
Call timeGetDevCaps(timeCapa, LenB(timeCapa))
timeCapMax = timeCapa.wPeriodMax
timeCapMin = timeCapa.wPeriodMin
'開始時間取得
staMillSec = timeGetTime()
'タイマー起動
Call timeBeginPeriod(timeCapMin)
TimerID = timeSetEvent(timeCapMin, timeCapMin, AddressOf TimerCallback, 0, TIME_PERIODIC)
End Sub
Private Sub Command2_Click()
'タイマー終了
Call timeKillEvent(TimerID)
Call timeEndPeriod(timeCapMin)
End Sub
-------------------------------------------------------
-----------------------標準モジュール---------------------------- Option Explicit '時間取得 Public Declare Function timeGetTime Lib "winmm.dll" () As Long Public staMillSec As Long Public curMillSec As Long 'タイマー Public Declare Function timeBeginPeriod Lib "winmm.dll" (ByVal uPeriod As Long) As Long Public Declare Function timeEndPeriod Lib "winmm.dll" (ByVal uPeriod As Long) As Long Public Declare Function timeGetDevCaps Lib "winmm.dll" (lpTimeCaps As TIMECAPS, ByVal uSize As Long) As Long Public Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long Public Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long Public TimerID As Long Public Const TIME_PERIODIC = 1 ' program for continuous periodic event Public Type TIMECAPS wPeriodMin As Long wPeriodMax As Long End Type Public timeCapMin As Long Public timeCapMax As Long 'TimerCallback Public Function TimerCallback(ByVal uID As Long, ByVal uMsg As Long, _ ByVal lngUser As Long, ByVal lng1 As Long, ByVal lng2 As Long) As Long curMillSec = timeGetTime() - staMillSec '開始からの時刻を取得 Form1.Label1.Caption = CStr(curMillSec) '表示 End Function
462 :
458 :2006/06/10(土) 11:09:12
どうもコールバック関数内でtimeGetTime()関数を呼び出すのがひっかかってるみたいで、 変数の値を変えるとか、フォームのラベルを書き換えるのはOKみたいなので 関数を呼び出すことに問題があるようです。
timeSetEventのコールバック呼び出しって、呼び出しもとのスレッドが違ってなかったっけ?
普通にタイマコントロール使えばいいじゃん。
465 :
458 :2006/06/10(土) 11:43:41
>>464 MIDI再生のためにインターバル1msで使いたいわけですが
最近はタイマーコントロールでも大丈夫なんすかね?
まあ、それはやってみればいいんですが。
そもそもWindowsで、協調しながら1ms単位の行動を起こすことは不可能。
467 :
458 :2006/06/10(土) 12:40:12
>>466 精度が悪いのは当然承知の上で、可能な限り短い割り込み間隔が欲しいわけです。
となるとやはりマルチメディアタイマーかなと。
>>465 マルチメディアタイマ使っても、正確な1msなんて不可能。
WindowsはリアルタイムOSじゃないから。
>>468 1msだと負荷がかかりすぎて落ちるとか言うならともかく、正確に1ms出る出ないは今直接関係なくないか?
数十msもブレるわけじゃないんだし。
興味出たので調べてみたが、 googleで「vb マルチスレッド timeSetEvent」で検索したとき 最初の方に出てくるいくつかのサイトに参考になりそうな記載があるようだよ
誰かコード試した? 私も試したいけど、今起動中のXPにはVB入ってないんだよな・・・_| ̄|○
472 :
458 :2006/06/10(土) 15:29:12
みなさんありがとうございます。
>>470 さんのおっしゃる通りぐぐってみました。つまり、マルチスレッドになることに問題が
ありそうだということですね。
タイマーなのでマルチスレッドでformの移動などにほぼ影響されずに動いて欲しかったのですが、
CreateThread関数を使って生成されたスレッドと同じように使用に制限があるということですか。
P-Codeでもformを頻繁に移動するなどすると終了時にエラーが出ますが、業務用でもないので
P-Codeコンパイルで当面いってみます。
473 :
デフォルトの名無しさん :2006/06/10(土) 19:04:45
dim a as integer dim b as integer dim c as double b=1 a=3*b+1 c=2.6 if a>c then msgbox "OK a=" & a else msgbox "NG a=" & a endif というプログラムを作りました。 IDE環境では、当然OK a=3を表示したのですが、 実行ファイルにコンパイルすると、 NG a=0となってしまいます。 何かおかしい点はありますか?
474 :
デフォルトの名無しさん :2006/06/10(土) 19:05:17
dim a as integer dim b as integer dim c as double b=1 a=2*b+1 c=2.6 if a>c then msgbox "OK a=" & a else msgbox "NG a=" & a endif というプログラムを作りました。 IDE環境では、当然OK a=3を表示したのですが、 実行ファイルにコンパイルすると、 NG a=0となってしまいます。 何かおかしい点はありますか?
475 :
デフォルトの名無しさん :2006/06/10(土) 19:07:51
dim a as integer dim b as integer dim c as double b=1 a=2*b+1 c=2.6 if a>c then msgbox "OK a=" & a else msgbox "NG a=" & a endif というプログラムを作りました。 IDE環境では、当然OK a=3を表示したのですが、 実行ファイルにコンパイルすると、 NG a=0となってしまいます。 何かおかしい点はありますか?
Visual Studio 6.0の開発環境を Windows xp home editionに移植したいのですが、 このときVisual studio 6.0をCDからインストールして そのStudioを最新版にするときの手順を教えてください。 またVB6.0のUpdateで最終形態にしたいのですが どれとどのパッチを落としたらよいのでしょうか? よろしく お願いします
落とそうとするパッチを全部書けば選んでもらえると思う
>478 3回書き込みはIEでリロードしたんでしょ。 XPでまともに動かないのはIISアプリケーションをデバッグする場合位かな。 (2000でも動かんが。XP、2000とも回避策があるのだが) とりあえず、VB4の開発環境をNT4.0上で動かした時ほどの問題は出ない。 >476 MSのサイトで検索して、更新日付順に並べたら分かるよね。 手順なんて説明するほど難しい所は何も無い。
VB6入れて、SP6a入れておしまい、じゃないの?
VB6とVB.netの違いについてお伺いさせてください パソコンソフトを作れるのはもちろんだと思いますが パソコン外の制御系ソフトウェア、例えばビル監視システムのソフトウェア等 つまりファームウェアを作成する場合は6.0と.netではどちらを活用するべきなのでしょうか?
>>483 VBだと簡単にUIが作れるみたいなので挑戦しようと思っています。
ので、できればVBのどちらかでやるつもりです。
VB6.0は入手性に難があるぞ
あ、そうなんですか; 本屋で軽く立ち読みしたら.netはパソコン用ソフトウェアを簡単に・・と書いてあったので ひょっとしてパソコン用ソフトウェアに特化したものが.netで、パソコン用以外での組み込み系ソフトウェアにも応用が利くのが6.0だと思っていたので確認の為に聞いてみました 現在は.netしか入手できないのならどちらにも応用効くって事ですよね
>>482 UIはVBで、制御部分は生CでDLLを書けばいい。
しかしどう考えてもネタとしか思えない質問によく馬鹿正直に答える気になるな。 476とか482みたいな質問のことを言っているのだけど 質問してる奴はそういう馬鹿なくせに、いや馬鹿故に「教えたがり」な君をみて一人密かに ほくそ笑んでいることと思うぞw
>>488 質問が素晴らしかろうが、糞だろうが、
自分の気が向いたら適当に答えてるだけ。
VBで作ったプログラムからVBで作ったDLLを呼び出しています。 Win2000 では正常に動作したんですが、WinXP SP2 にプログラムを インストールしたところ、 >実行時エラー'48': ファイルが見つかりません:xxxx.dll (←自作のDLL) というエラーが出るようになってしまいました。 .EXE と .DLL は同一ディレクトリにあり、念のため、PATHも通してあります。 IDEから起動しても、エクスプローラから起動しても結果は同じです。 declare 文でフルパス指定しても見つかりませんと言われました。 VS6.0 SP5 でビルドしました。実行時のユーザーは administrator 権限です。 どうしたら良いのでしょうか?
>>490 VB6のDLLはActiveXだからRegsvr32で登録がいるんじゃない
>>482 外部の装置をPCから制御するプログラムは、組み込みとかファームウェアとか呼ばない気がする。
486です。 電化製品に組み込み式の制御系ソフトウェアはwindowsアプリケーションには入らないと思うのですが やっぱり.netでは作成できそうにないように思えます・・
>>492 いえ、パソコンから制御するのではなくて専用端末機から制御します。
その専用端末機のファームウェアをVBで作成して組み込むという事です。
>>493 たとえばさ、何かの検査装置があって単独でも使えるけど、
これをPCからシリアルケーブルを使ってコントロールできるとする。
検査装置は独自のCPUを持っててOSやプログラムは検査装置のROMに書き込まれている。
この検査装置のOSやプログラムのことをファームウェアとか組み込みプログラムと呼ぶのよ。
これの開発に必要なのはその検査装置のCPUにあったクロスコンパイラやエミュレーターなわけで、
VBやVB.NETの出る幕はどこにもないのよ。
んでこの検査装置をPCからコントロールするためには、
シリアルケーブルでの通信のプロトコルの仕様書が提供されてたり、
VBやVCから扱うためのライブラリ(スタティック、ダイナミック)、やActiveXコントロールが提供されてたりするわけで、
これらを使うことになるわけさ。
>>486 のいってるのはココのことだろ?
>>495 まさしくそれの事を指していたんですが、言葉の使い方を間違っていたようですみません;
以前、別会社に設計して貰った時はVBでやっていると言ってたのですが
その会社ではまずパソコン上でVBを使いプログラムを作り、それをROMに移して機械本体を実行させる。という流れだったと思います。
あまり知識がないもので言っている事がうまく伝わりませんが・・
こういうことはVBやVB.netではできないのでしょうか?
その別会社に聞いたらどう
組み込み系のCE.NETでVB.NET動かせばいいじゃないか VB6でもCEプラグイン使って作れるし
だからどう考えても君らみたいなVB厨を嘲笑するためにネタで聞いてる奴に なにをマジになってw そんなに人に教えを垂れることに飢えてるのかな
善意で考えてだまたまその装置のOSがWindows(CEの線もあり?)でその拡張がVBで出来るとして、 それは普通の環境ではないから一般的にVB.NETではどうかと聞かれても答えられないね。 環境で使えるツール類は変わってくるからよくヒヤリングしないと。
>>488 ,499
週末なのにいやなことでもあったのか? かわいそす。
>>498 >>500 やっぱりこちらの情報不足ですか・・
分かりました、とりあえずもう少し本屋などに行って調べてみたいと思います。
ありがとうございました
503 :
490 :2006/06/11(日) 08:32:47
>>491 すいません、書き間違えました。
.DLL は VB ではなく、 VC で作っています。
>>490 原因がちゃんとあって、解決出来るならいいんだけど、
もし解決出来ない場合、それが、VB6はXP上で
動作保障されてない、って事。
2000では動くのにXPでは駄目、ってのは幾らでもある。
>>503 >実行時エラー'48': ファイルが見つかりません:xxxx.dll (←自作のDLL)
そういうことなら、そのエラーはDLLが見つからなかった時だけでなく
何らかの理由でDLLがロードできなかった場合にも起きる。
よくあるケースをいくつか上げると。
1.VC6の場合DLLでDEBUG版でBUILDされており、msvcrtd.dllやmfc42d.dllなどがsystem32やパスの範囲に存在しない。
デバッグ版のランタイムの再配布は許可されてないのでReleaseモードで再コンパイルをすすめる。
2.VC7以降でかつXP以降の場合、crtやmfcランタイムの場所はマニフェストにかかれていなければならない。
VCランタイムDLLの再配布モジュールを別途インストールするのが手軽。
*.minifestはリソースとして埋め込まれているが埋め込まれていない場合はDLLと同じ場所にコピー。
>>504 XPで動かないというトラブルは確かにあるが、たいていはセットアップウイザードが作ったインストーラーが
強引にコピーしてしまう互換のないDLLやActiveXによるトラブル。
MSがXPで動作保障をしていないというのは都市伝説。しかしもうかなり古いのでVistaではどうなるかは知らない。
>>478 えっそうなんですか?
困ったなあ
>>481 ありがとうございます
>>488 僕はまじめに聞いていますよ
;;;;
教えてくれた人ありがとうございました
>>503 DLL の実行に必要な DLL を Dependency Walker で調べろ
509 :
デフォルトの名無しさん :2006/06/11(日) 11:42:54
VB6+Windows2000環境です。 MDIなフォームの右上に表示されているコントロールボックスを 消したいです(最大化、最小化、閉じるのボタン)。 消す事が無理なら無効にしたいんですが、良い方法ないでしょうか?
>>509 FormのプロパティにMaxボタンとかMinボタンの設定がなかったっけ?
ボタン自体を消すのはAPIにあった気がする
511 :
509 :2006/06/11(日) 11:51:41
>>510 MDIで無い普通のフォームなら、プロパティーで設定(ボタンを消す)可能でした。
MDIだとそれがありませぬ。APIでできるんでしょうか?
>>511 @ITのTipsで方法が紹介されている。
ただし、.NET向けの記事ではあるけど。
でも使ってる方法そのものはVBでも恐らく有効でしょう。
>>505 MSは動作保障してるよ。
まぁ、MSの動作保障なんて全くアテにはならないが。
かなり必死に探したものの見つからないので、質問させてください。 株なんかの取引を自動化したいのですが、どうしても、 「特定の座標にマウスを移動させて、クリックする」という作業が発生するのですが、 これを簡単に実行するには、どうも「なでしこ」ぐらいしかみあたらないのです。 なでしこだと、ちょっと安定性に不安が残るのと、ちょっとした計算ぐらいはするし、 なんとなくですが、VBとかWSHみたいなものでも簡単に出来そうな気がするので、 何かヒントになりそうな情報がありましたら、是非ご教授ください。
>>513 484さんの書いてくれたパッチのダウンロードの環境にもxpって入ってました
>>516 いやだから、保障されてても、まともに動かないのが問題なのであって。
>>514 DOM 使って HTML 操作の方がいいんじゃね? Web アプリだよね?
マルチに反応しちゃ駄目
520 :
デフォルトの名無しさん :2006/06/11(日) 15:34:06
サイボウズ6に予定を設定したり取得したりするこは VB6で出来ますか? 可能なら方法を教えて頂きたいです。 よろしくお願いいたします
もまいら朗報だ。VS2005からVB6みたいにデバッグしながら開発できる ようになったようだぞ。 後で時間作って、VB6厨の漏れが感想書いてみるよ。
>523 ステップ実行中の状態でソースを編集できる様になった、と言いたいのでは なかろうかと。
エディトコンティニューがVB.Net2002とか2003とかでは効かなかった話ではないかと
526 :
デフォルトの名無しさん :2006/06/11(日) 21:18:31
すみません、スクリプトの方ですけどvbsのスレなんてわざわざ無いみたいなのでここでお聞きします。 vbs(wsh利用可)で、現在の状態が省電力モード(スクリーンセーバが動き出すのってこのモードだよね?)かどうかを 検出するってどうやるのでしょうか?
逆に、VBでは出来てたのに出来なくなってたのがダサ過ぎ。
>>526 省電力とスクリーンセーバーは直接関係内
529 :
デフォルトの名無しさん :2006/06/11(日) 21:51:38
>>528 調べたら確かに省電力モードって定義があいまいみたいですね。
ということで質問を変えます。
vbs(wsh利用可)で
・スクリーンセーバが動いているかどうか
・電源制御によりモニタの電源が切れた状態かどうか
・電源制御によりHDDの電源が切れた状態かどうか
を知るってどうやるのでしょうか?
>>529 スクリーンセーバは SystemParametersInfo API かな。
>>529 おそらくVBSとWSH自身の機能だけじゃ無理。
WMIあたりで可能かもしれないが、一番確実なのは
それらの機能を提供するCOMを自作してVBSから使う方法。
これならいろいろ制限のあるスクリプト言語上での実現方法に悩むことなく
制限の少ないまともなプログラミング言語上で普通にやればいいだけなので簡単。
COM使いたくないとか作れないとかいう後出し条件は聞き入れないのでよろしく。
後の質問は、あなたがCOM作るのに使う言語のスレでどうぞ。
但し質問する前に一週間くらいは自分で調べようね。
>>529 電源関係は ACPI で出来ると思う。
533 :
529 :2006/06/11(日) 23:01:22
ヒントをありがとうございました。
534 :
522 :2006/06/11(日) 23:32:53
勝手にVB2005の感想。 2003と比べると、VB6の便利なところが戻ってきたな。 ・ステップ実行中にドラッグでステップを、戻せるようになった。 ・イミディエイト使わなくても変数の上にマウスポインタを 持ってくと値の変更が出来る。 ・ウォッチウィンドウで補完が働く ・ややモッサリ感がある(Celeron1GHz 512MB) ・新規に作成しても、保存しなければ、MyDocumentの残らないように なった。 利用者を意識していて結構良い感じだお。 まあ、手軽にCOM作りたい輩はVB6からは離れられないのには 変わらんが、それは.Net開発環境じゃお門違いだな。
> ・スクリーンセーバが動いているかどうか これはスクリーンセーバーのデスクトップが開かれているかで判定。9x 系は別。 > ・電源制御によりHDDの電源が切れた状態かどうか GetDevicePowerState() でできるらしい
>>534 >・ステップ実行中にドラッグでステップを、戻せるようになった。
あれ?2003でも出来ないかそれは
止めれたり戻ったりできる場所が少ないけど
537 :
529 :2006/06/12(月) 08:54:09
>>535 、>>それ以前の方々、
ヒントをありがとうございました。
web上の文字列を手に入れるときに何の関数を使えばいいのか分かりません ググル先生でも VB web上の文字列を VB web 文字列 で出てきませんでした ヒント下さい
GetWebStringsという関数を作る
>>539 レスサンクスです
InternetReadFileで詳細をもらってくる
その中から一部の文字列に絞ってクリップボードに入れるorテキスト表示させるorファイルに出力させる
でいきます。
542 :
デフォルトの名無しさん :2006/06/12(月) 19:52:38
listview コントロールにて Add でアイテムを追加していくと 先頭に挿入されるのですが、 listbox コントロールのように後から追加するアイテムを 後ろにつけるためのプロパティ、もしくは簡単な方法はありませんでしょうか。。
544 :
デフォルトの名無しさん :2006/06/13(火) 07:22:30
APIで顧問コントロール等々を呼び出すと無駄なインストーラは必要なくなる?
>>544 「APIで顧問コントロール等々を呼び出す」の意味が不明。
指定文字列の検出の質問なのですが hogehoge 2006/06/13a hogehoge 2006/06/12b hogehoge 2006/06/11c といった文字データがhoge.textに出力されていて hogehogeから後ろ12文字だけを出力させたいときはどの関数を使えばいいでしょうか。
549 :
542 :2006/06/13(火) 17:44:59
>>542 毎回indexに1を指定してない?
index を省略すれば最後尾に追加されるはずだか
先頭追加 ListView1.ListItems.Add 1, "key", "Text"
最後尾追加 ListView1.ListItems.Add , "key", "Text"
551 :
542 :2006/06/13(火) 20:07:16
>>550 ズバリです。。
なるほど。。
本当にありがとうございました 多謝
552 :
デフォルトの名無しさん :2006/06/13(火) 20:10:02
今VBでアクションゲームを作っているんだけど当たり判定がうまくいきません。(自分で作成したコマンドボタンを押したらTeki1が消えてしまいます。) コードはIf b(k).Y4<n.Y2+Teki1.Height and n.Y2 and < b(k).Y4+Tama(k).Height and _ b(k).X4<n.X2+Teki1.Width and n.X2 and < b(k).X4+Tama(k).Width then Teki1.Visible=False End If です。 すみませんが、誰かどこにどのように当たり判定を入れれば良いのか教えていただけませんか?
553 :
デフォルトの名無しさん :2006/06/13(火) 20:12:47
>>552 です
書き忘れすみません。
コマンドボタン名はStart1です。
554 :
デフォルトの名無しさん :2006/06/13(火) 20:34:48
そういえば、昔それらしきものを作ってみたわん ソース全く見てないけど、試行錯誤してみれよ
簡単なアタリ判定(適当な画像を個々に用意) Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Dim PlyL As Long, PlyW As Long Dim EnmL As Long, EnmW As Long If KeyCode = vbKeyRight Then Image1.Left = Image1.Left + 100 If KeyCode = vbKeyLeft Then Image1.Left = Image1.Left - 100 PlyL = Form1.Image1.Left PlyW = Form1.Image1.Width + Form1.Image1.Left EnmL = Form1.Image2.Left EnmW = Form1.Image2.Width + Form1.Image2.Left If EnmL >= PlyW Then Exit Sub If PlyL >= EnmW Then Exit Sub Beep End Sub
上の方で使うなと言われているが、あえて訊きます Windows2000でIIS5+VB6作DLL+XLS(xp)で動いてたシステムを Windows2003でIIS6+VB6作DLL+XLS(2003)で動かしたいんだが 単純に載せ替えただけだと、excelファイルの作成でこけてしまう。 ログをはこうとしてもログはく処理でこけちまう これはなにかセキュリティーの問題ですか? (ちなみにユーザは一時的にアドミンにしてます)
557 :
490 :2006/06/13(火) 23:05:04
>>556 IISにISAPIの実行設定してないんじゃない?
デフォルトでは何も実行できないはずだよ
560 :
556 :2006/06/14(水) 01:37:28
ISAPIの実行許可は行っている。 例えば単にSQL SERVERからデータをとってくると行った動作は問題ないんだけども サーバのローカルにファイルを作成する処理が走るとエラーになる。 エクセルがまずいのかと思って、ログを出して追っていこうとおもったらログすらでない ただしエラー内容は変わる。 エクセルの時はファイルの作成が出来ない、ログの時は閉じられてないwithブロック~といった内容。 ちなみにサーバマシンで、ソースから実行してあげれば問題なく動く クライアントのブラウザから実行したときにダメになるので、何らか権限がからんでるのかなあと。
561 :
556 :2006/06/14(水) 01:39:29
>>558 動作保証は分からないけど、過去ログ見た限りはofficeはサーバサイドで実行するな
という内容はあるみたいです。
ただ、2000環境では実行出来ていたので、なにが違うのかなと悩んでます。
>>557 あいかわらずVB6JP.DLLは入ってないな。これがないせいで簡単なプログラムでもインストーラーが必要になる。
もっとも単にコピーするだけでもいいんだけど。
VBSの質問ですがいいですか? 既にあるExcelファイルのあるセルにデータを上書きして 同名で上書き保存したいのですが上手くいきません お願いします
>>564 どういうコードを書いたら、どう上手くいかなかったのか?
VB6からADOを使ってOracleのPakageを呼び出そうとしているのですが Procedureの引数で"TYPE abc IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;"なる 配列を使用したものがあります。これをCreateParameterで引き渡すにはどう書けばよいでしょうか?
>>560 書き出し先にIISワーカープロセスの実行ユーザーの書き込み権限つけてる?
>>563 をぅ、荒井さんの記事だ。
>>567 ADO でオラクルなんて問題外。
oo4o 使え。
ADO は、実質SQLサーバ限定みたいなもん。
570 :
560 :2006/06/14(水) 13:53:40
>>568 IISの方でローカルアドミンを設定しているし、
書き込みもチェックついています
>>570 ローカルアドミン?
LocalSystemの事を言ってる?
>>560 「何らか権限がからんでるのかなあ」と思うなら、あらゆる権限を調べろよ。
そういうシステムって、思わぬプロセスに思わぬ権限が必要だからな。
>>570 そのローカルアドミンとかいう権限で実際に書き込みしようとしているのか
574 :
デフォルトの名無しさん :2006/06/14(水) 19:08:38
F-BASIC97というののCVIを使って書き込んだファイルが ありまして、それをVBに読み込みたいと考えているので すがダンプしてみると 000000 00 07 ** ** ** ** ** ** となっていました。 この最初の2バイト分をVBで読み込んで数値(integer) にしたいのですがどうしたらよいでしょうか? 上のファイルの場合は7にしたいということです。 あとまだCVSで4バイトに書き込んであるデータもあります。 よろしくおねがいいたします。
>>575 ファイルアクセスなんて基本中の基本。
ヘルプ見ろ。
ローカルアドミンは、そのマシンのadministratorってことです。 所属ドメインのadministratorじゃなくて
>>577 根本的にIIS6.0の事を勘違いしているようだ
2003ServerのIIS6.0のオンラインヘルプでワーカースレッド周りの説明を読み直して来い
F-BASIC97だのダンプだの言うから難しくなるんだよ ファイルを2バイト読み込んで数値化 やるべきことはたったこれだけ。 ヘルプ見てもこれが解らないというなら581の通り精進すら見込めないので プログラミング止めろ。
バイナリで開いて、ASC関数を使って数値化、桁にあわせて256^nを掛ける
584 :
デフォルトの名無しさん :2006/06/16(金) 19:53:48
教えて下さい。以下の課題の考え方がよくわかりません。 課題2.与えられた半角文字列中に含まれる単語(半角スペースで区切られたそれ以外の 文字の塊)のうち、最も頻回に用いられている単語を返す関数MostFrequentWord を作成せよ。 ※条件として、大文字小文字を区別しない、返される文字は最初に出現した表 記、2つ以上 の文字が同数の場合は先に登場 実行結果例: print MostFrequentWord("I love you. You love me.") love [3] Windows XP 言語:申し訳ありません。VBです。エクセルのマクロで書いてます。 [5] この課題の前問に、同じような出題で、関数CountWords を作れと、ありまし た。 この問題は以下のように作りました。
585 :
デフォルトの名無しさん :2006/06/16(金) 20:00:48
584の続きです。 この問題は以下のように作りました。 Function CountWords(A) A = A +"" For i = 1 to Len(A) C = Mid(A,i,1) If(C<>"")Then F = 1 ' フラグです。 Else If F = 1 Then X = X + 1 F =0 End If Next i CouWords = X End Function これを実行しますと 例、 A =”I love you. You love me.” print CountWords(A) 6 となります。 課題2は この関数CountWordsを用いるみたいなのですが、 文字列の中の 単語を X個とした場合, 配列をどのように考えたらよいのですか?
単語数とか考えずにスペースも一文字として、ひたすら頭から一文字ずつチェックしていく。 各文字のASCIIコードをそのまま添え字にした配列を用意して、配列にカウント数を保持していく。 最後に頻出文字を探して出力。 個人的には↑なんてやり方しちゃう。
>>584 単語名そのものが入る配列(words)と、登場回数が入る配列(counts)の二つを作る。大きさはCountWords()の戻り値。
配列に関しては、Dim, Redimのヘルプ参照。
で、文章の単語くぎりながら、配列wordsの全要素を調べて、配列wordsに登録してなければ登録する。
そのとき、その配列wordsの位置(インデックス)と同じ場所の配列countsもカウントアップする。
最後に、配列countsを全部調べて一番大きい数に対応する配列wordsの内容が答え。
大文字小文字を区別しない、に関しては、StrConv関数を使う。
わかんなかったら、またおいで。
588 :
587 :2006/06/16(金) 20:25:26
あ、戻す単語は最初の表記ってことだから、配列wordsに入れるときにはもともとの文字列を入れて、 比較するときだけにStrConvを使ってね。
589 :
586 :2006/06/16(金) 20:28:31
いぇ~い、単語と文字を見間違えてたゼィ orz
590 :
587 :2006/06/16(金) 20:37:49
Split関数使えばもっと楽だね。課題の意図的にはNGかもだけど。 ちなみに配列の大きさを調べるのはUbound。
そもそも、課題の丸投げって駄目なんじゃなかったっけ?
592 :
586 :2006/06/16(金) 20:54:41
>>587 さんみたいなやり方もあるし、一つの単語に着目して文章の最後まで走査する,
たとえば"you"なら文章の最後まで"you"を探して見つかったらカウントして・・・というやり方もある。
この場合、カウントするついでに既にカウントされましたよフラグを立てて処理を減らすこともできる。
最初に単語ごとに区切って配列にいれちゃうことが必須になるけどね。文字列とカウントされましたよフラグの
ユーザー定義型を作って。ちょっとやりすぎかもな。
いずれにしろ基本は人間がやってるのと同じってことだね。
丸チ投げ
595 :
585 :2006/06/16(金) 21:08:11
>>586 >>587 >>590 ありがとうございます。 配列RedimやSplit関数などは使わないようにと指示があり
ます。
>>587 私も、登場回数が入る配列(counts)を作ると考えてはいたのですが、単語名そのも
のが入る配列(words)
の作りかたが、いまいち良くわかりません。
関数MostFrequentWord を作成する際、文字列は(”単語 単語 単語・・・・・
”)と分かってない単語を前提として考えるのですよね?
情報としては CountWord() で調べた数の単語数しかわかっていないとして、
その場合の、配列(words) と 出てきた単語の関係の表し方がわからないのです・
・・。
考えているのですが,
Aを文字列だとして
A = ToUpperCase(A)
For i = 0 To (CountWords(A) - 1)
Count(i) = 0
For j = 0 To (CountWords(A) - 1)
If (hairetu(i) = hairetu(j)) Then Count(i) = Count(i) + 1
Next j
Next i
・・よくわからないです
Dictionary オブジェクト使ってしまえ。ゲラゲラ
>>595 まず、やりたい事全てを細かく順番に文章で書け。
それが出来たら、後はそれを一つ一つコードにするだけ。
>>595 配列Redim 使っていいのなら出来たけど、使わないのはちこっとまんどくさい
>配列RedimやSplit関数などは使わないようにと 自力でスプリットしちゃえ
Function SplitText(s) Dim words(100) word = "" idx = 0 For i = 1 To Len(s) If Mid$(s, i, 1) = " " Then If Right$(word, 1) = "." Then words(idx) = Left$(word, Len(word) - 1) Else words(idx) = word End If word = "" idx = idx + 1 Else word = word + Mid$(s, i, 1) End If Next If Right$(word, 1) = "." Then words(idx) = Left$(word, Len(word) - 1) Else words(idx) = word End If SplitText = words End Function
>>601 >配列RedimやSplit関数などは使わないようにと指示があり
配列Redimって配列も含むんじゃと・・・Redimがだめってことかもしれないけど
ただ、Dim words(100) ここ Redimが駄目で100と逃げても・・・
>>603 >>595 をよく読んでみ。
固定の大きさで配列を定義するのは、宿題のような問題ではありがち。
そもそも個定数で作らなきゃ
>>595 のような発想ができない。
Function CountWords(A) Dim s, w, r Dim l, n, m s = Replace(A, " ", " ") Do While Left(s, 1) = " " s = Mid(s, 2) Wend w = "" While s <> "" And Left(s, 1) <> " " w = w & Left(s, 1) s = Mid(s, 2) Wend If w = "" Then Exit Do l = Len(s) + 2 s = Replace(" " & s & " ", " " & w & " ", " ", , , vbTextCompare) n = (l - Len(s)) / (Len(w) + 1) + 1 'Debug.Print n, "[" & w & "]", "[" & s & "]" If m < n Then m = n r = w End If Loop CountWords = r End Function
>>605 えっと 4行目のReplaceはスペース2個です。
s = Replace(A, "□", "□□")
607 :
605 :2006/06/16(金) 23:07:34
ああごめん 関数名は CountWords じゃなくて MostFrequentWord だね。 ・・・あと、尻のスペースが増え続けるが気にするなw
コード書いちゃうのは今回の場合やりすぎじゃないか?
課題でやってる
>>584 のためにならない。
>>606 ・大文字小文字を考慮する必要がある
・ピリオドを考慮する必要がある
Replaceも使っちゃ駄目そうだが。
>>609 「単語(半角スペースで区切られたそれ以外の 文字の塊)」
にピリオドは含まれないのかな?
記号は文字じゃないだろって言われればそんな気もするけど
あとvbTextCompareで大小無視してます。
>>608 ごめんなさい。はなから役に立とうとは思っていません。
>>610 大文字小文字は勘違い。スマソ。
単語は普通(つっこみ付加)、ピリオドやセミコロンなどの区切り文字は入れない。
配列使わないでやってみた Function WordCount(A As String, W As String) As Integer Dim F As Integer Dim X As Integer Dim C As String Dim i As Integer Dim n As Integer Dim s1 As String Dim s2 As String s1 = W For i = 1 To Len(A) C = Mid(A, i, 1) If (C <> " ") Then s2 = s2 + C F = 1 ' フラグです。 Else If F = 1 Then X = X + 1 If StrConv(s1, vbUpperCase) = StrConv(s2, vbUpperCase) Then n = n + 1 End If Debug.Print "X=[" + Format(X, "0") + "] n=[" + Format(n, "0") + "] s1=[" + s1 + "] s2=[" + s2 + "]" End If F = 0 s2 = "" End If Next i Debug.Print "n=[" + Format(n, "0") + "]" WordCount = n End Function
Function MostFrequentWord(A As String) As String Dim X As Integer Dim F As Integer Dim C As String Dim S As String Dim R As String Dim i As Integer Dim n As Integer Dim m As Integer Debug.Print "len=[" + Format(Len(A), "0") + "] A=[" + A + "]" A = A + " " '区切りを追加(最後の単語用) For i = 1 To Len(A) C = Mid(A, i, 1) If (C <> " ") Then S = S + C F = 1 ' フラグです。 Else If F = 1 Then X = X + 1 Debug.Print "S=[" + S + "]" n = WordCount(A, S) If n > m Then R = S m = n End If F = 0 S = "" End If Next i Debug.Print "X=[" + Format(X, "0") + "] m=[" + Format(m, "0") + "] R=[" + R + "]" MostFrequentWord = R End Function
改行多すぎるって言われたから、無用な変数初期化省いてある。
遊びで作ってみたけど、VBってやっぱりプログラム書き難いな '=================== 'cWord '=================== Private mText As String Private mCount As Long Public Property Get Count() As Long Count = mCount End Property Public Property Get text() As String text = mText End Property Public Property Let text(txt As String) mText = txt mCount = 1 End Property Public Function IsMatch(txt As String) As Boolean If LCase(Me.text) = LCase(txt) Then mCount = mCount + 1 IsMatch = True End If End Function
616 :
615 :2006/06/17(土) 00:19:51
'=================== 'cWordCollection '=================== Private mWords As New Collection Public Sub Add(text As String) Dim Word As cWord For Each Word In mWords If Word.IsMatch(text) Then Exit Sub End If Next mWords.Add CreateNewWord(text) End Sub Private Function CreateNewWord(text As String) As cWord Dim nw As New cWord nw.text = text Set CreateNewWord = nw End Function
617 :
615 :2006/06/17(土) 00:20:28
'=================== 'cWordCollection続き '=================== Public Function MostFrequentWord() As String If mWords.Count = 0 Then MostFrequentWord = "" Else Dim Word As cWord Dim MaxCount As Integer Dim MaxCountItem As cWord For Each Word In mWords If Word.Count > MaxCount Then MaxCount = Word.Count Set MaxCountItem = Word End If Next MostFrequentWord = MaxCountItem.text End If End Function
'=================== 'Form1 '=================== Private Sub Command1_Click() MsgBox (MostFrequentWord(Text1.text)) End Sub Private Function MostFrequentWord(Sentence As String) As String Dim text As String Dim TextArray() As String Dim Words As New cWordCollection Dim i As Integer TextArray = Split(Sentence, " ") For i = 0 To UBound(TextArray) Words.Add (TextArray(i)) Next MostFrequentWord = Words.MostFrequentWord End Function
ポイントだけ三行でまとめられないか
Collectionはさすがに使っちゃ駄目だろ。 いや、何でもいいんです、解答じゃないからってことなら、SplitとDictionaryでFAじゃあるまいか。
当方SSTabを使っているのですが、テスト環境で Component 'TABCTL32.OCX' or one of its dependencies not correctly registered: a file missing or invarid というメッセージが出て動かないらしいのです。 ランタイムなども全部最新にしてもらいました。OSは開発環境、テスト環境ともにXPです。 色々ググっても原因がわかりませんでしたので、質問させていただきました。 すみませんが、お力添えをお願いします。
>>620 駄目って書いてないのならOKでしょ。
よっぽど馬鹿な教師でなければ高得点くれるだろ。
>>621 ちゃんとインストーラでインストールしたの?
>>623 動かない環境の方に、ディストリビューションウィザードで作って渡しても、ダメでした。
なお、他の環境(しかも同じくXP)では何もせずに正常に動作してるみたいです。
ますます謎。
検索するといくらでも解決法がみつかるようだけど。。 検索もせずに質問する神経の方が謎だよ
SSTabってVB2.0だぞ
SSTabを使わない仕様に変更しました。
今テストしているのですが、今度は純粋にハングするようになったとのことです。
>>625 本当にありがとうございました。
628 :
585 :2006/06/17(土) 16:39:16
585です。 昨日は、様々なアドバイスありがとうございました。 また、先生に再度、尋ねてみたのですが、配列Redimは使用しても良いとの事でし た。 一応、とてもとても汚いコードですが出来ました。 しかし、もっと美しく改善しようと思っているのですが、様々な条件の制約(あまり 様々な関数を使用しない) のため、どう直したら良いか分かりません。 また、潜在的バグもあると思いますが、まだまだ未熟なため、気づきません。 どうか、チェックをお願いします。 これから、コードをのせます。
629 :
585 コ-ド1 :2006/06/17(土) 16:45:30
>585です。続きです。 ※汚くてごめんなさい。 また、以下に出てくる、関数ToUpperCaseや、関数CountWords は自作です。 一応、Functionで作る前に sub で作って試しました。 Sub MostFrequentWord() A = "Hey, You ! I love you. You love me." Dim Count As Integer Dim hairetu() As String Dim Counter() As Integer A = ToUpperCase(A) For i = 1 To Len(A) C = Mid(A, i, 1) If (C <> " " And C <> "." And C <> "#" And C <> "?" And C <> "!" And C <> ",") Then s = s + C F = 1 Else If F = 1 Then Count = Count + 1 F = 0 ReDim Preserve hairetu(1 To CountWords(A)) hairetu(Count) = s s = "" Else End If End If Next i ここまでで文字列中の単語を配列に変換してます
630 :
585 コ-ド2 :2006/06/17(土) 16:49:29
For j = 1 To CountWords(A) For k = 1 To CountWords(A) If (hairetu(j) = hairetu(k)) Then ReDim Preserve Counter(j) Counter(j) = Counter(j) + 1 Else End If Next k Next j ここまでで 配列に分けた単語数をカウントしてます
>>624 XP上でVB6は動作保障されてないよ。
MSのサイトでは「一部不具合はあるが、動く」って書かれてるけど、
MSの動作保障なんて全くアテにはなりませんから。
632 :
585 コ-ド3 :2006/06/17(土) 16:52:22
For m = 1 To CountWords(A) check = False For n = 1 To (CountWords(A) - 1) E = Counter(n) F = Counter(n + 1) G = hairetu(n) H = hairetu(n + 1) If (E < F) Then Counter(n) = F Counter(n + 1) = E hairetu(n) = H hairetu(n + 1) = G check = True ElseIf (E = F) Then Counter(n) = E Counter(n + 1) = F hairetu(n) = G hairetu(n + 1) = H check = True End If Next n If (check = False) Then Exit For Next m Debug.Print hairetu(1) End Sub 以上です! 汚くて申し訳ありません!
うん、Redim使えないのは変だと思ってた。 とにかく、課題クリアおめでとさん。
634 :
585 コ-ド3について :2006/06/17(土) 16:55:56
632 は 一応 その頻出単語の回数の多い順に並べ替えたつもりです
635 :
585 :2006/06/17(土) 17:00:04
>633 ありがとうございます!
しかし、今更VB6を選択する教師ってのもな。 お里が知れるというか、自分がそれしかできないんだろうな。 C#、VB.NET、Javaなら学生も自分のパソコンで学習できるだろうに。
ヒント:excel
638 :
デフォルトの名無しさん :2006/06/17(土) 17:31:04
アルファベット"a"~"z"が順に格納されている英字配列の 表記の仕方を教えてくだ さい
Print a(0),a(1),...,a(25)
640 :
デフォルトの名無しさん :2006/06/17(土) 20:06:30
>639 a(0) = "a", a(1) = "b", ・… としかできないの? もっとまとめて出来ないのでしょうか?
表記の意味を教えてください
a(i)=chr(97+i)
>>638 こんな感じ?
Dim i As Integer
Dim strAlpha() As String
For i = 0 To 25
ReDim Preserve strAlpha(i)
strAlpha(i) = Chr(i + 97)
Debug.Print strAlpha(i)
Next i
644 :
デフォルトの名無しさん :2006/06/17(土) 20:32:30
>642 おお! 思いつかなかった!! サンクス!
VBSではGoToって使えないんですか? 教えてください
じゃあどうやって構造化するんだ
構造化って何ですか?
簡単に言えば、Gotoをなくすことです。
スパゲティ簡単でいいんだけどなぁ
アセンブラなんかJUMPの嵐だもんな
じゃあ問題なくVBSで構造化できますね!
>>どっかから-
>>654 なにこのわかりやすい自演
ループがネストになっているときのエラー脱出はGoToを使うのが正しい
VB6での事で質問なんだが Form.Controls Frame.Container PictureBox.Container とかって何型なの タイプライブラリにはIDispatch(VBのObject型)になってるんだけど 動作が VBA.Collection 同じだから TypeOf しても False が返るし 結局Object型だから詳しい型が分からないんだよな
その前に型名が必要な理由を聞こうか。
>>658 特に理由は無いんだが...
AddとかItemとかのメンバー持ってるから 何か型があるのかと思っただけ
そういう風に論理的に整合的な解釈ができないからVBはウンコ言語だって ずっと叩かれてたんだと思いますが。 コントロール配列だって実態はなんなのか釈然としないしね
Form.Controls は Control 型?かなあ。 Control ctrl = Form1.Controls[0] とか、そういうコードを書くけど。 いやしかし、それも Object 型が返ってきていると 考えると別にどれに入れてもいいわけか。 確かにちょっと悩む。
言語環境は VBA 6.4 です。 さて、Microsoft Script Control を使用せずに、 ある変数(仮に VarTemp と宣言)を その名前文字列("VarTemp ")で呼び出す方法はないでしょうか? お手数ですが、ご教示願います。
>>664 無い。
もっと具体的にやりたいことを書けば、何かアドバイスできるかも試練。
>>664 何をやりたいかは何となく分かるが、それをやらなければならない設計がおかしい。
それに、「Microsoft Script Control」を使わない理由も。
667 :
デフォルトの名無しさん :2006/06/18(日) 15:28:03
GetUserNameを使ってWindowsのログインユーザ名を知ることができますが このユーザがどのドメインでログインしたかを知る方法はあるのでしょうか? どなたかご教授願います。
教授 × 教示 ○
教授でもOK
教授でもOK ×
教授でもOK
672 :
デフォルトの名無しさん :2006/06/18(日) 16:29:13
コ-ディングの基礎を説明しているサイト教えて下さい! どれくらいTabキ-でずらしていくとかです!
教示とか教授とか使い慣れない敬語は使わずに、普通に教えてくださいじゃだめなのか。 つGetUserNameEx
>>672 そういうのはプロジェクト毎に決まってるよ。
675 :
デフォルトの名無しさん :2006/06/18(日) 17:40:45
>>674 その決まりがわからないのですよ。
VBでの決まりを教えて下さい。
又は、サイトを
逆切れきたよ
別に逆ギレはしてないだろw
>>675 「コーディング規約」とかで検索してみた?
役に立つかは知らないが つ「Code Complete」(Steve McConnell著)
君がプロジェクトリーダーなら話は別だが趣味でやってるなら自分のセンスで書けばどう
>>675 だからプロジェクト毎に決めるんだよそれは。
自分だけの趣味プログラムなら、自分が決めればいい。
VBなんだからインデントのやりかたなんて決まってくるだろ。 プロジェクトなんか関係ない。
個人的には関数内の全行を一律で一段インデントした上で、 入れ子一段あたり、タブキー一回分でやってる。
っていうかVBじゃCみたくインデントの流儀で論争になったりしないでしょ?
実際迷うことあるか?w
{}もifのぶら下がりの問題もないのに。
だから質問者が釣りでなくマジで聞いてるなら、回答としては
そこらにゴロゴロ転がってるサンプル眺めてそのとおり真似しろ、でいいでしょ。
>>683 みたいになんでもバカ正直に回答すりゃいいってもんじゃないと思うけど
つーか、いまからVB始める気かよ
>>682 じゃあそのプロジェクトごとに違うというルールの例を2,3あげてもらおうか。
>>686 インデントが3バイトか4バイトか、とか、変数名の付け方とか、
逆に全てのプロジェクトで同じ項目なんて殆どないと思うが。
バ、バイト?w
脳内プロジェクト乙。
>>689 1バイト空白が何文字分か、って事だろ。
13歳の言うことなんかにかかわらないほうがいいよ。
693 :
遅いが、これはどう? split、Replaceだけ別で実装 :2006/06/19(月) 16:18:48
Private Sub Command1_Click() Dim strEx As String: strEx = "Hey, You ! I love you. You love me." strEx = Replace(strEx, ",", "") strEx = Replace(strEx, ".", "") strEx = Replace(strEx, "!", "") strEx = Replace(strEx, "?", "") strEx = Replace(strEx, "#", "") Dim strArr() As String: strArr = Split(strEx, " ") Dim lngUbound As Long: lngUbound = UBound(strArr) Dim lngMaxCount As Long: lngMaxCount = 0 Dim strMaxWord As String: strMaxWord = "" Dim strArr2() As String: ReDim strArr2(0 To 1, 0 To lngUbound) For i = 0 To lngUbound strArr2(0, i) = strArr(i) For j = 0 To i If (StrConv(strArr2(0, j), vbUpperCase)) = (StrConv(strArr(i), vbUpperCase)) Then strArr2(1, j) = Val(strArr2(1, j)) + 1 If Val(strArr2(1, j)) > lngMaxCount Then lngMaxCount = Val(strArr2(1, j)) If (StrConv(strMaxWord, vbUpperCase)) <> (StrConv(strArr(i), vbUpperCase)) Then strMaxWord = strArr2(0, j) End If End If Exit For End If Next Next Debug.Print strMaxWord End Sub
何だ?急にコードだけ・・・
695 :
デフォルトの名無しさん :2006/06/19(月) 18:14:11
accessの質問なんですけど、 ここで聞いた方が早いと思いまして。 エクスポートしたファイルに「,」が含まれているとエラーメッセージが表示される というプログラムをつくりたいのですが どうすればいいでしょうか?
697 :
693 :2006/06/19(月) 19:41:47
>>584 のコードだよ。
変な制約無かったらどう実装するか
>>695 先頭から一文字一文字取り出して比較すればいい。
699 :
デフォルトの名無しさん :2006/06/20(火) 09:59:50
誰か教えてくだされ、、 コマンドライン引数が入っているか判定するにはどうすればいいんでしょうか? どんな関数を使えばいいのでしょうか?? お願いいたします
Len(Command$)
702 :
デフォルトの名無しさん :2006/06/20(火) 10:25:44
ありがとうございます!
703 :
デフォルトの名無しさん :2006/06/21(水) 22:23:35
>>703 p-codeで動くならそれでいいじゃん
707 :
デフォルトの名無しさん :2006/06/22(木) 09:45:12
ネイティブの最適化きってみれば? たまに上手くいくよ。
708 :
デフォルトの名無しさん :2006/06/22(木) 10:31:09
レスありがとうございます。
結論からすると、とりあえず解決しました。
>>704 さん
スレ違いなので参照先で質問をすれば?ということでしょうか。
一応ログは確認してみました。
>>705 さん
今までOCXを使っていましたので。今回はAPIでということでお願いします。
>>706 さん
なぜ動かないのかが知りたかったのですが・・・
P-CODEでは確かに動いています。
>>707 さん
ご指摘のようにネイティブの最適化を切ってみました。
すると、動きました。
このAPIを使用するにあたって、最適化に関与する部分で何か不具合があるということですね。
実行順序とか勝手に変えられてるんでしょうかw
時間があるときに、違いをデバッガで確認してみることにします。
709 :
デフォルトの名無しさん :2006/06/22(木) 11:22:06
>>708 多分だけどAPIコールのときに型を厳密に言うと間違ってる部分とかがあるんじゃないの?
最適化を有効にした場合、その辺りでAPIコールが引っかかる場合が昔あった。
なんかAIPの宣言違ってるっぽい Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Long) As Long で 引数 "lpOverlapped As Long" は "ByVal lpOverlapped As Long" が正しい気がする このページ書いた人は lpOverlapped に NULLポインタ渡したいんだと思うけど "lpOverlapped As Long" に 0 入れても 0アドレスは渡せないよ ポインタアドレスを渡す時は ByVal As Long 出ないと駄目 ポインタのポインタを指定するときは As Long でOKだけど
711 :
デフォルトの名無しさん :2006/06/23(金) 13:41:33
>>711 Win32APIでのBOOLは4バイトなんだけど。
713 :
デフォルトの名無しさん :2006/06/23(金) 17:18:38
文字数判定とIsdate関数を組み合て YYYY/MM/DDという形式の日付だけ通して それ以外を弾きたいのですが、 文字数判別はどのような関数を使えばよいでしょうか??
>>711 Windows APIのBOOLは
>>712 の言うとおりであって、VBのBooleanとは別物。
715 :
デフォルトの名無しさん :2006/06/23(金) 17:49:55
>>713 文字数判定する必要なくね?
ISDATEだけでいいんじゃね?
716 :
デフォルトの名無しさん :2006/06/23(金) 18:11:43
>>716 vb使いの癖に偉そうにしないで下さい。
>>713 Len() じゃないの? VBの事、もう忘れてるけどw
Winampに複数のファイル名を渡す方法分かる方いらっしゃいますか? コマンドラインで渡すと遅いし渡すファイルの数に限りがあるみたいで。 SendMessageを使うって所までは分かったんですけど、うまく渡せていないようで、Winampが強制終了してしまいます。 ご存知の方がいらっしゃいましたらお願いします。
めんどくせ
m3uをテンポラリに作って食わせるのではいかんのか?
SendMessageで何らかのアプリを操作する方法なんて、完全にVB関係ないじゃん。 偶々そのSendMessageをVBから呼ぶにしても、VB関係してるのはVBでのAPI宣言の書き方くらいだな。
725 :
デフォルトの名無しさん :2006/06/24(土) 17:44:48
レベルの低い質問で恐縮ですが質問させてください。 コンボボックスにいくつかの項目があり、項目を選択後に決定ボタンをクリックすると if文で条件に合致した場合に何らかの動きをするようにしています。 で、コンボボックスの状態をデフォルトのままにした場合にもう一度コンボボックス を選択させたいのですが、どうすれば良いのでしょうか? こんな↓感じなのです。 Private Sub Button_Click() If Combo.ListIndex = 0 Then したい事1 ElseIf stCombo.ListIndex = 1 Then したい事2 Else この時にもう一度コンボボックスを選択させなおしたい End If よろしくお願いします。
ListIndex=-1
727 :
725 :2006/06/24(土) 18:41:56
>>726 は私へのレスですか?
Elseの後に入れてみましたが駄目でした。
そのまま入れるだけでは駄目なんですか?ちょっと調べてみます。
有難うございました
コンボボックスのリストを再表示させたい(ドロップダウン)なら、SendMessageで出来るよ。 SendMessageはVBの機能ではなくAPIなので使い方が解らなければそっちのスレでどうぞ。
エスパーが必要だなw 質問を書いてある通り額面どおり受け取ると、 ユーザーを殴ってでも再入力を強制するロボでも接続しる、 と回答したくなるw
730 :
725 :2006/06/24(土) 19:15:32
>>728 使い方がよく分からないのでぐぐってみます。有難うございました。
>>729 表現がおかしかったですか?反省です。
言いたかった事は、コンボボックスがデフォルトのままで選択されずに実行ボタンが
押された時にメッセージを出してもう一度選択を促したいだけなんです。
そもそもifを使うのがおかしいのですね?多分。
方法を考えます。有難うございました。
>>730 なら話は比較的簡単じゃないか。
コンボボックスのアイテムが選択されるまではボタンをEnabled = Falseにしとけばいい。
というか、そもそもそのボタンとやらは本当に必要なんだろうか
732 :
725 :2006/06/24(土) 19:38:17
>>731 なるほど!確かにその方法でも大丈夫です。
コンボボックスのアイテムが選択されたかどうかを判別する方法が分からない
ので調べてみます。
>>730 既に選択した状態を消したい、って事?
ちゃんと日本語で質問してくれ。
734 :
725 :2006/06/24(土) 20:05:35
>>733 既に選択した状態を消したい、とは考えていません。
選択されていない状態の時に「選択されてませんよ」ってメッセージを出して
ユーザーに選択をさせ直すようにしたいのです。
そんなに日本語変?
>>725 >コンボボックスがデフォルトのまま…
っていうのは、コンボを未選択状態(ListIndex=-1)にしているのか?
それとも、デフォルト状態という設定をコンボボックスにしているのかによって、
判定方法が変わってくると思うのだが…
736 :
725 :2006/06/24(土) 20:20:07
>>735 未選択状態って言うのは(ListIndex=-1)の状態です。
何かこれ以上続けるとスレ汚しになりそうなので(私が未熟なために)、方法も
含めて最初からやり直してみます。
レス頂いた皆さん、有難うございました。
>>734 「選択されていない状態」を知りたい、って事なのか?
ここは国語の勉強をするスレですか
本当は正しい用語があるんだけど質問する側も答える側もそれを使わないから会話がかみ合わない
そして739も実は正しい用語を知らないから、余計ややこしいw
で、本当の質問は何なの?
If a = 1 Then abc ElseIf a = 2 Then def End If と書いてるんだが実行しようとすると'Elseに対するIfがありません'って出る それで If a = 1 Then abc End If と書くと'End Ifに対応するIfブロックがありません'て出るんだが これはif文が間違ってる? それとも他の場所が間違ってる? 因みにVB5CCE
744 :
743 :2006/06/25(日) 01:25:40
自己解決 thenの後の改行だった 俺の見たサイトで横幅の都合上改行してるのかと思ったorz
VB.NETでちょっとしたテキストエディタを作っているのですが、 普通エディタには、テキストエリアの左側に、灰色の文字で現在行が表示されているものですが、 あれはどのようにして表示させているのでしょうか? いろいろ試したのですが、描画速度が遅かったり、重すぎて使い物にならなかったり・・・ この問題を解決してくれるコントロールやプロパティがあるのでしょうか?
CInt(Math.Rnd()*f1sw) CInt(Math.Rnd()*f1sh) ってやってランダムにleftとtop決めてオブジェクト流してるんだが、何度実行しても同じ場所にしか出ない キャッシュみたいなのがあるの? そうで無ければプログラムのミスかな
> プログラムのミスかな うん
オブジェクトを流す、ねぇ・・・
一般的に言語標準の乱数発生機能は数学的に作り出す擬似乱数で乱数の種(初期値みたいな物)が同じだと同じ結果を返す
文字列で書かれた数式を、数式として扱うことはできますか? 例えば、テキストボックスに y=c0*x と書き、別のテキストボックスでc0とxを与えたときに、yを計算させる、というようなことです。 みなさまの知恵をお貸しください。 よろしくお願いします。
>751 Rnd関数の説明に対処方法も書いてある。
755 :
752 :2006/06/25(日) 20:06:39
>>753 返信ありがとうございます。
"eval"でぐぐってみました。
どうやらVB6.0では使用できない関数らしいですね(VB Script 5.0で使える?)。
書き忘れていて大変申し訳ないのですが、当方VB6.0を使用しております。
もしご存知でしたら、VB6.0でeval関数を使用する方法をお教えいただきたいです。
よろしくお願いいたします。
>>756 マジで?
外部のVBSを実行したり、WSHの公開オブジェクトを参照したり出来るのは知ってるが
VBS自体が使えるのは知らなかった。
>>757 みたいにScriptControlオブジェクトのEvalではなく、VBSのEvalを使う方法を紹介してくれ。
所ジョージさんのアタマ~
761 :
752 :2006/06/25(日) 21:46:25
>>756 >>757 ありがとうございます。
紹介していただいた方法を参考に、少し調べてみようと思います。
どうもありがとうございました。
758≠752か…
>>758 ぷぷぷぷぷ~~~ 『VBS Eval』でググッタラ一番上に出てきたよ~~~~~ww
Visual Basic 6.0、多分SP6、OSはWindows2000です。 Selectした結果をListViewに表示、かつ 同じく結果をテキストに出力というコードを書いてます。 ダイナセットからレコード件数ずつループしてListViewに追加、 MoveFirstした後にまたレコード件数ループしてテキスト出力。 この時、ListViewとテキストのレコード順が違うのです。 ListViewが勝手にソートしちゃってるとかあるんでしょうか? 初心者な質問ですみませんが、お力をお貸し下さい。
>>766 早い反応ありがとうございます。
書き落としですね、すみません。
えっと、プロパティで確認しても、無効にしてあるんです。
768 :
デフォルトの名無しさん :2006/06/27(火) 22:35:28
教えていただきたいことがあります。 VBAの方でユーザーフォームのメニュー選択画面を作っているのですが、 工程毎に幾つも項目があり、この工程と項目を関連付けする為に線を引きたいんですが、 どうすれば良いのでしょうか?
>>767 >550 みたいに追加の仕方が悪いんじゃないよねぇ?
>>765 追加する度に追加するテキストと追加後の結果を見ればわかるだろう
771 :
765 :2006/06/27(火) 23:07:52
>>769 いえ、indexは省略しています。
ソートによる空白の扱いが、テキストと違うのが気になっています。
数字と平仮名があつ時、数字項目に空白があった際、
<ListView> <テキスト>
””,あ 01,あ
"",い 01,い
01,あ 02,あ
01,い 02,,い
02,あ ””,あ
02,,い "",い
こんな風になるんです。
>>770 その通りですね……。
今手元にコードも開発環境もありませんが、確認してみます。
お客様VBAのほうおまたせいたしました
773 :
デフォルトの名無しさん :2006/06/28(水) 04:20:19
age
774 :
デフォルトの名無しさん :2006/06/28(水) 09:37:32
>>765 一つのループで追加と書き出しできないの?
775 :
デフォルトの名無しさん :2006/06/28(水) 14:50:47
コンボボックスでそのコンボボックスが開かれている(ドロップダウンされているといったら いいのかな)状態か閉じている状態かを取得する方法は無いでしょうか。
そんなことを知ってどうするのかのほうが気になる
気にすんな。
>>777 まぁ少なくともフォーカスのない時は閉じてるわな。
781 :
777 :2006/06/28(水) 22:43:35
閉じてるときに文字列入力してEnter押したらリストの中から入力文字列を含むItemだけを抽出して コンボボックスを開く。 開いてるときにEnter押したら、単にコンボボックスを閉じるということをやりたいのです。
一文字入力ごとにリストがでるAJAXのほうがかっこいいのに
>>782 誰もそんな話をしてないし。
ここで未だにVB6でやってる時点で前提があるんだから。
>>781 「閉じてるときに文字列入力」って、何処に入力するか知らんけど、
テキストボックスだとしたら、入力した瞬間に閉じるのでは。
フォーカスが移動するし。
>>782 VBでやってAJAXよりも遅かったら悲惨
> VBでやってAJAXよりも遅かったら悲惨 と感じる人が居るのは否定しないが、 そう感じない人が居ることも認めようね。 そもそも早さ最優先ならこのスレには来ないだろw 最初から他の言語を選ぶはずだ。 質問には、妥協案や「俺ならこうする」的な自己中回答ではなく 出された条件を満たす回答を心がけよう。 もちろん情報として他の方法を紹介するのは悪くないが それを紹介して「コレの方がいいからコレでやれ」的なのは止めような。 「コレの方がいい」かどうかは質問者が決めることだから。
>>786 「これの方が良い」との結論に納得するかどうかは質問者の自由だが、
「これの方が良い」と主張する自由が回答者にもある
これの方が良いのブルース
>>786 __ / /
//⌒ヽ / /
_, - '' .i ! /
r==- ´ |,,rt | / 、``_ .┼┐
._. r´ll| | i-|_j | / | / /
\  ̄ ` ー 、!_|_|_,,,,,,.....,,,,____ ! .!
\ ヾ//::::::::;;:'::::::::::;:::\`ヽ、_,ノ
\ /:://::::::/:::::::::/ハ:\ヽ i! \
/" ̄ヲス::|.|:::::/:;r―<|::/--||:::|:::| i! \
:::,",´/ト:::|.|:::://,ィ"ミl l/ r=v||:::|l:| i!
イr::/ !:/~|::// ! ヒ.リ L.l| ||:::||! i!
|l.|::| !|i´レ'|:| 、、、 ,. 、 |ル:| i!
ll.|l::| ヾ,`!/. Fニニi / |! i!
;| ||::| 丶l 丶、 `ー ' / ,i!
;|::|.|::| l i.゛"´ √と"Y
l|::|.|ノ _ノ __ _t--、/ (二` .|
|レ r" ̄!i 〈 ⊂_` |
{ .ノ`ー-=ョ≒t=\ゝ /
>>786 なんなんだ、この馬鹿は。
読んでてムカムカした。
はっ、釣り?
言ってる事は間違いではないと思う。 書き方は、まぁ、偉そうだがw
「認めようね」でもうブチギレですよ
>>788 それは786が言ってることと同じだよ。
786は、回答者にも出された条件に合わない方法を主張する自由はあるが、
決定する自由は無いって言ってるだけだし。
Form1のリストボックスを右クリック ↓ ポップアップメニュー ↓ 項目クリック ↓ Form2をモーダルで起動 ↓ Form2のリストボックスを右クリック ↓ ポップアップメニュー ・・・が出ない この流れを崩せない場合、Form2をモードレスで起動する以外に、 Form2のリストボックスからポップアップメニューを表示させる方法は ないでしょうか?
それって腐った仕様を押し付けられるデスマプログラマのことを言ってるのか
>>795 モーダルは本当に不具合だらけだから、使わないのが常識。
798 :
777 :2006/06/30(金) 12:04:33
>>784 説明不足ですみません、「閉じてるときに文字列入力」というのは
コンボボックスに文字列を入力ということです。
799 :
デフォルトの名無しさん :2006/06/30(金) 13:02:41
>>777 Enterなんか使わずにドロップダウンしたら入力されている
文字列の含まれるリストを表示するほうがよいのでは
>>800 それでもよいのですが、ドロップダウンしたときに発生するイベントがないんですよね。。。
あ、すみません、ぼけてました。DropDownイベント思いっきりありました・・・・
>>799 毎回毎回不可思議な現象に巻き込まれるが、
結局何も分からないままほったらかしに・・・
どうせ自分が理解してないだけだろ。
806 :
デフォルトの名無しさん :2006/07/01(土) 12:55:00
すみません。今アクションゲームを作っているものですが、先日は大変お世話になりました。 実は今、人がジャンプし終わった後、ブロックの上に着地するというコードを書きたいのですがやり方が解りません。 真にすみませんが誰か教えてください。お願いいたします。 オブジェクト名は、 人はHitoで、 ブロックはBlock です。
前世で一緒に闘った仲間を探しています。 「Hito」、「Block」、この言葉に何かを感じる人はれ連絡をください。
808 :
デフォルトの名無しさん :2006/07/01(土) 17:21:30
>>806 です。書き忘れすみません。
HitoとBlockは、Imageを使っています。
>>808 お前はVB使うな。そしてゲーム作成板へ行け。
>>806 「AfterJump」イベントと「BeforeOnBlock」イベント使えばいけると思うよ
Hito.Left = Block.Left Hito.Top = Block.Top
いしのなかにいる
813 :
デフォルトの名無しさん :2006/07/02(日) 14:24:59
>>806 です
ありがとうございます。
やってみます。
814 :
_ :2006/07/03(月) 07:29:30
Inet使ってHTTP通信を行っているんですが、 サーバから302 Moved Temporaryが帰ってきた場合に 自動でリダイレクトし移動先に通信してしまいます。 自動リダイレクトを停止して302のページが取得したいのですが、 Inetでできるんでしょうか?
>>814 socketのAPI使ったらいいんじゃない?
817 :
デフォルトの名無しさん :2006/07/03(月) 23:10:27
>815 Inet以外でHTTP通信する方法はないでしょうか?
ナイアル厨って定期的に湧いてくるのなw
ちゃんと答えでてるし。
>817 「readyState=4」が書いてあるのでヒントだけ。 ・Do~Exit Do~Loop ・時間を計る あんたならこれで分かると思う。
いい質問のあとでアホなこと聞いてすみませんが VBSで msgbox "処理中" ↓ (重い処理) ↓ (メッセージボックス閉じる) ってできるんでしょうか?時間指定で閉じる方法はぐぐって見つけたのですが・・・
>>823 MsgBox を表示したら、それを閉じる迄
コードは其処で止まるんだが。
>>823 Main.vbs Msg.vbs
処理開始
├───起動─→msgbox "処理中"
│
↓
処理完了
├───通知─→(メッセージボックス閉じる)
↓ ↓
終了 終了
意地でも1ファイル内で済ませたいなら知らん
作成したexeファイルに引数をつけてバッチファイルとして実行したいのですが その部分のコードはどうやって記述すればいいのでしょうか? 例えば test.exe batch このようにしたいのです。
command
>>827 それはどこでやればいいのでしょうか?
重ねてソースコード上でどのように書けばいいのかと
バッチファイル自体はどうやって作るかも教えて頂けるとありがたいです。
>>824 >>825 ありがとうございました。確かにそうですよね
ですが私はメッセージボックス閉じる方法すら判らない厨でして。。。
ぐぐってきます
>>830 すいません。バッチファイルについてはスレ違いでした。
もう1つ、引数として何が指定されたかを
VBのソースコード上でどのように判断すればいいかわからないのです。
>>831 答えてもらってるんだから少しは自分で調べろよ
StringやSpaceの使い方で気になったんだけど 例えば、ゼロやスペースがたくさん必要なときは String$(100,"0")とかSpace$(893)とか書くよね で、そんな変数やら項目がたくさんある流れのなかで、 数箇所少ない数のゼロやスペースが必要なときって "000"とか" " String$(3,"0")とかSpace$(3)とか 普通どっち使うもんかな 何個以上のスペースのときはSpace使うとか、 線引きみたいなの意識してる? 人それぞれ?
質問する側もエスパーじゃないとダメなの? このスレって。
>>834 普通即値なんて使わないでしょ。
「" "」が必要だとして、その3バイトの空白には
必ず意味がある筈なんだから。
そういう意味では、Space$(893) も失格。
この「893」という値には意味がある筈なので。
837 :
デフォルトの名無しさん :2006/07/04(火) 19:43:14
ハードコーディングすんな
840 :
817 :2006/07/04(火) 20:47:07
>>822 Sleep取りながらループ回し、有る一定時間readyState=4にならなければ、という処理をしろというなら
その結果が
>>817 で書いた「(10分以上待ったが反応無し)」であり、
実際には10分も必要なく数秒でじゅうぶんだけど、普通に取得できる場合は1秒以下で処理が終わるため
例え1回数秒でも処理回数が多くなると膨大な時間になり、やはり
>>817 で書いたように
そういう処理に時間の掛かる方法は避けたいです。
通常1秒以下で取得できるなら、1秒以上をdat無しと判断すれば良いと言うかも知れませんが
鯖が重い場合は正常取得に1~3秒掛かる場合もあるので、最低5秒くらいは待たないと正しい判断は出来ないと思われます。
>>822 の回答がそういう意味じゃないなら、もう少し詳しく教えてください。
また、上記のような解釈でいいのなら、別な回答をお待ちします。
>817 tTimeA = この時点での時刻(秒単位でもミリ秒単位でも好きに) Do If readyState = 4 Then 好きな事やって bGetDat = True Exit Do End If tTimeB = この時点での時刻 - tTimeA If tTimeB > 待てる限界時間 Then 好きな事やって bGetDat = False Exit Do End If DoEventsを噛ますかどうかは任せる Loop もっと集約化できる。Do While~でもFor To Nextでも書ける。 好きにして。
>823 VBSでできるかどうかしらんが、VBなら ・メッセージボックスはMsgBoxじゃなく自分で似たデザインのを作る ・軽い処理ならその似非メッセージボックスに閉じていいかどうか条件判断させる ・重い処理なら重い処理中に似非メッセージボックスを閉じていいかどうか条件判断させる という感じがいいと思われ。 >834 例えばSpace$(893)の「893」をConstできるか?という観点で 考えたらいいんじゃね? ConstできるならSpace$使わんでもいいし、 できんなら使った方がよかろうし。
>>842 ありがとうございました。
VBSではどうやら自分デザインは出来ないみたいなんですよ
今更とか言われてるけどVB覚えてみようかな
844 :
817 :2006/07/05(水) 07:04:38
>>841 そういった方法だと、
「待てる限界時間」を基準にすると、鯖が重いときに正常取得出来ず、
正常取得できる時間を基準にすると、「待てる限界時間」を越えてしまうという話です。
datが無いなら無いで、きちんとStatus=404なりなにかを取得出来る方法を探してます。
845 :
834 :2006/07/05(水) 10:22:01
>>836 普通に即値使うこともあるんだよね
バカでごめんよ
>>842 Constするべきならそうするけど
たった一つのプロシージャ内で、そこでのみ必要だよ、とかいった場合
893ものスペースはベタ打ちせずにSpace$(893)て書くけど
たった3、4のスペースだった場合は、どうなのかなと
>>845 そのコードを死ぬ迄あんたがメンテするなら好きに書けばいい。
>>845 たった、3、4でなくてそのスペースにはどういう意味が有るのかが重要
昨日の自分は別人と考えてプログラムを作る習慣をつけろ
848 :
834 :2006/07/05(水) 12:12:39
>>845 うん
>>847 意味・・・単なるラベル表示のインデントだとか
要するに、そこに"000"かString$(3,"0")かを記述しなきゃいけない場合に、
あなたならどっち使う?
ってことなんだけどさ
それでもそこだけのためにConst準備しとくんだ、とか
絶対そんな状況にならないぞ、とかって人はスルーしてくれ
849 :
デフォルトの名無しさん :2006/07/05(水) 13:01:15
つうか、コードのその箇所を探すっていう手間が理解できない人には何言っても駄目。 3が4になっただけで、コードを精査するわけだし、それが一箇所だという保証もない。 そもそも、その3文字っていうことの論理的な意味づけもできない。
850 :
834 :2006/07/05(水) 13:49:06
>>849 考えすぎだと思う
まああんましイライラしないでくれ
>823 ダメか。 んじゃ>825で出てる方法で重い処理内にMsgBoxを閉じるかどうか 判定する箇所を幾つか設けるしかないんじゃないかな。 VB覚えるのは賛成。 VBSやってりゃすぐ使えるようになるだろうし、 何より手数が増えるのは悪い事じゃないでしょ? >817 だったら最初からそこまで書いてくれ。 こっちゃエスパーじゃないんだから。 >834 となるとやっぱり可読性かな。 流石にSpace$(893)の代わりに1byte spaceを893個書く事はなかろうがw Space$(1)だったら1回きりなら" "と書いても可読性は落ちん、って感じで。 codeの該当箇所を探すって問題は、俺の場合はソースを直接read onlyでテキストエディタで開いて 正規表現とか使って探しちまうからあんまし参考意見は出せない。 共同作業の場合も相手にそのやり方教えちまうし。
852 :
デフォルトの名無しさん :2006/07/05(水) 16:45:29
Constだの Space$だの " "だの 見やすきゃ何でもいいだろうが
頭の悪そうな質問をしてくださいスレなくなったと思ったらここか
854 :
817 :2006/07/05(水) 20:52:44
>>851 はい、最初から「処理に時間の掛かる方法は避け」て
「datの存在の有無を直接判断できる方法」が知りたいと書いております。
>>851 さんの「>817」はおそらく
>>844 宛てだと思われますが
自分としては、条件を後出ししたわけではなく、こういう理由で
最初書いた条件に合いませんと書いただけのつもりなのですが。
具体的にどの位の時間までOKか書かなかった非は認めますが、
「上記を含め」の「上記」に当たる方法が、正常にヘッダを取得できた場合よりは遅いとは言え
鯖が重くなければ0.5秒以下で終わるようなものなので、それより速い方法を探してるという意味で書きました。
引き続き宜しくお願いします。
最初のカキコでVBSの質問だって書いてるのに、DoEventsとか出してくる あたりからして、質問内容ちゃんと読んでないのだろうから、他の回答者を 待った方がいいと思われ。ここは回答者の質も様々だからな。
質問させていただきます。 あるプログラムで、 For i = 1 To T S = S * Exp(mu + sigma * normsrnd()) Next i というようにSをi=1~Tで定義するのですが、 このSに対して、i=1~Tにおいて少なくとも1つの Sが、S<K なら 1、それ以外なら 0となるような 変数Uを記述したいのですがどう表現すれば よいのでしょうか。Kやsigmaやmuは定数です。 宜しくお願いいたします。
>>856 U = 0
For i = 1 To T
S = S * Exp(...)
If S < K Then
U = 1
EndIf
Next i
u = 0; For i = 1 To T S = S * Exp(mu + sigma * normsrnd()) if(s < k){ u = u or 1; } Next i 質問内容が、さすがVBプログラマ。と言いたくなるような内容だな。
煽りながらミスすると恥ずかしいだけだぞw
うーん857も858もうまくいかない・・・ 神きぼんぬ・・・
どううまくいかないのかかけ。
858ので実行すると構文エラーになります。 857ので実行すると、目的関数である CO = Exp(-r * T) * U * max2(0, S - K) がなぜか0になってしまいます。 max2(a,b)は定義済みです。 宜しくお願いいたします。
書き忘れました、 構文エラーとは、 ; とifのあとの{}です。
エスパー同士勝手にやってろ
857ので実行すると、目的関数である CO = Exp(-r * T) * U * max2(0, S - K) 死ねよ。こんなこと説明していないだろ。わかるわけが無い。ばーか。
あーほ。お前もうくんな。 どうせお前には何を言ってもわからん。 べ^-。
どうせ宿題だろ。 じぶんでやれ。 べろべろばー ∩___∩ | ノ ヽ/⌒) /⌒) (゚) (゚) | .| / / ( _●_) ミ/ .( ヽ |∪| / \ ヽノ / / / | _つ / | /UJ\ \ | / ) ) ∪ ( \ \_)
格好は無理でもああいう落ち着いた話し方をしたいとかは思った
華麗に誤爆
十分ヒントにはなるはずの情報を活用する頭がないならあきらめろ。
875 :
デフォルトの名無しさん :2006/07/06(木) 15:27:04
6桁の数値から、一見不規則な6桁の数値に変換して かつ元の数値に戻せる簡単な方法があったら教えてください。 (例) 000001 → 916724 → 000001 000002 → 197537 → 000002 000003 → 721495 → 000003
適当にXOR
って6桁にならねーな、はは
>>875 元の数を全部配列に記憶しておき、適当な乱数で6桁に変換すればいい。
元に戻すのは、配列の当該位置を参照するだけ。
880 :
875 :2006/07/06(木) 16:30:47
ありがとうございます。ですが・・・
>>878 可逆でなくなったり、6桁以上になってしまいます。
>>879 元の数は0~999999すべて発生するため
配列の確保や変換(シャッフル)の時間に問題が発生します。
XORでいいじゃん。
882 :
デフォルトの名無しさん :2006/07/06(木) 18:02:51
Visual Studio 6.0 を Windows Xp Professional にインストールしようとしたら、途中で止まってしまいます。 インストールは可能なんでしょうか?
>>875 フォームに
textbox * 2
commandbutton * 2
はって、以下のコード張る
Dim a As Long
Dim b As Long
Dim tmp As Long
Dim i As Long
Private Sub Command1_Click()
tmp = Int(Text1.Text)
Call Randomize(tmp)
a = Int(Rnd(0) * 100000)
End Sub
Private Sub Command2_Click()
For i = 0 To 1000
DoEvents
Call Randomize(i)
b = Int(Rnd(0) * 100000)
If a = b Then
DoEvents
Text2.Text = i
Exit For
End If
Next i
End Sub
おっと For i = 0 To 1000 を For i = 0 To 999999 にしてくれ
886 :
デフォルトの名無しさん :2006/07/06(木) 18:21:43
>>883 よろしくお願いします。
C:\Program Files\Microsoft Visual Studio\Common\Tools\VS-Ent98\Vanalyzr\VALEC.EXE
でユーザが取得できないというエラーでした。
その時はCDが1枚目で途中終了してしまいました。
ネットに接続したら上手く行くのでしょうか?
888 :
デフォルトの名無しさん :2006/07/06(木) 18:32:54
>>887 ありがとうございます。
明日会社に出てから、さっそくやってみます。
htmをテキストファイルとして取得して その中から正規表現で_data0602.lzhを _*.lzhで取得するところまではできたんですが。 取得した値を rc = bObj.W3get("-d C:\_data -o ") に代入してダウンロードさせる事ができません。 どうすればよいかご教示願えませんでしょうか?
W3getとかのヘルプを読む
>>884 tmp の値により a は一意にならないから
a から元の値を求めることはできない。
892 :
デフォルトの名無しさん :2006/07/07(金) 13:10:24
vbsで質問です。以下のプログラムを書きました。 ○に0~10の数字を入れた時に正解にしたいのですが、違うになってしまいます。 ところがアルファベットを入れると正解になります。 なぜかわかる人おしえてください。。 chk = ○ if chk = [0-10] then msgbox "正解" else msgbox "違う" end if
>>892 chk = 5
if ((0 <= chk) Or (chk <= 10)) then
msgbox "正解"
else
msgbox "違う"
end if
ほとんど正解
896 :
892 :2006/07/07(金) 14:12:30
アルファベットを入れた時もNGにしたいのですが、どうやれば良いですか?
897 :
デフォルトの名無しさん :2006/07/07(金) 14:27:10
○前提1 処理(100件/secとか)のログを「LOG.txt」に書き込む「wLOG.EXE」があります。 「wLOG.EXE」は「LOG.txt」を追記モードで開いてデータを書き込みます。 但し、「LOG.txt」にロックがかかっている場合、処理は行いますが 「LOG.txt」にデータを書き込みません。(書き込めない) ※「wLOG.EXE」は既製品なので修正できない。 ※上述のように、「LOG.txt」がロック中「wLOG.EXE」は書込みを行ってくれませんが、 「LOG.txt」には"絶対に全てのログ"を書込むようにしたい。 ○前提2 上とは別に「LOG.txt」を解析処理する「rLOG.EXE」があります。 これは定期的に(5秒おきとか)「LOG.txt」を「WORK.txt」にリネームし、 「WORK.txt」を解析処理します。 ※リネームには Name "LOG.txt" as "WORK.txt" を使用 ○疑問 ・リネーム処理はファイル状況によって処理時間に違いがあるのでしょうか? 10KBと1GB、あるいは無数に断片化している場合など、どうなるのでしょうか? ・リネーム「Name "LOG.txt" as "WORK.txt"」の処理中のファイルの状態はどうなるのでしょうか? ロック状態になるのでしょうか? 仮にロック状態になるとすると、前提1にあるようにロック中のログを欠落してしまいます。 よろしくおねがいします
>>897 リネーム処理なんてディレクトリエントリを書き換えるだけなので一瞬。
リネーム中は、そのファイルに対して何も処理は出来ない。
また、そのファイルが処理中なら、リネームは出来ない。
899 :
デフォルトの名無しさん :2006/07/07(金) 15:36:54
>>898 ありがとうございます
>リネーム処理なんてディレクトリエントリを書き換えるだけなので一瞬。
ですよね?ただ、上にそう言っても、
「一瞬だろうが0ではないから、そのタイミングで「LOG.txt」に対する書込みが来たらどうするんだ」
とか言って納得しないんですよ。
(仮にそのタイミング「LOG.txt」がロック状態だとしたら欠落するから)
MSか何かその辺りの仕様の記されたものってありますかね?(今のトコみつからない
リネーム ■ ■ (リネーム2回
ログ書き ■■■ ■
CPUの割当てがこうなら間違いないと思うんですけど
リネーム ||||| ||||| (リネーム2回
ログ書き ||||||||||||||| |||||
こんな感じだとしたらリネーム中のファイルの状態はどうなっているのか
>>899 ディレクトリに数千~数万ファイルあるとその書き込みにも数秒かかる(マジで)
あと、リネーム時のロック状態はネットワーク上のファイルとローカルファイルシステムでも動きが違う
↑なので ログファイルのオープンはリトライしろとかロックファイルは別に持つとかそんな感じで
902 :
デフォルトの名無しさん :2006/07/07(金) 15:51:57
>>900 同一フォルダ内には基本一か月分(30ファイル)です。
あって精々100ファイル程度かと
ファイルはローカルです。
903 :
デフォルトの名無しさん :2006/07/07(金) 15:53:52
>>901 「wLOG.EXE」は既製品なので手を加えられないんですorz
>>899 書き込み中のファイルはリネームなんて出来ない。そんなの数行ですぐ試せるだろ。
逆にリネーム中のファイルはオープン出来ない。そんなの数行ですぐ試せるだろ。
莫迦な「上」には昔本当に苦労したので、その辛さはよぉーーーーーーーーーーーく分かります。
めげないで頑張ってね。
ちなみに私の場合、例えばあるウィンドを開いていて、次に別のウィンドを最大化で開き、
その最大化したウィンドを最小化してアイコンにした場合、さっきのウィンドが下から現われるのは
お前のバグだ、とか色々言われました。
そんな「障害票」を100枚以上書かされたな。
905 :
デフォルトの名無しさん :2006/07/07(金) 16:00:11
>>904 > 書き込み中のファイルはリネームなんて出来ない。そんなの数行ですぐ試せるだろ。
はい、実験済みです。
> 逆にリネーム中のファイルはオープン出来ない。そんなの数行ですぐ試せるだろ。
これが実験できないんですよ、
リネームは「Name "LOG.txt" as "WORK.txt"」でやってるんですけど、
これが一瞬でおわるので、どうしたものやら…
Name "LOG.txt" as "WORK.txt"
open "LOG.txt" for append as #FN
debug.print "open"
close #FN
これじゃ意味ないですよね?どうしたらいいでしょうか?
> 莫迦な「上」には昔本当に苦労したので、その辛さはよぉーーーーーーーーーーーく分かります。
> めげないで頑張ってね。
> ちなみに私の場合、例えばあるウィンドを開いていて、次に別のウィンドを最大化で開き、
> その最大化したウィンドを最小化してアイコンにした場合、さっきのウィンドが下から現われるのは
> お前のバグだ、とか色々言われました。
> そんな「障害票」を100枚以上書かされたな。
それはまた…
お互い苦労しますねww
質問は簡潔に書け。話はそれからだ。
>>905 「AAA.Txt ←→ BBB.Txt」とかでひたすらリネームし続けるプログラムを動かしつつ、
その両方のファイルをオープンして何か書いて閉じ続ける別のプログラムも動かせ。
908 :
デフォルトの名無しさん :2006/07/07(金) 17:26:20
>>907 ・「LOG.txt」から「WORK.txt」にリネームして、「WORK.txt」を削除しつづけるプログラム
・「LOG.txt」を追記モード(append lock read write)で開いて、書いて、閉じるプログラム
上の二つを作って試したところ、
追記に失敗しているケースが多発しました。
要はファイルリネーム中は、ファイルに追記できないということですね。
そうすると
最初の前提1の
※上述のように、「LOG.txt」がロック中「wLOG.EXE」は書込みを行ってくれませんが、
「LOG.txt」には"絶対に全てのログ"を書込むようにしたい。
これは不可能ということになるのかな?
既製品で修正できないって自分で言ってるんだから不可能だろ
>>897 経緯が良く分からないので疑問にだけ答える。
> ・リネーム処理はファイル状況によって処理時間に違いがあるのでしょうか?
> 10KBと1GB、あるいは無数に断片化している場合など、どうなるのでしょうか?
リネームはファイルのメタデータに対する更新なので、ファイルサイズや
ファイル本体の断片化などは関係ない。
FATもNTFSも同様。
> ・リネーム「Name "LOG.txt" as "WORK.txt"」の処理中のファイルの状態はどうなるのでしょうか?
> ロック状態になるのでしょうか?
ファイルに対するアクションは、ファイルシステムがキューイングするので、
通常は、アプリケーションから見れば、「リネームされていない状態」か、
「リネームされた状態」のどちらかしかない。
「通常でない」場合というのは、そのアプリケーションが、物理ディスクの読み書きをする
アプリケーションの場合。
・追記に失敗しているというはどこから分かるの?
914 :
デフォルトの名無しさん :2006/07/07(金) 23:18:34
>>910 「WORK.txt」は解析処理後に削除するので、試験プログラムでも削除。
「LOG.txt」-リネーム→「WORK.txt」-解析処理→「WORK.txt」削除 の手順。
>>911 ありがとうございます。
「通常でない」場合は、「リネームされていない状態」「リネームされた状態」の他の状態があるとうこと?
…いや、ちがうか
>>913 「wLOG.EXE」が「LOG.txt」に書き込むときに、
「書き込むことができません。」っていうエラーが吐かれてましたので
>>914 >「通常でない」場合は、「リネームされていない状態」「リネームされた状態」の他の状態があるとうこと?
通常のアプリケーションから見るとリネームされているが、ディスクには書き込まれてない状態
がありうる。Windowsは、ファイルのキャッシュだけでなく、メタデータも遅延書き込みを行う。
単なるアプリであれば気にする必要はない。
そもそも、そんな事はアプリ側で何も気にせずガンガン処理すれば、OSが全てうまくやってくれる筈だが。
>>916 wLOG.exeがどのような処理シーケンス(API呼び出し)でファイルに書き込んで
いるのかがわからなければ、そうはいえない。
>>914 そもそも、内部処理の仕様がわからないwLOG.exeを相手にした解析をするので
あれば、wLOG.exeが起動中に勝手にリネームしたり削除したりするのが間違い。
rLOG.exeは、起動単位ごとに、LOG.txtのどこからどこまでを解析したかを記憶
しておき、次回はその続きから解析するようにすべき。(シークする)
例えばUnixのデーモンプロセスなどは、ログファイルを切り替える通知を外部から
受け付ける機能を初めから実装している。wLOG.exeがそのような機能を持って
なくて、なおかつ内部構造が不明なのであれば、上記のような方法を取るしかない。
918 :
デフォルトの名無しさん :2006/07/08(土) 00:34:14
>>915 Windowsの正規手順を無視したディスクアクセスってことかな?
そんなアプリあるの??
>>916 そう思ってましたw
でも処理ぶん回す試験PG作ったら何かエラーでたんですよorz
>>917 「ログファイルを切り替える通知を外部から 受け付ける機能」
は持っていなさそうなので、
> rLOG.exeは、起動単位ごとに、LOG.txtのどこからどこまでを解析したかを記憶
> しておき、次回はその続きから解析するようにすべき。(シークする)
の方法にするとすると、
LOG.txtの読み込みはシーケンシャルリードでは多少時間が掛かる…
(10M超のファイルで全行ループで1.数Secかかった。これはちょっとかかり過ぎ。
ランダムアクセスが可能かどうか、調べてきます…(やったことないもんで
>>918 > Windowsの正規手順を無視したディスクアクセスってことかな?
そういうこと。たとえばデフラグとかがそういうものに該当する。
920 :
デフォルトの名無しさん :2006/07/08(土) 00:40:17
んー、ログが固定長じゃないから厳しいのかな・・・?
>>918 >Windowsの正規手順を無視したディスクアクセスってことかな?
>そんなアプリあるの??
別に正規手順を無視しているわけではない。Windowsのキャッシュマネージャと
ファイルシステムを介さずにディスクにアクセスするようなアプリだ。
具体的には、Win32APIのCreateFileで直接Volumeをオープンするようなアプリ。
ドラック&ドロップしたテキストを指定したテキストと結合する様にしたいのですが、 下記みたいにやったのですがうまくいきませんでした。 Data.Files(1)の扱い方が悪いのかなと思うのですが、どなたかご教授頂けないでしょうか? Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) Shell "cmd /k copy /b Data.Files(1) + b.txt c.txt", vbNormalFocus End Sub
>>923 Shell "cmd /k copy /b " & Data.Files(1) & " + b.txt c.txt", vbNormalFocus
925 :
デフォルトの名無しさん :2006/07/08(土) 11:49:47
>>921 ロックされてるファイルをOpenしようとしたときと同じエラーメッセージだった
926 :
デフォルトの名無しさん :2006/07/08(土) 11:51:24
固定長じゃないテキストログにランダムアクセスする方法ってありますかね? やっぱ、シーケンシャルに読むしかない?
そりゃインデックスでもなけりゃむりだろ。
ナイアル厨w
またナイアル厨厨か。
速度求めるんなら、そこだけDLLにすりゃいいんじゃね? 処理対象分だけ切り出して、新しいファイルとして保存するみたいな。 Cなら20行もありゃできそうだ。
多分、速度じゃなくて 信頼性が欲しいんだと思うよ
>>891 tmpの値により一意になるはずなんだけど・・・
俺の環境じゃなる
934 :
デフォルトの名無しさん :2006/07/09(日) 12:01:56
>>928 どんな手法がありますか?
Open~for Randomじゃ無理っぽいんですけど
>>934 いや 無理だよ
長さが変動する以上 ランダムアクセス じゃ無理
テキスト丸ごと読み込んで 先頭から解析するのが 一番簡単かも
936 :
デフォルトの名無しさん :2006/07/09(日) 13:53:32
ナイアル厨じゃないけど、単にランダムアクセス、とういことならそれは可能でしょ。 バイナリとして読んでStrConvすればいいんだから。(S-JISの2バイト文字の 区切りは意識する必要はあるけど。) 任意のm文字目からアクセスしたいとか、n行目からアクセスしたいとかいった場合は 頭から読まないと無理だろうけど。 まあ926はそういう意味で言ってるんだろうから答えはやっぱり無理ということになるのかな。
言ってることはそのとおりだけど、 明らかに任意レコードへのランダムアクセスのつもりで聞いてるから無理。
いや、レコードなんか意識する必要ないんだって。 最初はLOG.txtを全部WORK.txtにコピーする。 次はLOG.txtのWORK.txtのサイズ+1からさ以後まで全部コピーする。 rLOG.exeはWORK.txtを対象として解析する。 前にも言ったけど、VBでやるのがパフォーマンス的に厳しいなら、Cで書けばいいんじゃない。
939 :
デフォルトの名無しさん :2006/07/09(日) 15:14:59
そういう話じゃないと思うんですが。。 そりゃ一旦全部よんでリストに置き換えるとか、 インデックスを作るとか、配列にぶち込むとか、 そういう手法ならいくらもあるし、そんなのだれでも思いつくでしょ。
>>939 いやいやそういう話でしょ。
10MBのファイルを処理した後に20MBのファイルを処理するときに10MB分
読まなきゃならない。次に30MBのファイルを処理するときに20MB分よまなきゃ
ならない。
そうするんじゃなくて、rLOG.exeは常に解析対象ファイルの初めから処理する
ように作っておいて、処理対象のファイルは別途切り出せって話。
で、切り出したファイルの解析は、固定長のログじゃないなら、行読み込みで 読み込みながら解析すればいい。
えーっと、ですからそれはランダムアクセスと等価(ただしリードオンリー) のことを、可能な限り効率的に行うための手法の話であって……
いったい何がしたいのかは
>>926 に聞いてみるしかないんじゃないの?
質問者自身が、自分が何がやりたいのか理解してなくて ちゃんと聞かないと、全く的外れな回答が続くな。
>>926 データベース使えば簡単なんじゃないの?
freeのだったら、MySQL、PostgreSQL、SQLite、MS SQL 2005 Express
有料のものなら規模に応じて、Access、桐、Oracle
あとはVBとかで好きに加工すればいいでしょう
え?
>>926 =
>>897 でしょ。
何やりたいかは本人も良く分かってるし、アドバイスしてる奴も一部を除いてよく分かってるでしょ。
実は全く関係ない奴が単発質問しただけってオチか
951 :
デフォルトの名無しさん :2006/07/09(日) 19:24:40
実は、も何も文面だけ見れば全く別の無関係な質問、 と読むしかないと思いますが。。 仮に本当は同一人物による関連する質問だとしてもね。 最近こういう文章を文面どおり読む能力がないというか、 自分の想像妄想と一緒にしちゃって区別がつかない人って増えてるよね。
何で同じ奴の質問だと決め付けてるのかサッパリ分からん。
953 :
926 :2006/07/09(日) 19:49:40
>>926 =
>>897 です。 色々議論ありがとうございます。
897の疑問と926の疑問は別ですけど、
897の問題からの派生で926の質問があります。(経緯は>>897-
>>926 のログを…
また、926は、
>>937 の言うように、任意レコードへのランダムアクセスのつもりで言ってます。
>>932 信頼性を優先し、ある程度の速度も欲してます。
上の方にも書いてますけど、10M超のファイルで1.数Secかかってます。
これをせめて0.5Sec以下にもっていきたい。
>>938 この手法は興味深いので、ちょっと検討してみたます
>>947 まあ、「wLOG.EXE」がDBでインターフェースとってくれればいいんでしょうけど、
それは無理なので…
無理と決め付ける人間に進歩はない
文章長くて適当に流し読みしかしてないけど、 「やりたい事」と「やる方法」を間違えてる様な気が。
>>953 根本的なところの指摘なんだけどさ、例えば5秒おきに10MBのログを解析するって、
1行80byteだとすると1秒あたり25000行の解析になるんだよ。
VBで大丈夫なの?
あー、もういいじゃん、
>>926 も再登場したわけなんだから
質問を簡潔にまとめてくれよ。 36文字程度で。
963 :
926 :2006/07/09(日) 23:53:21
>>958 1日最大(?)40000行くらいいくログで、
その内処理が必要なのは20000行弱(1行の処理は0.23Secくらいかかる)
それで、40000行くらいの中から、処理対象行数を走査するのに1.7Secくらい掛かりました。
タイマーは3秒~5秒を想定しているので、いちいち頭から読むのはかかり過ぎかなと…
>>955 どういう方法がいいでしょうか?
あー、5秒おきに起動するんじゃなくて、5秒ごとに解析したいわけね。 んじゃ、起動しっぱなしにしとけば? そうすりゃ先頭からシークする必要ない。
965 :
デフォルトの名無しさん :2006/07/10(月) 00:35:03
>>964 readモードでOpenしっぱなしにするって言うことですか?
ログの読み込みは
do until EOF(fileno)
line input #fileno strline
loop
ッテ感じでやってますけど、これを定期的にコールする?
967 :
デフォルトの名無しさん :2006/07/10(月) 09:07:03
>>966 いや、それじゃないww
例えで「wLOG.EXE」っていってるだけw
968 :
デフォルトの名無しさん :2006/07/10(月) 13:32:46
はじめまして。 お聞きしたいことがあるのですが、VBで1÷7を計算して、 小数点以下50桁まで表示させたいのですが、 どのようにすればよろしいのでしょうか?
969 :
875 :2006/07/10(月) 13:47:51
>>968 筆算をプログラム化する
途中で同じ数値になったら循環小数にする等の処理を加える
x = 10
For i = 1 To 50
. Debug.Print x \ 7;
. x = (x Mod 7) * 10
Next i
>>965 そのdo ~ loop内に解析処理そのもの、あるいは読み込んだログを
メモリ上に保存するのなら、その通りだ。
971 :
デフォルトの名無しさん :2006/07/10(月) 15:11:00
>>970 Open FilePath For Input As #intFileNo
Do Until EOF(intFileNo)
Line Input #intFileNo, strLine
'対象行判定
Loop
Close #intFileNo
って感じでやってますけど、
そもそもreadモードでOPENしっ放しができない…
OPEN中に書き込もうとするとエラーになる。
>>964 の意味を下のように解釈したんだけど、違うのかな??
<<メイン>>
①起動 ファイルオープン
②タイマー開始 <<Read処理>>
③終了 ファイルクローズ
<<Read処理>>
Do Until EOF(intFileNo)
Line Input #intFileNo, strLine
'対象行判定
Loop
EOFで処理終了。
次回<<Read処理>>コール時は、
前回EOF位置からLineInputが開始される。
972 :
デフォルトの名無しさん :2006/07/10(月) 15:18:24
>>964 > んじゃ、起動しっぱなしにしとけば?
> そうすりゃ先頭からシークする必要ない。
これの意味が分からない。
「rLOG.EXE」は起動しっ放しです。タイマーで数秒置きに解析処理を実行します。
ファイルOPENしっ放しだと「wLOG.EXE」がログを落としてくれないので、都度Closeしなきゃならない。
そうするとシークする必要があるような気がする。
どうやったらシークを省いてダイレクトに増分から読み込めるのでしょうか???
もういっそのことさ、Cで一行読み込んでくれるDLL書きなよ。
>>972 >ファイルOPENしっ放しだと「wLOG.EXE」がログを落としてくれない
そんな重要なことは最初に書けよ。
だったら処理対象範囲のログを切り出すしかないだろ。
いや、切り出すためにファイルをオープンしたら、その間も wLOG.EXEはログを落とさなくなるのか? だったら解析不能なんじゃね?
だから最初にいったろ wLOG.EXEがどんな場合でもログ吐いてくれるようにしてくれてないとダメなんだって
ええ?VBのOpen For Inputステートメントって、書き込み権の排他ロックも 取得しちゃうの?なにそのくそしよう
978 :
デフォルトの名無しさん :2006/07/10(月) 16:56:44
>>974 ファイルロック中はダメっていうのは試験済みで
>>897 で書いてますけど、
「Open FilePath For Input As #intFileNo」 でダメっていうのは今日試験したので…
「Open FilePath For Input As #intFileNo」で開いたファイルを
メモ帳で更新すると更新できるので、Readモードでは開けているってことかな?
ただ、
>>971 の目論見は不可能だったので、どのみちダメか…
>>973 >>975 やっぱ、切り出すためのOPENでも一緒ですかね
実運用の頻度+αで、リネームでの書き込みエラー発生をもう少し調べてきます。
OPENよりはリネームのが早いと思うので…
979 :
デフォルトの名無しさん :2006/07/10(月) 16:58:49
>>977 ごめんなさい。使ってたエディタ(EmEditorF)が悪かったみたい。
メモ帳ではOPEN中の更新できた。
>>977 デフォルトがLock Read Writeじゃなかった?
>>980 えええええ?
書き込み権のみならず、読み込み権の排他ロックまで獲得しちゃうの?
なんだそりゃ。
982 :
926 :2006/07/10(月) 17:19:14
ランダムアクセスじゃないけど、読込位置の取得は 「Seek #intFileNo, lngPos」で出来ました。 lngPosは前回読込終了位置 「lngPos = Seek(intFileNo)」で記憶しとく。 これでシークタイムは高速化できました。 ただ、結局 「Open FilePath For Input As #intFileNo」 でダメだったから意味ないかな…
Open For Binary は試してみたの?
984 :
926 :2006/07/10(月) 17:32:05
Open FilePath For Input Access Read Shared As #intFileNo Open FilePath For Binary Access Read Shared As #intFileNo ともにダメ…
だからCから試してみろと何度言ったら(ry
なんでFSOとかAPI使わねえんだ?
987 :
デフォルトの名無しさん :2006/07/10(月) 17:59:13
>>985 ファイルIOくらいなら書けると思うけど、Cは経験浅いので。
あとなるたけVBでやりたい。
>>986 FileSystemObjectは分かるけど、APIはどんなのあるか知らないのです。
けど、FSOにしてもAPIにしてもOpenステートメントと違うのかな??
書き込みでLock Readしてるだけの話だが既製品で修正できないって 言ってんだったらもうあきれめれ。
>>987 OpenFile ってそのものの名前のAPIがあるよ。
これなら、非常に細かく制御出来る。
990 :
デフォルトの名無しさん :2006/07/10(月) 21:01:32
>>985 #include <stdio.h>
int main(int argc,char *argv[]){
FILE *fp;
char line[256];
char c;
if(argc!=2){
exit(1);
}
if((fp=fopen(argv[1],"r"))==NULL){
exit(1);
}
printf("%s開きました\n",argv[1]);
printf("終了しますか?\n");
scanf("%c",&c);
fclose(fp);
return(0);
}
とりあえず、こんなんで試したけど。ダメだったよ。
open中はログ書けない。
>>988 のいう通りかな。
こっち方面では諦めるしかないのか…
ウィンドウを最前面にしたいのですが、アクティブにはしたくありません。 調べたらSWP_NOACTIVATEを見つけて以下のコードを書きました。 でも期待通りの動きをしてくれません。 最前面にはなってますが必ずアクティブになってしまいます。 何がいけないのさっぱりです。 よろしくお願いします。 Private Sub Form_Load() Timer1.Interval = 3000 Me.Hide End Sub Private Sub Timer1_Timer() If Me.Visible Then Me.Hide Else Call SetWindowPos(Me.hWnd, HWND_TOPMOST, Me.Left, Me.Top, Me.Width, Me.Height, SWP_NOACTIVATE Or SWP_NOSIZE Or SWP_NOMOVE) Me.Show End If End Sub
ワロスw
993 :
デフォルトの名無しさん :2006/07/11(火) 02:09:43
ExcelのVBAについて質問。 現在ブック内に空シートを作成し、Excel側の印刷設定にて両面印刷を指定し、 2つのシートをselectしprintoutする事で両面印刷を行っております。 これをVBでの「Printer.Duplex = 2」のようにコード側(?)で設定してあげる方法はないでしょうか? ご存知の方やそのヒントになりうる検索ワードをご存知でしたら教えてください。
空シート印刷してどうするの
だな
998 :
デフォルトの名無しさん :2006/07/12(水) 05:19:38
そんなことより次スレ立ててくれ
999 :
デフォルトの名無しさん :2006/07/12(水) 10:17:03
だが断る
1000 :
デフォルトの名無しさん :2006/07/12(水) 10:18:22
.,。 ,。 (; Д )
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。