VBプログラマ質問スレ(6.0以前) Part51
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/01/28(日) 10:57:31質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、
「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。
VB.NETは別物なので専門スレで、VBA、APIの質問もそれぞれのスレで。
○ 質問者の心得
一.質問する前にMSDNやGoogle、過去ログにも目を通してみる。
二.VBScript、インストーラーなどはこのスレでOK。
三.質問は第三者にもわかりやすいよう簡潔かつ具体的に。
四.荒らしは相手しない。
○ 回答者の心得
一.答えられない質問は無駄に罵倒せずスルー。無理するな。
二.代用法を強制しない。
三.回答する上で必須ではない情報をむやみに聞き返さない。
四.荒らしは相手しない。
五.VB情報募集中。
六.回答は質問者が理解できるよう具体的に。
MSDN Online Japan ホーム
http://www.microsoft.com/japan/msdn/default.asp
Visual Studio 6.0 Service Pack 6
http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx
http://www.google.co.jp/
※「まず自分で調べる」クセを身につけよう。
0951デフォルトの名無しさん
2007/05/12(土) 12:01:51たしかメッセージボックスで大丈夫だった気がする
0952デフォルトの名無しさん
2007/05/12(土) 13:14:28ユーザーフォームをvbmodelessで開けばいいと思う。
>>951
msgbox関数では設定できないよな?
Win32API使うの?
0953デフォルトの名無しさん
2007/05/12(土) 13:19:260954デフォルトの名無しさん
2007/05/14(月) 09:50:50たしかそうなんだよな
EXEのときはそのまんま動いてたと思う msgboxの表示の仕方にも夜と思ったけど
0955デフォルトの名無しさん
2007/05/14(月) 11:04:500956デフォルトの名無しさん
2007/05/14(月) 11:12:040957デフォルトの名無しさん
2007/05/14(月) 11:15:45だったら、自作ダイアログをモードレス表示でいいんじゃないの?
どのタイミングでその結果が割り込むか調整必要だと思うけど。
0958デフォルトの名無しさん
2007/05/14(月) 11:33:290959デフォルトの名無しさん
2007/05/14(月) 11:34:58> msgboxの表示の仕方にも夜
そこをはっきりさせるのが
一番重要と思われwww
0960デフォルトの名無しさん
2007/05/14(月) 11:39:55VB6のMsgBoxにモードレスあるの?
0961デフォルトの名無しさん
2007/05/14(月) 11:41:41通信が停まらなければOKなんじゃねえの?
もともとメッセージボックス使おうとしてたわけだし
0962デフォルトの名無しさん
2007/05/14(月) 11:45:49msgboxにはなかったっけ?
0963デフォルトの名無しさん
2007/05/14(月) 11:46:13OnCommだったら非同期で動くのかな?
VBってsingleスレッドだったような・・・。
TimerでInputを読んでたらアウトかな?
0964デフォルトの名無しさん
2007/05/14(月) 11:48:28モーダルじゃそこで処理がとまっちまうべ。
モードレスがあるのか?って疑問なんだが。
>>961さんが言うように、MSCommがMsgBoxの待ちでもイベント受けるならまあいいんじゃないの?
(そもそもそんな擬似マルチスレッド状態でメッセージのYesNoを処理したくないが。)
0965デフォルトの名無しさん
2007/05/14(月) 11:50:40当時苦労したから覚えてる
0966デフォルトの名無しさん
2007/05/14(月) 11:52:29ロードとかでポートの設定やらオープンとタイマ起動
OnCommイベントで変数に格納
(取得した結果のチェックと各処理用フラグへの反映と一回前の状態の保存)
タイマイベント内でそのフラグを監視して立ち上がり・立下りの処理
て言う感じ
0967デフォルトの名無しさん
2007/05/14(月) 11:52:39メッセージがキューに溜まっていて処理されるの?
後者なら納得いくけど、前者だったら微妙な動作だね。
0968デフォルトの名無しさん
2007/05/14(月) 11:59:54タイマのイベント内
処理1
OnCommイベントとかが割り込み
処理2
みたいな
0969デフォルトの名無しさん
2007/05/14(月) 17:56:540970デフォルトの名無しさん
2007/05/14(月) 21:09:14行を追加して増やしたりしたいのですが、MSDNを見ても具体的な使用法はなく
検索しても、.netばかりヒットします。
お手数おかけしますが、どなたか教えてください。
よろしくお願い致します。
0971デフォルトの名無しさん
2007/05/14(月) 21:28:440972デフォルトの名無しさん
2007/05/14(月) 23:47:53Rowsっていうプロパティがありませんでした。
もしかしたら配列指定でできるかなと思ったのですがダメでした。
そういう使いかたするプロパティじゃ無いのでしょうか・・
0973デフォルトの名無しさん
2007/05/15(火) 09:21:490974デフォルトの名無しさん
2007/05/15(火) 09:53:370975デフォルトの名無しさん
2007/05/16(水) 18:33:53MSFlexGrid で、セルの1個をダブルクリックしたらそのまま
入力できるモード。というのは出きるのでしょうか。
色々いじってるのですが、できないので困ってます・・。
0976デフォルトの名無しさん
2007/05/16(水) 18:36:25Editmodeプロパティみたいなので 色々変えれた気がするけどVsFlexGridと混同しちゃってるかもwww
0977デフォルトの名無しさん
2007/05/16(水) 19:12:14「ダブルクリックしたらそのまま入力できる」というのを
テキストボックスなどを使って作っていくんだよ。
それがプログラミングというもの。
ttp://www.bcap.co.jp/hanafusa/VBHLP/MSFlexind.htm
そういうこと出来ないとか、やるのが面倒とかいうなら>>976みたいな
元から入力機構を備えたコンポーネントを買うか、Excel+VBAで我慢しなさい。
ttp://www.grapecity.com/japan/support/database/P1_223.htm
0978975
2007/05/16(水) 21:36:130979デフォルトの名無しさん
2007/05/17(木) 01:52:27コードウィンドウが分割されている場合にどちらがアクティブかを
知りたいのですが、何か方法はありますでしょうか?
VBInstance.ActiveCodePane でアクティブな CodePane は取得できましたが、
分割されているかなどは分りませんでした。VBInstance.ActiveCodePane.Window.Top で
区別が可能かとも思ったのですが、アクティブではない方も同じ値でした。
API の GetCaretPos でのカレット位置もウィンドウの分割を無視した座標でした。
半ばあきらめかけてますが、よい方法がありましたらよろしくお願いします。
0980デフォルトの名無しさん
2007/05/17(木) 09:10:16GetCaretPosしたら、ちゃんとどちらがアクティブかわかるような座標が返ってきたが、いったいどこで悩んでいるんだ?
どちらで実行してもコードウィンドウの左上を基準とした座標で取れるから
下のペインなら一番上の行でも POINT.y が 300 とかそれなりの値になってるがな
0981デフォルトの名無しさん
2007/05/17(木) 21:25:27レス感謝です。
例えば下ペインがアクティブな場合、スクロールバーを下にスクロールさせて
カレットが上ペインで隠れてしまったような状態の場合、
GetCaretPos で取得できた座標は上ペインに当たる座標が返ってきてました。
POINT.x が負数になっていたので区別できるかとも考えたのですが、
上ペインがアクティブで横スクロールによるカレットが画面外の場合と区別がつかなそうでした。
書き込み後、もう1度確認してみます。
0982デフォルトの名無しさん
2007/05/18(金) 04:35:32たしかに GetCaretPos でやる方法は指摘のとおり無理があったわ
んで ActiveCodePaneで無理みたいに書いてたから試してなかったけど
試しにコード書いてみたら一応判定出来たっぽい・・・w
あんましテストしてないから、本当に上手くいくか検証して報告してくれ
Public Enum VBE_CODEPAIN
CODEPAIN_SINGLE '分割されてねえ
CODEPAIN_TOP '上がアクテブ
CODEPAIN_BOTTOM '下がアクテブ
End Enum
つづく。。。
0983デフォルトの名無しさん
2007/05/18(金) 04:36:09Public Function GetActiveCodePain(ByRef pVBE As VBIDE.VBE) As VBE_CODEPAIN
Dim i As Long
Dim pActive As CodePane
Dim pCompo As VBComponent
Set pActive = pVBE.ActiveCodePane
Set pCompo = pVBE.ActiveCodePane.CodeModule.Parent
For i = 1 To pVBE.CodePanes.Count Step 1
If pVBE.CodePanes(i) Is pActive Then
Exit For
End If
If pVBE.CodePanes(i).CodeModule.Parent Is pCompo Then
GetActiveCodePain = CODEPAIN_BOTTOM
Exit Function
End If
Next i
For i = i + 1 To pVBE.CodePanes.Count Step 1
If pVBE.CodePanes(i).CodeModule.Parent Is pCompo Then
GetActiveCodePain = CODEPAIN_TOP
Exit Function
End If
Next i
GetActiveCodePain = CODEPAIN_SINGLE
End Function
0984デフォルトの名無しさん
2007/05/18(金) 17:24:31環境:エクセル2000 WIN2000
「質問内容」
目的:「エクセルのセルの中身が、変更したらVBAの処理が起動するようにしたい」
・セル1+セル2=セル3
このような状態で「セル3が変更したら、VBAの処理を起動させる」ようにしたい。
セル1・2は、サーバーとの自動連携により勝手に値が変わる。
セル3には、「=セル1+セル2」の式を入れてます。
この状態だと、Worksheet_Changeが起動しません。
セル1もセル2も、自動連携の為、値が変わっても「値が変わってる」と判断しません。
セル3も数式が入れてあるので、値が変わっても「値が変わってる」と判断されません。
このような状態で、値が変わったら、VBAを動かす方法はありますでしょうか?
何か良い方法がありましたら教えてください。
0985デフォルトの名無しさん
2007/05/18(金) 17:35:08=SUM(A1:B1)
みたいに
ついでにここはVBAスレじゃない
0986デフォルトの名無しさん
2007/05/18(金) 17:55:31すいません、VBAスレ探したんですが無かったんでココで質問しました。
すれ違いなのに、レスありがとうございます。
えっと、おっしゃりたいことは。。
関数を使えば値が変更されてる事になるってことで、よろしいですか?
(今試して見てるんですが、どうもうまくいかないので、
私の認識が間違えているのかなっておもって)
0987デフォルトの名無しさん
2007/05/18(金) 18:01:53自動計算されるセル3が変わったら・・かぁ・・
どういう連携やっててChange発生しないのかわからないけど
自動計算が走るって事は Caliculateイベントは発生しているっぽい・・・?
0988デフォルトの名無しさん
2007/05/18(金) 18:13:09>自動計算が走るって事は Caliculateイベントは発生しているっぽい・・・?
Caliculateイベントを使ってるのではなく、単純に数式を入れていますので、動いてないです。
(Caliculateイベントは「値の変化」が認識されないから、使えない状態です)
0989デフォルトの名無しさん
2007/05/18(金) 18:21:42一体どんな連携処理してるんだ?
同じような感じで適当にデータ入れて =SUM つかって セル3を自動計算するようにしたけど
ちゃんとChange発生しているんだが・・・
0990984
2007/05/18(金) 18:43:03>一体どんな連携処理してるんだ?
すいません、どうなっているのか詳しく分りません。
私が分る範囲で答えると、セルにの「ツールのリンクを貼る」と
貼ったセルに値が表示される。
そのツールで値が変われば、セルの値も変更されていく。
っていうものです。
Changeは、セル3が自動計算された時に動いたんですか?
再度試したんですが、私の方ではやはり=SUMの自動計算の時には、
Changeが動かないです。
すいません、もっと面倒でもいいので、他の方法があったら教えていただけませんか?
0991デフォルトの名無しさん
2007/05/18(金) 19:48:57ってことは何かのコントロールを貼り付けているのかなぁ・・・?
ツール側で何かイベントが出ていればらくなんだけど・・・・
ちょっと調べたり試してみてたんだけどVBAではイベントとかフックできないから難しいなぁ・・・
ごめんよ 力不足でorz
0992984
2007/05/18(金) 20:00:40ツール側でのイベントは、無理みたいです。
いえいえ、態々調べてまでいただいてありがとうございました! うれしかったです。
今日は、これが終わらないと帰れなそうなので、もし思いついたりしたら教えてください。
0993デフォルトの名無しさん
2007/05/18(金) 20:09:04とりあえずVBAで聞けばいいんじゃないかな?
0994984
2007/05/18(金) 20:11:28うわっ。 ありました。。orz 検索かけたはずなのに。。
スレ汚しすいませんでした。
移動します。
0995デフォルトの名無しさん
2007/05/19(土) 04:37:43標準モジュールに共通関数を大量に作る事と
勘違いしているVB6.0使いのなんと大量にいることか!!!
0996デフォルトの名無しさん
2007/05/19(土) 06:43:580997デフォルトの名無しさん
2007/05/19(土) 07:00:39すれ違いの釣りを相手にすんな
0998デフォルトの名無しさん
2007/05/19(土) 08:10:16おれはCollectionにキーがあるか調べる関数とかおいてあるが
0999デフォルトの名無しさん
2007/05/19(土) 08:24:56わかったから黙れよ
1000デフォルトの名無しさん
2007/05/19(土) 08:26:2910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。