advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 1039 for オートシェイプ (0.001 sec.)
[[20090331222522]]
#score: 6703
@digest: de59cbd22a52ba70c2e112973197bd13
@id: 42732
@mdate: 2009-04-05T05:37:44Z
@size: 11755
@type: text/plain
#keywords: labelt (78759), labell (74983), stime (50612), cunt (44989), 勉学 (31451), 学中 (31196), mousemove (31165), displaytop (29993), cury (29993), curx (29993), gettickcount (29199), 置") (28278), スカ (11592), single (11267), label1 (10230), 秒間 (9643), マウ (7123), ウス (6863), シェ (6774), ラベ (6619), ェイ (6378), ルマ (5435), static (5100), button (5049), ソル (4815), イプ (4726), ーソ (4531), 行中 (4510), 回目 (4450), ベル (4223), カー (3385), トシ (3050)
『ラベルの高さ』(勉学中)
本を参考にして 少しコードを変更してテスト実行していたのですが、 カーソルに、オートシェイプがくっつかなくなりました。下記の コードに問題が・・ありそうなんでが分からなく教えていただけますか? やってみたい事は グラフの画面上にラベルを貼り付け マウスカーソル(矢印)を 動かして少したったらその高さ位置を取得 Excel2000 OSはXP Dim CurX As Single, CurY As Single Private Declare Function GetTickCount Lib "kernel32" () As Long 'APIアクセス日時 'Dim sTime As Long Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As integer, ByVal X As Single, ByVal Y As Single) CurX = X 'ラベルマウスカーソル位置取得等 CurY = Y Static cunt As Byte Dim LabelL As Single, labelT As Single Dim sTime As Long cunt = 0 sTime = 0 With Sheet2.Label1 LabelL = .Left labelT = .Top End With With Sheet2.Shapes("位置") Do DoEvents .Left = CurX + LabelL .Top = CurY + labelT If sTime = 0 Then sTime = GetTickCount() If GetTickCount() - sTime >= 700 Then Exit Do Loop If cunt = 0 Then MsgBox .Top cunt = 1 End If End With End Sub ' Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) With Label1 'ラベルマウスカーソル クリック画面 変更解除 .Visible = False .Visible = True End With End Sub 上記のコード(Sheet2) Sheet2にラベルを設定 (Label1) タバコサイズくらいかな 透明に設定:枠線付 Sheet2にオートシェイプを設定 名前を(位置) 小さめカーソルぐらい よろしくお願いします。 ---- Excel2003、XPでは動きました。 「With Sheet2」が2箇所ありますが 下のようにシート名を直接指定する書き方にしてみてください。 「With Sheets("Sheet2")」 このぐらいしか思いつきませんでした。 (やっちん) ---- やっちんさま 有難うございます。 「With Sheets("Sheet2")」に修正してみましたが、同じ現象が起こります。 説明不足がありました。ごめんなさい マウスカーソルをラベル上に動かすと、始めのほうは、良いのですが、続けて 6回・・と続けると段々 オートシェイプがたまに くっつかなくなりました。その時は、MsgBox 表示後、少々の時間 コードウィンドウ[実行中]になっています。 コードウィンドウを見て Exit Do から 抜け出ているはずなのに 何回か続けているのが原因かな? (勉学中)申し訳ありませんが、明後日ぐらいしかレスできない場合あります。 ---- 別のシートで動いているのかとも思いましたが違ったようですね。 私の環境では何度でも動いています。 くっつかないというのはその時だけオートシェイプが動かないという意味ですか? カーソルを高速に動かしてそれに思ったよりついてこないということでなければ こちらでは再現できないのでこれ以上はわかりません。 >MsgBox 表示後、少々の時間 コードウィンドウ[実行中]になっています。 MsgBoxが表示されている間は実行中です。 (やっちん) ---- やっちんさま 検証・返答して頂きありがとうございます >私の環境では何度でも動いています。 ありゃ このPCが原因なのかな 一度別の環境で確かめて見ます。ちょいと日にちがかかるかも・・ >くっつかないというのはその時だけオートシェイプが動かないという意味ですか? マウスカーソルをラベル上に動かすと、始めのほうは、(1回目MsgBox表示)の良いのですが、続けて何度も (6回目のMsgBox表示)・・と続けると [If GetTickCount() - sTime >= 700 Then Exit Do]の時間0.7秒間は、マウスが自由に動きシェイプも比例して動く予定がシェイプがマウスに ついてこなくシェイプが止まっている、マウスは動かせます。0.7秒間も立っていないような感じでMsgBoxの表示となります。 >MsgBoxが表示されている間は実行中です。 MsgBox 表示終了後、OKボタン後の少々の時間 コードウィンドウ[実行中]になっています ループしているようです。 もしよろしければ cunt = 1 を cunt = 0とした場合は、 一回目のシェイプ移動後0.7秒間で msgbox表示エンター押しその後のmsgbox表示は 何回表示されますでしょうか?ちなみに私は、2回以上表示されます。 -略- ' If cunt = 0 Then '削除 MsgBox .Top < ここに end ' cunt = 1 '削除 ' End If '削除 End With End Sub 上記のところに END と、入れた場合は、スムーズに動きます。 エクセルマクロ END(プログラム終了)の使用の場合問題はないのでしょうか? レベル低ですみません 教えていただけるでしょうかよろしくお願いします。 (勉学中) ---- 0.7秒の間にオートシェイプが動くというのはなりませんでした。 挙動がそもそも異なるようですが、私の環境でテストをして次のことが分かりました。 A.マウスカーソルをラベルの中で止めると、MouseMoveイベントの2回目が起こる。 B.MouseMoveイベントが2回起こる場合は、1回目の処理が終了してから2回目が起こる。 勉学中さんの事例だと、イベントの処理中に次のイベントが起こっているような気がします。 そうでもなければ、0.7秒の間にオートシェイプが動くことはありません。 私がイベントの2回目が起こることに気付かなかったのは、Msgboxの表示がラベル外にあり、 ボタンをマウスで押していたのでイベントは1回しか起こらなかったからでした。 >もしよろしければ cunt = 1 を cunt = 0とした場合は、 >一回目のシェイプ移動後0.7秒間で msgbox表示エンター押しその後のmsgbox表示は >何回表示されますでしょうか?ちなみに私は、2回以上表示されます。 動きに変化はありません。表示されません。 > エクセルマクロ END(プログラム終了)の使用の場合問題はないのでしょうか? MsgBoxを1回表示した後に終了します。ENDはあまり使用することはないのですが 今回の場合は、誤動作するわけではないのでかまわないと思います。 (やっちん) ---- やっちんさま お返事ありがとうございます。 >A.マウスカーソルをラベルの中で止めると、MouseMoveイベントの2回目が起こる。 >B.MouseMoveイベントが2回起こる場合は、1回目の処理が終了してから2回目が起こる。 検証・返答 大変ありがたく思っています。多分このようなことが普通なんだろうな >動きに変化はありません。表示されません こちらの環境が、おかしいみたいです。msgbox後,cunt = 1を、しないと2度・・と,コード-End If- ↓ -End With-↓-End Sub-に 到達しているにもかかわらず 再度 -Do-と、数回ループして msgboxの表示がされてしまう為、 If cunt = 0 Thenと、設けました。 >> エクセルマクロ END(プログラム終了)の使用の場合問題はないのでしょうか? お答え頂きありがとうございます。Endを、追加して上記の対策とさせていただきます。 ちなみに、他の環境のテスト結果は、来週ぐらいにでも出来ると思うので一様、報告予定とします。 やっちんさま お忙しい中、長々と、お付き合い頂きありがとうございました。とても参考になりました。今後とも、いろいろとご指導下さいね。-感謝- (勉学中) ---- 私の環境ではこれが一番近い動きだと思われます。 下記のモジュールを入れ替えてみてください。 Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) CurX = X 'ラベルマウスカーソル位置取得等 CurY = Y Static sTime As Variant Dim LabelL As Single, labelT As Single If IsEmpty(sTime) Then sTime = GetTickCount() Else With Sheet2.Label1 LabelL = .Left labelT = .Top End With With Sheet2.Shapes("位置") If GetTickCount() - sTime < 700 Then .Left = CurX + LabelL .Top = CurY + labelT 'DoEvents Else MsgBox .Top sTime = Empty End If End With End If End Sub こっちの方がいいかも。 Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) CurX = X 'ラベルマウスカーソル位置取得等 CurY = Y Static sTime As Variant Dim LabelL As Single, labelT As Single Static cnt As Long If IsEmpty(sTime) Then sTime = GetTickCount() cnt = 1 Else cnt = cnt + 1 With Sheet2.Label1 LabelL = .Left labelT = .Top End With With Sheet2.Shapes("位置") If GetTickCount() - sTime < 700 Then .Left = CurX + LabelL .Top = CurY + labelT ' DoEvents Else If cnt = 1 Then MsgBox .Top sTime = Empty End If End If End With End If cnt = cnt - 1 End Sub (やっちん) ---- やっちんさま お手間おかけしまして、貴重なコードありがとうございます。 コード 1・2共にテストしましたが、ラベル内にマウス→07秒経過(シェイプもマウスと連動)後、位置(msgbox)の表示となりましたが 近いのですが思うような結果が得られませんでした。 説明不足が合ったかも知れないのですが、ラベル上にマウスを0.7秒位 同じ位置に 停止の場合に 位置(msgbox)取得したいと思っています。シェイプもマウスと連動としてです。 やっちんさまのコードに、 -略- Private Declare Sub Sleep Lib "kernel32" (ByVal tim As Long) -略- .Left = CurX + LabelL .Top = CurY + labelT Sleep (700)' '1000/1秒の停止API関数宣言 ' DoEvents If .Top = CurY + labelT Then ' Else ' If cnt = 1 Then MsgBox .Top をなんとなく、Sleep (700)の前と後で同じ位置と考えたのですがNG 甘かった。 (勉学中) ---- >説明不足が合ったかも知れないのですが、ラベル上にマウスを0.7秒位 同じ位置に >停止の場合に 位置(msgbox)取得したいと思っています。シェイプもマウスと連動としてです。 イメージしている仕様と全く違っていました(^^; できるかどうかわかりませんが、もうちょっと考えてみます。 (やっちん) ---- これと差し替えてください。 Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim LabelL As Single, labelT As Single Static sTime As Date On Error Resume Next Application.OnTime sTime, "DisplayTop", , False On Error GoTo 0 sTime = Now() + TimeValue("00:00:01") Application.OnTime sTime, "DisplayTop" With Sheet2.Label1 LabelL = .Left labelT = .Top End With With Sheet2.Shapes("位置") .Left = X + LabelL .Top = Y + labelT End With 'DoEvents End Sub それと標準モジュールに下のモジュールをコピペしてください。 Sub DisplayTop() With Sheet2.Shapes("位置") MsgBox .Top End With End Sub 少し仕様が違うのは0.7秒ではなく1秒になっているのと ラベルから外にカーソルが出たときにも1秒後にMsgBoxが表示されます。 (やっちん) ---- やっちんさま 深夜にもかかわらず ありがとうございます。 >イメージしている仕様と全く違っていました ありゃまー 誤解をさせてしまい誠にすみませんでした。 思っていることと ピッタシカンカン。 秒数は、そんなにこだわっていないので、やっちんのコードを有難く使わせていただきますょ Application.OnTime sTime, "DisplayTop", , False 等が、意味も分かっていませんが、調べて 理解しようと思います。本当に いろいろと、やっちんさまにはおんぶに抱っこ状態でお付き合いしていただき ありがとうございます。-感謝- (勉学中) ---- こういう構造になったのは、MouseMoveがラベル上でマウスカーソルを動かしたときに実行されるため、 同じ位置に停止していると実行されないからです。必然的にMouseMoveのモジュールの外に MsgBoxの部分を出すことになりました。 OnTimeを調べれば内容は分かると思います。 (やっちん) ---- やっちんさま 丁寧に補足まで頂きありがとうございました。 まだまだ 初心者で 完璧に理解とはなりませんが何となく分かった感じで・・ 凄く奥が深いなー(マクロ) でも、いろいろ私が思っている以上凄い事が出来そうで、感激です。 なにぶん、キーボード等もろくに打てなく、週にわずかな時間しか、PCの前でエクセルを触れませんが、私なりに頑張りたいと思います。 いろいろこれからもこの学校等で、やっちんさま、学校の皆様には、お世話になるかと思いますが 宜しくお願いいたします。 (勉学中) ...
https://www.excel.studio-kazu.jp/wiki/kazuwiki/200903/20090331222522.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97049 documents and 608241 words.

訪問者:カウンタValid HTML 4.01 Transitional