VBプログラマ質問スレ(6.0以前) Part42
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/05/24(火) 17:42:09質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、
「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。
VB.NETは別物なので専門スレで、
VBS、APIの質問もそれぞれのスレで。(>>2 で紹介)
MSDN Online Japan ホーム
http://www.microsoft.com/japan/msdn/default.asp
Visual Studio 6.0 Service Pack 6 正式リリース
http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx
http://www.google.co.jp/
※「まず自分で調べる」クセを身につけよう。
心得
一.質問する前に過去ログにも目を通してみる。
二.質問する前に MSDN などで調べてみる。
三.VBScript はこのスレでOK。
四.インストーラーなどの質問もOK。
五.荒らしは相手しない。
六.VB情報募集中。
七.VB.NETの話題はできるだけひかえる。
前スレ Part41 http://pc8.2ch.net/test/read.cgi/tech/1112414085/
0153デフォルトの名無しさん
2005/06/08(水) 00:24:59DoEvents かませば移動中もスクロールするけど?
0154153
2005/06/08(水) 00:31:46*_Change() と *_Scroll() の両方に書く必要があるね。
0155デフォルトの名無しさん
2005/06/08(水) 00:37:49>93-96は奴が自分で書いたものでしょ
俺はコマンドライン操作をするアプリは、VBは起動中のコマンドライン操作が面倒という理由で
他言語使ってるのでVBのコマンドライン周りはよくわからんが
0156デフォルトの名無しさん
2005/06/08(水) 00:41:24だからさー
自分で作ったコードがあって、何でほかの方法探すという面倒な事しなきゃならないのさ
0157デフォルトの名無しさん
2005/06/08(水) 00:45:02VBコードは書けても日本語読めない方ですか?
0158デフォルトの名無しさん
2005/06/08(水) 00:50:10日本語は読めるよ
理由を説明してくれないか
0159デフォルトの名無しさん
2005/06/08(水) 01:08:27この部分が理解できてないからじゃねーの?
たとえばVB上でWindows Script Hostの
Arguments、Unnamed、Namedプロパティ、Existsメソッドが使えたとしたら、
dll化したとしても標準モジュールに書いたとしても、
93-96を使うのは無駄なことに違いないいから。
0160デフォルトの名無しさん
2005/06/08(水) 01:19:33そんなもん、自分で作るよりかバグも少ないことが期待できるし、
一般的な方法があるのならそれにあわせたほうがいいし。
皆が共通のコードを書いているのに一人だけ変なの使っていたら、
この関数何?なんでこんなの使っているの?って話になる。
0161デフォルトの名無しさん
2005/06/08(水) 10:24:48あ、俺も黙ってられなかった…
0162デフォルトの名無しさん
2005/06/08(水) 12:48:42pictureboxの画像の上にラベルで文字を重ねて一つの画像を作ったのですが、
そのpictureboxをSavePictureで保存してもラベルの文字も画像と判断してくれません
このpictureboxの画像とラベルを重ねたものを画像として保存するにはどうすればいいですか?
一応windowsキー+プリントスクリーン→ペイントに貼り付けで保存はできるんですが・・
できればVB一つで保存できる方法があったら知りたいです。
0163デフォルトの名無しさん
2005/06/08(水) 13:11:32解像度が荒くていいならFormのハードコピーを取るサンプルみればできるっしょ。
そこらじゅうにサンプルがありますよ。
そうじゃなく綺麗に取りたいなら、デバイスコンテキスト周りとかをきちんと学習すればできるようになる。
0164デフォルトの名無しさん
2005/06/08(水) 13:13:17なるほど!ありがとうございました
0165デフォルトの名無しさん
2005/06/08(水) 13:17:33PictureBoxにラベルの文字をPrintすればいいだけのような。
0166デフォルトの名無しさん
2005/06/08(水) 14:09:17オレが使っている標準モジュールを晒しておく。
今のところコレを使っていて不都合は無い。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/517.lzh
0167デフォルトの名無しさん
2005/06/08(水) 15:49:06VB6.0 上でエクセルの列A,BをコピーしG,Hに貼付けようと下記のようにしているのですが
列G,Hを選択しているところまでは確認できましたがうまく貼りつきません。
xlSheet.Range("A:B").Select
xlSheet.Range("A:B").Copy
xlSheet.Range("G:H").Select
xlSheet.Range("G:H").PasteOK
よろしく、お願いします。
0168162
2005/06/08(水) 17:03:57まさかこんなところで騙りが発生するとはorz
>>163
今日一日色々試したけどだめでした・・
フォームごと印刷したりPCごと落ちたりと散々な結果に
デバイスコンテキスト勉強して見ます
>>165
分かりませんでした・・
0169デフォルトの名無しさん
2005/06/08(水) 18:22:31と同じ意味にあたるプロパティは何でしょうか?
マウスではなくスペースキーを押したときにリストを変更したいです。
よろしくお願いします。
0170162
2005/06/08(水) 21:05:39できました。が、好きな位置にプリントできずに困っています
ttp://picopico.dip.jp/ragnarok/data/4/1118111052876.jpg
こういうのを作っていまして、背景はbmp、文字はラベルで貼り付け、中央右のキャラクターは画像読み込みで処理しているんです
あとはこれを一括で保存・ファイルに出力できれば完成なのですが・・探しても>>165さんのやり方しか見つからないです
0171デフォルトの名無しさん
2005/06/08(水) 22:16:090172デフォルトの名無しさん
2005/06/09(木) 02:30:39For Count = 1 to 10
LabelX.Caption = Count
Next Count
このように LabelXのところをカウンタ変数に合わせて
Label1 ~ Label10 にしたいのですが LabelX のことろ
はどうかけばいいのでしょうか?
0173デフォルトの名無しさん
2005/06/09(木) 02:39:33コントロール配列にしておくか、配列を確保しておきSetをしておいて
LabelA(x).Caption =
のように。
0175デフォルトの名無しさん
2005/06/09(木) 03:56:54たとえばhoge(3, 2)という配列があって、
a 3 6/8
b 1 6/7
c 4 6/5
d 2 6/6
みたいな内容の場合、
▲昇順
b 1 6/7
d 2 6/6
a 3 6/8
c 4 6/5
や
▼降順
a 3 6/8
b 1 6/7
d 2 6/6
c 4 6/5
のような感じでソートしたいのです。
よろしく御願いします。
0176デフォルトの名無しさん
2005/06/09(木) 07:50:12一次元配列のソートと同じだと思うけど、どこで詰まってるのかな。
0177デフォルトの名無しさん
2005/06/09(木) 08:47:30情報があいまいすぎでしたね。スミマセン。
実際の配列要素数は数十万*15〜20で、型はString、
要素は英字+記号、数字+記号、英数、数字のどれかです。
自分が今まで一次元配列のソートに使っていたアルゴリズムを流用すると
ソートのキーとなる要素に重複値があるとうまくソートされないんです。
他にはMSHFlexGridに書き出してソートしてまた変数に格納する方法や
それよりも更に時間が掛かるような方法しか思いつかないし・・・
何か良い方法はありませんか?
0178デフォルトの名無しさん
2005/06/09(木) 09:01:14自前のコードをデバッグするのは?
もし処理速度が問題なら、DLLを利用するとか。
VectorにあったDLLは最大10万件だったけど。
0179デフォルトの名無しさん
2005/06/09(木) 09:53:46>>数十万*15〜20
ってどういう事?ファイルがそれだけあるって事かな?
結局ソート対象は数十万で良いのかな?
0180デフォルトの名無しさん
2005/06/09(木) 10:08:530181167
2005/06/09(木) 10:24:390182デフォルトの名無しさん
2005/06/09(木) 10:47:06ACCESSのmdbより、データを検索する処理があるのですが、(ループの内部)
高速化のためにキャッシュ処理を使うように変更することになりました。
この処理は、端末の利用者がデータ検索をする時に使用されるものですが、
端末利用者の検索条件設定(年齢層[子供、大人、老人等]や、職業[会社員、自営業等])で
検索対象となるテーブルが可変します。
また、ループ処理で、同じレコードが再ヒットする可能性は極めて低いです。
なので、最初の検索時に対象のテーブルのデータを全て構造体配列に持って、
2度目以降の検索では、この配列を見るようにしようと考えていますが、
ツマラン処理の割には手間が掛かりそうです。(配列からの検索処理の記述とか)
何か他に簡単な方法はないものでしょうか。
漠然とした回答でも結構ですので、何かアイデアがあればお願いします・・・。
なお、使用しているVBのバージョンは6.0です。よろしくお願いします。
0183デフォルトの名無しさん
2005/06/09(木) 10:50:09言っている事が判らない。
正式なコントロール名を使用して説明してくれ。
0184デフォルトの名無しさん
2005/06/09(木) 11:02:09すいません、質問がおかしかったですね。
使用コントロールはvaSpreadです。ツールボックス内のComboBoxをform
に貼り付けている場合には
Select Case KeyCode
Case vbKeyReturn, vbKeyDown
KeyCode = 0
Case vbKeyUp
KeyCode = 0
Case vbKeySpace
If Combo1.ListIndex = 3 Then
Combo1.ListIndex = 0
Else
Combo1.ListIndex = Combo1.ListIndex + 1
End If
Case vbKeyBack
Combo1.ListIndex = -1
End Select
の手法でComboBoxの中身をどんどん変更できたのですが、vaSpreadでセル
をComboBoxに指定して同じような動きをさせたいのですが、ListIndexプ
ロパティが見つけられずに困っています。
0185デフォルトの名無しさん
2005/06/09(木) 11:24:54市販されてるVB用ライブラリのヤツですか? >>SPREAD
With Spread
.Row = 2' セルを設定
.Col = 2
i = .TypeComboBoxCount
.TypeComboBoxIndex = 1
s = .TypeComboBoxString
End With
こんな感じで、取得したり設定したりする事になると思います。
ちなみに、VB上でF2キー押してfpSpreadライブラリのヘルプ見たほうが早い気が・・・
0186デフォルトの名無しさん
2005/06/09(木) 13:28:54その前に問いたい。そのデータベースは正規化されているのか、と。
0187デフォルトの名無しさん
2005/06/09(木) 14:46:49どのように行うのでしょうか?
MSFlexGrid.CellForeColor = QBColor(**)ではアクティブ?
(先頭かクリックしたセルにデータが送られた場合)の所だ
け色が変わります。
0188デフォルトの名無しさん
2005/06/09(木) 15:28:22それは"Cell"ForeColorだから当然だろ。
カレントセルを変えるプロパティですよ。
あまり使わないから良く判らないが、そのプロパティの行バージョンを探すか、
セル1つずつを変えていって行全体を変えるか、範囲指定してセルの色を変えればいいのでは?
0189デフォルトの名無しさん
2005/06/09(木) 15:42:21すいません。
アクティブなセルを替えながら色を変更していくのか
行ごと色を指定する方法があるのか、どのようにするのか
基本がわからなくて質問してしまいました。
>>185
の方法が使えそうな気がして試した所うまくいってしまいました。
With MSFlexGrid
.row = 行カウンタ
.col = 1
MSFlexGrid.CellForeCOlor = QBColor(12)
.row = 行カウンタ
.col = 2
MSFlexGrid.CellForeCOlor = QBColor(12)
.row = 行カウンタ
.col = 3
MSFlexGrid.CellForeCOlor = QBColor(12)
End With
ありがとうございました。
0190デフォルトの名無しさん
2005/06/09(木) 15:51:06おせっかいついでに・・・。
ループしろ、関数化しろ。
private sub SetCellColor( grd as MSFrexGrid, rw as long , cl as long, clr as long)
with grd
.row = rw
.col = cl
.CellForeColor clr
end with
end sub
呼び出し側
For i = 1 to 目標まで
call SetCellColor(グリッド, 行, i , QBColor(?) )
Next
0191デフォルトの名無しさん
2005/06/09(木) 16:22:34おせっかいThxです。
おかげですっきりまとまりました。
勉強になりました。ありがとうございました。
0192デフォルトの名無しさん
2005/06/09(木) 17:09:540193デフォルトの名無しさん
2005/06/09(木) 17:10:440194デフォルトの名無しさん
2005/06/09(木) 17:20:06レスありがとうございます。早速試してみたのですが、Index=2の時にリストの
2番目の文字列を取得したかったのですが失敗でした。ヘルプも見てみたのです
がなかなかみつからないものですね。
手法としてはTypeComboBoxIndexの値が変わった時に、Select文を使って.Text
="abcde"のようなやり方しかないのでしょうか?
0195182
2005/06/09(木) 19:14:05正規化どころか、テーブルが・・・い、いえ、なんでも・・・。
システムが歪に成長しているもので、
それにカスタム対応しようとして、方法論までが歪な物になってしまいます。
早く別の作業に移りたい・・・
0196185
2005/06/09(木) 19:27:00もしや、.TypeComboBoxIndex と .TypeComboBoxCurSel の
使い分けができていないとか・・・?
0197デフォルトの名無しさん
2005/06/09(木) 19:57:25最小限の再現コードを貼って。
0198185
2005/06/09(木) 20:25:47なんか、質問の意図を間違えたかもしれません。
↓のように設定した場合、
.Row = 1
.Col = 1
.CellType = 8
.TypeComboBoxList = "りんご" & vbTab & "ゴリラ" & vbTab & "ランボルギーニ"
.TypeComboBoxEditable = False
.TypeComboBoxCurSel = 0
取得するときは
.Row = 1
.Col = 1
.TypeComboBoxIndex = 1 '2番目
s = .TypeComboBoxString 'ゴリラ捕獲
0199デフォルトの名無しさん
2005/06/09(木) 20:44:54なるほどね。正規化とかはできそうにない状況な訳ね。ところで、ADOとかで
Filter とか Find 使うって選択肢はあり?
0200デフォルトの名無しさん
2005/06/09(木) 21:58:58取得するアプリ有るじゃないですか。
アレで使われてるターゲットを選択するポインタって、VBではどうやれば使えますか?
ドロップした位置情報(x=300、y=400とか)が取得できればいいのですが。
0201デフォルトの名無しさん
2005/06/09(木) 22:37:46マウスカーソル変えてSetCaptureするだけちゃうん?
0202デフォルトの名無しさん
2005/06/09(木) 23:14:10WindowFromPointっていうAPIがあります.
っで質問です。VBのプロジェクトに配置されました。
東京周辺でVB6.0が購入できるお店があったら教えて下さい。
0203デフォルトの名無しさん
2005/06/09(木) 23:15:47どなたか分かる方いらっしゃれば教えてください
0204デフォルトの名無しさん
2005/06/10(金) 00:08:01普通に買えると思いますが?
ttp://www.microsoft.com/japan/msdn/purchaseguide/chart/
から旧バージョンが入ってるものを選べばいいですよね:)
0205195
2005/06/10(金) 00:09:05それは可能です。
現在の検索処理は、検索条件自体は単純(1件当たりの検索は早い)なのですが、
ADOを活用したら高速化できますか? ちょっとアイデアが浮かびません・・・。
0206デフォルトの名無しさん
2005/06/10(金) 00:32:50給料の低い新米にゃちときついなぁ。願わくば Learning Edition とか
単品で安く欲しいっす。やっぱ、秋葉探索しかないですか。
>>203
変数2個使って2重ループするとよろし。
テキストの描画には、TextOut っていうAPIがある。
0207デフォルトの名無しさん
2005/06/10(金) 07:50:41業務で使うなら会社の金で買え
0208デフォルトの名無しさん
2005/06/10(金) 10:25:420209デフォルトの名無しさん
2005/06/10(金) 13:57:55Now
0210デフォルトの名無しさん
2005/06/10(金) 15:08:04馬鹿は黙っててくれませんか?
0211デフォルトの名無しさん
2005/06/10(金) 15:36:57OSの時刻と基本的にイコールだし。
0212デフォルトの名無しさん
2005/06/10(金) 15:52:33高負荷時のWin9x系で激しくズレることもある。
0213デフォルトの名無しさん
2005/06/10(金) 15:57:15そんな用途でのOS選定、言語選定を間違ってる。
0214デフォルトの名無しさん
2005/06/10(金) 16:24:39じゃあどのOSと言語使えばいいわけ?
間違ってると言うなら適切な事を知ってるんでしょ?
0215デフォルトの名無しさん
2005/06/10(金) 16:30:10どのような手順を踏めば良いのでしょうか??
0216デフォルトの名無しさん
2005/06/10(金) 16:39:070217デフォルトの名無しさん
2005/06/10(金) 16:39:38VBを窓から投げ捨てる
0218デフォルトの名無しさん
2005/06/10(金) 17:18:120219デフォルトの名無しさん
2005/06/10(金) 17:40:280220デフォルトの名無しさん
2005/06/10(金) 17:42:06どうやって?
0221デフォルトの名無しさん
2005/06/10(金) 17:44:230222デフォルトの名無しさん
2005/06/10(金) 18:22:02Windows2000 SP4+VisualBasic6.0 SP5でアプリを作成し、
InstallShieldExpress2.12でインストーラを作成して
Windows2003サーバにインストールしても
正常に動作しますか?
ドトネトに汁!という選択肢は除外でお願いします(;´Д`)ゴメンナサイ
0223222
2005/06/10(金) 18:40:51お騒がせしました。
0224デフォルトの名無しさん
2005/06/11(土) 03:39:33楽天市場で検索を行うとアドレスの欄で日本語が
あいうえお → %A4%A2%A4%A4%A4%A6%A4%A8%A4%AA
のように変換されます。
この変換をVB上で行うにはどのようにすればいいのでしょうか・・・。
仕事から帰っていままでずっと検索したのですが
なかなか情報が見当たりません。
申し訳ありませんがご教授願います。
環境
VB6.0 SP6
0225デフォルトの名無しさん
2005/06/11(土) 04:18:38URL エンコード
0226デフォルトの名無しさん
2005/06/11(土) 04:18:54Function S_Change(s as string) as string
If s = "あいうえお" Then
S_Change = "%A4%A2%A4%A4%A4%A6%A4%A8%A4%AA"
End If
End Function
0227192
2005/06/11(土) 14:58:00Private Sub Command1_Click(Index As Integer)
If flg(Index - 10) = 1 Then
Command1(Index).Picture = Command2.Picture
flg(Index) = 1
End If
End Sub
こんな感じなのですが・・
0228デフォルトの名無しさん
2005/06/11(土) 16:15:12Dim flg(Index) As Integer
Indexが有効なのは下のプロシージャ内だけだから、flg(0)を宣言したことになる。
If flg(Index - 10) = 1 Then
Indexが0の時、宣言されてない flg(-10) を参照することになる。
0229デフォルトの名無しさん
2005/06/12(日) 00:03:22自宅でこっそり勉強しようかと思いまして。
秋葉みてきたけど、ないっすね。
CDのみで1万5千円(Professional)版なら見つけましたが。
なんとかお安くかつ合法に入手できないもんですかね。
仕方がないんで、Java資格取ってJavaのプロジェクトに配属されるよう
がんばります。
0230デフォルトの名無しさん
2005/06/12(日) 08:29:17V6.0なんか売っているわけ無いだろう。
5年以上前の製品で、とっくに発売中止になっているぜ。
今から合法的にライセンス手に入れたいなら、MSDN契約しかないな。
利用者が一人なら複数のPCにインスコできるから、会社にライセンス買ってもらって、自宅のPCにインスコしる。
0231デフォルトの名無しさん
2005/06/12(日) 08:32:25AscとHex、場合によって文字コードをJISやEUCに変換する必要があるかも。
HTTPを扱おうと思うなら、HTTPの仕様ぐらい確認する。
0232デフォルトの名無しさん
2005/06/12(日) 08:52:03もちろん決して不可能では無いからさ。
マシン語のコードをVBのソースコードに埋め込み、バッファーオーバーラン等を利用して呼び出せばよい。
Windows95/98/MEでしか動作しないけどな。
ただこの板には、そういう高度なプログラムを書けるバッカーが居ないだけ。
0233デフォルトの名無しさん
2005/06/12(日) 12:00:58ソースに埋め込んだマシン語コードを動かすのに
バッファオーバーランなんぞ使う必要もねーべw
VBの機能とAPIを工夫し、それようにマシン語コードを用意すれば
配列とかに入れたマシン語コードを普通に呼び出せるぞ。
(それをVBプログラムと言い張る勇気は俺にはないがなw)
0234デフォルトの名無しさん
2005/06/12(日) 13:18:59その根拠が理解不能。
大体なんでその「マシン語コード」とやらを実効するのに
わざわざバッファオーバーランなんぞを使う必要があるのだろう。
っていうか、VBコンパイラが吐き出すコードだって(以下略
0235デフォルトの名無しさん
2005/06/12(日) 22:01:24http://www.microsoft.com/japan/msdn/columns/scripting/scripting051099.asp
一般に正規表現は、丸括弧の中をあとから $1, $2, .... とかで参照できると
思うのですが、その方法があれば教えて下さい。
以下のURLにてVBSの場合の例があり、出来ると思うのですが
試してみると Submatches がないと怒られます。
http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200311/03110053.txt
0236デフォルトの名無しさん
2005/06/12(日) 23:53:30下から3行目の、自分のPCのデータがどこにあるかを知りたいんですが、
どうすればいいんでしょうか?
デスクトップにBook1で保存しています
Dim x As Object
Private Sub Command1_Click()
Text1.Text = x.worksheets.application.cells(1, 1).Value
End Sub
Private Sub Form_Load()
Set x = GetObject("C:\Documents and Settings\\デスクトップ\Book1.xls")
x.worksheets.application.Visible = True
End Sub
0237デフォルトの名無しさん
2005/06/13(月) 00:26:08意味不明。
固定フォルダでないなら、ダイアログでフォルダを選択。
これを自動でやるなら、全ドライブ検索後、選択。
0238236
2005/06/13(月) 00:27:55デスクトップ\Owner\ でOKでした。
次なんですけど、これだと、セルの(1,1)しか表示しないんですが、
全部とは言わないですが、ある程度のセルの値を表示するにはどうすればいいのでしょうか?
0239デフォルトの名無しさん
2005/06/13(月) 00:40:25でセルの(1,1)指定してるじゃないか。
0240デフォルトの名無しさん
2005/06/13(月) 01:10:280241デフォルトの名無しさん
2005/06/13(月) 01:17:48「パソコン」にもうちょっと詳しくなってから来て下さいよ>236
0242デフォルトの名無しさん
2005/06/13(月) 10:22:311
なんで 1 なの?
0243デフォルトの名無しさん
2005/06/13(月) 10:52:5012 \ 12になるから。
0244デフォルトの名無しさん
2005/06/13(月) 11:48:24エクセルの「=IMEXP("1+1i")」をVB6.0で計算する方法です。
0245デフォルトの名無しさん
2005/06/13(月) 15:23:51理解できた。ありがとう。
0246デフォルトの名無しさん
2005/06/13(月) 19:36:28いま、VB6.0からEXCELを操作するプログラムを書いているのですが、
EXCELのセルを行、列ともに大きさを変えたい場合はどのようにすれば、
よろしいですか?
.Autofitではなく、任意で大きさを変えたいのですが?
0247デフォルトの名無しさん
2005/06/13(月) 22:32:29どうもうまく行きません。中の方のfor構文を別のプロシージャにして
呼び出すようにしても駄目です。 どなたかアドバイスください。お願いします。
0248デフォルトの名無しさん
2005/06/13(月) 22:37:25すみません。自己解決しました。
0249デフォルトの名無しさん
2005/06/14(火) 06:15:33ゴリゴリ書くしかなさそう。
手抜きしたかったら、シェアウェアのDLLで。
0250デフォルトの名無しさん
2005/06/14(火) 07:29:36Excelを立ち上げ、メニューから「ツール→マクロ→新しいマクロを記録」。
後は実際にマクロで行いたい操作をExcel上からやってみろ。
Excelのマクロに関する、大抵の問題は解決するはずだ。
0251デフォルトの名無しさん
2005/06/14(火) 18:03:57ありがとうございました。
ところで、エクセルで作った帳票があるのですが。印刷時に1行目から4行目まではヘッダー
として必ず印刷するにはどのような方法がありますか?
0252デフォルトの名無しさん
2005/06/14(火) 18:09:14ページ設定、シート、印刷のタイトルとか。
■ このスレッドは過去ログ倉庫に格納されています