KoMaDo   VISIO SQUARE : VB/VBA  ■ Headline ■ HOME    

 KoMaDo / Headline / category :  【VISIO全般】  【News/宣伝】  【図形・操作】  【ファイル変換】  【ShapeSheet】  【VB/VBA】  【雑談その他】 ;

231 :カスタムプロパティ変更のイベントをとらえるには(08)  232 :エクセルファイルのデータをvisioに反映させるには(02)  233 :図形を違うVSDにコピー(06)  234 :アイコン色替えでVisio.exeメモリ増加(09)  235 :シェイプの指定(02)  236 :グループ図形の中の図形のID(02)  237 :Visioのアプリケーションのサイズについて(03)  238 :指定したカスタムプロパティの削除(02)  239 :テキストファイルを自作アプリケーションで表示(06)  240 :グループ化されたレイヤの変更について(19)  241 :以前ActiveだったページをActiveにする(23)  242 :GetWindowRectの誤差(?)(03)  243 :シェイプのカスタムプロパティの数(06)  244 :プロの方に質問です。(02)  245 :IVSelection型からVisio.Shape型のキャスト(04)  246 :このプログラムのフローチャートを作ってください(05)  247 :タイマーイベント(03)  248 :ListBoxに横スクロールバーを表示したい(04)  249 :印刷について(02)  250 :意外と便利なDropメソッド(01)  251 :半角→全角に変換する関数(03)  252 :VB.net2003でスキャンディスク・デフラグ(01)  253 :Microsoft Forms2.0 ListBoxのイベントについて(03)  254 :Microsoft Forms2.0 ListBoxの操作方法2(09)  255 :Excelファイルの保存終了方法(07)  256 :GUID(03)  257 :テキストの表示/非表示(04)  258 :変形中の直線の始点・終点の判別(08)  259 :カスタムプロパティに制限(04)  260 :VBAから別のBOOKのVBAにstringのパラメータ付きで起動したい(02)  261 :LabVIEWからデータベースリフレッシュを自動で行う(02)  262 :総合計 と GrandTotal(02)  263 :空白(03)  264 :VB6で作ったExeをモーダルで表示する方法(09)  265 :メニューに追加した項目が表示されない(02)  266 :追加したメニューにイベントが追加できない(05)  267 :VBで(02)  268 :dllを作成しなくても動かせる方法(05)  269 :DrawingControlでコネクタツールを使用する方法(13)  270 :カスタムプロパティーの値を取得する(13) 
ログ検索  リロード  前のページ  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 次のページ  総てのスレッド  スレッド総数 696231 - 240 を表示


231: カスタムプロパティ変更のイベントをとらえるには  全レス

01: 名前:son投稿日:2005/03/04(金) 14:38
カスタムプロパティの入力値(value)が変更されたときのイベントをとらえる方法が知りたいです。
VBAのThisDocumentで選べるものでDocument_BeforeShapeTextEditのようなイベントもありますが、カスタムプロパティの値の変更に関するものはないようです。
どなたかご存知の方いらっしゃいませんか?

02: 名前:yoda投稿日:2005/03/04(金) 15:41
CellChanged イベントを使えばできそうですね。

03: 名前:son投稿日:2005/03/04(金) 18:34
ご回答ありがとうございます。
CellChanged で試したところ、カスタムプロパティの変更のイベントは
とらえたのですが、図形の位置が変わるなどでも同じイベントとして
とらえてしまいました。FormulaChangedで試しても同じです。

04: 名前:yoda投稿日:2005/03/04(金) 19:42
あとは、工夫しだいですね。
CellChanged の引数でCell が分かりますから。

05: 名前:son投稿日:2005/03/07(月) 10:47
引数vMoreInfoから特定できました。いろいろありがとうございました。

06: 名前:yoda投稿日:2005/03/07(月) 20:14
おっ、そうですか。よかったですね。
どんな方法なのですか、ぜひ、教えてください。

07: 名前:son投稿日:2005/03/09(水) 17:45
デバッグしてみたところ、カスタムプロパティが変更された場合、
引数vMoreInfoに"/sec=243"を含む文字列が設定されているようです。
今回は、FormulaChangedのイベントを拾った上、
"If InStr(vMoreInfo, "/sec=243") > 0 "の判断を加えて特定しました。
ちなみに、ほかの引数から(nEventSeqNumなど)変更になった
カスタムプロパティの行目、値、対象オブジェクトの情報も取得できます。

以下今回のテストソースをご参考に載せます。
上記vMoreInfo判断以外のところは、ほとんどMicrosoftのHPを参考に
しています:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/Jpvssdk11/html/vimthAddAdvise.asp [source] [check]
<テストソース例>

'@classモジュール"clsEventSink"を新規作成し、下記内容を追加
'
Implements Visio.IVisEventProc

'Declare visEvtAdd as a 2-byte value
'to avoid a run-time overflow error
Private Const visEvtAdd% = &H8000

Private Sub Class_Initialize()

End Sub

Private Function IVisEventProc_VisEventProc( _
ByVal nEventCode As Integer, _
ByVal pSourceObj As Object, _
ByVal nEventID As Long, _
ByVal nEventSeqNum As Long, _
ByVal pSubjectObj As Object, _
ByVal vMoreInfo As Variant) As Variant

Dim strMessage As String
Dim inC As Integer

'Find out which event fired
Select Case nEventCode
Case visEvtMod + visEvtFormula
'##↓今回工夫したところ
'カスタムプロパティの値が変更された場合
If InStr(vMoreInfo, "/sec=243") > 0 Then
MsgBox ("カスタムプロパティが変更されました")

End If
End Select
'Display the event name and the event code
End Function
'Aイベント追加モジュール
'
Option Explicit

Private mEventSink As clsEventSink

Dim vsoDocumentEvents As Visio.EventList
Dim vsoDocumentFormulaChagedEvent As Visio.Event

'Declare visEvtAdd as a 2-byte value
'to avoid a run-time overflow error
Private Const visEvtAdd% = &H8000

Public Sub CreateEventObjects()

'Create an instance of the clsEventSink class
'to pass to the AddAdvise method.
Set mEventSink = New clsEventSink

'Get the EventList collection of the active document.
Set vsoDocumentEvents = ActiveDocument.EventList

'Add Event objects that will send notifications.
'Add an Event object for the DocumentSaved event.
Set vsoDocumentFormulaChagedEvent = vsoDocumentEvents.AddAdvise( _
visEvtMod + visEvtFormula, mEventSink, "", "Formula chaged...")

End Sub

08: 名前:yoda投稿日:2005/03/09(水) 20:31
ありがとうございました。
こんな方法があるんですね。
勉強になりました。

■トップに戻る リロード  単独スレ表示



232: エクセルファイルのデータをvisioに反映させるには  全レス

01: 名前:木下投稿日:2005/03/04(金) 18:27
エクセルファイルにあるプロパティファイルを
visioに反映する方法を教えてください。

02: 名前:yoda投稿日:2005/03/04(金) 19:45
>プロパティファイル
これはどういうものでしょうか?
>visioに反映
何をどのように?

■トップに戻る リロード  単独スレ表示



233: 図形を違うVSDにコピー  全レス

01: 名前:投稿日:2005/03/03(木) 14:11
アクティブページの図形を、
自動的に、指定したVSDファイルを開き
そのVSDファイルにコピーしたいのですが
何かマクロで簡単にできますか

02: 名前:yoda投稿日:2005/03/03(木) 15:16
できるとおもいますよ。
がんばってください。

03: 名前:M3号投稿日:2005/03/04(金) 13:14
http://www.mster.co.jp/visiosquare/course/04/index.html [source] [check]
を参考にしてみてはいかがでしょうか

04: 名前:投稿日:2005/03/04(金) 14:09
ありごがとうございます。

一点疑問なのですが、
Application.ActivePage.Drop shpObj, 1.3, 2.5

図形を貼り付けた際に座標を指定したいのですが、上記1.3や2.5の
単位や意味を教えて頂けないでしょうか
イメージ的には、図面の左下の座標が(0,0)だと認識しているのですが
そこから(x、y)=(200 mm 300 mm)
に配置するにはどのように指定すればよろしいでしょうか。
Application.ActivePage.Drop shpObj, 200, 300 ??

05: 名前:yoda投稿日:2005/03/04(金) 15:48
200, 300 は インチと解釈されますので、
200/25.4, 300/25.4 のようにするとよいと思います。

06: 名前:投稿日:2005/03/04(金) 16:26
ありがとうございます。

■トップに戻る リロード  単独スレ表示



234: アイコン色替えでVisio.exeメモリ増加  全レス

01: 名前:JOS投稿日:2005/03/01(火) 09:46
Visio2003 WindowsXP/Windows2000
案内表示のような事をしたくてVBAで、適当な間隔でアイコンの色を
順番に替えていきそれを永久ループにして表示したところ
Visio.exeのメモリ使用量がどんどん増えていきそのうちに
Visio自体が死にました。何か回避方法はないでしょうか?
ループの間にDoEventsとAPIの Sleep をいれています。

02: 名前:yoda投稿日:2005/03/01(火) 10:07
Timer関数ではどうでしょうね。
VBAのhelpにサンプルコードが
あります。

03: 名前:JOS投稿日:2005/03/01(火) 11:13
ありがとうございます。
さっそく試してみたのですが状況は変わりませんでした。
タスクマネージャーのプロセスをみているとやはりメモリ使用が
増えていきます。何かワンクッションイベントを入れるか、メモリ
クリアみたいなのがあればいいような気はするのですがよく
わかりません。もしかしたらコードの書き方に問題があるかも?
以下サンプルです。
基本フローチャートの四角を5個貼り付けてマクロ登録
Sub DSP_test02()
Dim intI As Integer
Dim UndoScopeID1 As Long
Dim PauseTime, Start

'アイコン表示初期クリア
For intI = 1 To 5
UndoScopeID1 = Application.BeginUndoScope("塗りつぶしのプロパティ")
Application.ActiveWindow.Page.Shapes.ItemFromID(intI).CellsSRC(visSectionObject, visRowFill, visFillForegnd).FormulaU = "1"
Next intI

intI = 5
While (1)
UndoScopeID1 = Application.BeginUndoScope("塗りつぶしのプロパティ")
Application.ActiveWindow.Page.Shapes.ItemFromID(intI).CellsSRC(visSectionObject, visRowFill, visFillForegnd).FormulaU = "1"

intI = intI + 1
If intI > 5 Then
intI = 1
End If

UndoScopeID1 = Application.BeginUndoScope("塗りつぶしのプロパティ")
Application.ActiveWindow.Page.Shapes.ItemFromID(intI).CellsSRC(visSectionObject, visRowFill, visFillForegnd).FormulaU = "2"

PauseTime = 1 ' 中断時間を設定します。
Start = Timer ' 中断の開始時刻を設定します。
Do While Timer < Start + PauseTime
DoEvents ' 他のプロセスに制御を渡します。
Loop

'DoEvents
'Sleep (100)
Wend
End Sub

04: 名前:yoda投稿日:2005/03/01(火) 12:05
急激にどうということはなく、安定していますが。
どのくらいの時間でダウンするのでしょう。

05: 名前:JOS投稿日:2005/03/01(火) 13:50
さっそくためしていただいてありがとうございます。
サンプルでは遅いので時間を1秒から0.1秒に変えて
加速してテストしました。
実行してから約27分で死にました。
動かしていたのはVisioとタスクマネージャーのプロセスの表示です。
Visio.exeのメモリ使用量をみていると70MBを超えるまでは動いて
いました。そのあとどこまで行って落ちたかは正確にはわかりません
動作環境
Epsonノートパソコン
IntelPentiumM 1.4GHz メモリ 512MB
WindowsXP Pro SP1
Visio2003 Pro

06: 名前:yoda投稿日:2005/03/01(火) 14:20
これでよいかどうかは分かりませんが、
1つは、UndoScopeIDの行をすべて削除、してはどうでしょうか。
必要がないものは、ない方がよいでしょう。
無限ループの中で、オブジェクトへの参照をできるだけ少なくしたらどうでしょうか。
これも、負荷軽減になると思いますが。
それでいいのかどうかは分かりませんが、たとえば、
Sub DSP_test02()
Dim intI As Integer
Dim PauseTime, Start
Dim myCell(1 To 5) As Cell

'アイコン表示初期クリア
For intI = 1 To 5
Set myCell(intI) = ActiveWindow.Page.Shapes.ItemFromID(intI). _
CellsSRC(visSectionObject, visRowFill, visFillForegnd)
myCell(intI).FormulaU = "1"
Next intI
intI = 5
While (1)
myCell(intI).FormulaU = "1"

intI = intI + 1
If intI > 5 Then
intI = 1
End If

myCell(intI).FormulaU = "2"

PauseTime = 1 ' 中断時間を設定します。
Start = Timer ' 中断の開始時刻を設定します。
Do While Timer < Start + PauseTime
DoEvents ' 他のプロセスに制御を渡します。
Loop

'DoEvents
'Sleep (100)
Wend
End Sub

07: 名前:鳥肌投稿日:2005/03/02(水) 10:08
UndoScopeIDの行を全て削除すると、生存時間が長くなるようです。
さらに1行目に下記を追加すると、メモリの増加自体を防げます。
Application.UndoEnabled = False

08: 名前:JOS投稿日:2005/03/02(水) 15:11
ありがとうございます。
UndoScopeIDの行を全て削除して実行しておりますが30分もたなかった
のが6時間を経過しても動いています。しかしVisio.exeのメモリ自体は
かなり増加して最初20M位だったのが400Mを越えたあたりで200Mまたは
300M台に1度下がってまた増え始める動きを繰り返しているようです。
いつ止まるかなと見ていて書き込みに気づきApplication.UndoEnabled = False
を入れてみました。なんかうまくいきそうです。
いくらVB/VBAが使えるからといっても図を描くのが本来の機能なので
自動表示のようなことは所詮無理かなとあきらめかけていたのですが
うまくいきそうです。しばらく連続動作させてみます。ありがとうございました。

09: 名前:yoda投稿日:2005/03/02(水) 17:15
Application.UndoEnabled = False
が決定打でしたね。
鳥肌さんありがとうございました。

■トップに戻る リロード  単独スレ表示



235: シェイプの指定  全レス

01: 名前:あつし投稿日:2005/02/28(月) 11:41
こんにちは
シェイプのNameIDがわかっていて
シェイプを指定する方法教えてください。

dim shp as visio.shape

Set shp = XXXXXX("sheet.1")

(NameId = "sheet.1")

02: 名前:M3号投稿日:2005/03/01(火) 08:41
set shp = Thisdocument.Pages(1).Shapes.Item(NameId)
でとってこれます。

■トップに戻る リロード  単独スレ表示



236: グループ図形の中の図形のID  全レス

01: 名前:あつし投稿日:2005/02/27(日) 01:33
グループ化された図形の中のいくつかの図形が存在しており
その図形の中のNAMEIDが存在しているかどうか
知りたいのですが、マクロをご存知でしたら教えてください。
例:
 sheet.3(オブジェクト.NameID)がグループ化された図形(sheet.1の場合)
の中存在するかどうか
又、ページの中にsheet.6(NameId)が存在するかどうかが知りたいです。

02: 名前:yoda投稿日:2005/02/27(日) 06:34
For Each shp In ParentSahape.Shapes
Debug.Print shp.NameID
Next
で、あと、いろいろ、工夫してみてはいかがでしょう。

■トップに戻る リロード  単独スレ表示



237: Visioのアプリケーションのサイズについて  全レス

01: 名前:K.K投稿日:2005/02/26(土) 00:54
Visioのアプリケーションのサイズ(縦、横)を
使用し、計算したいのですが取得できるのでしょうか
よろしくお願いします

02: 名前:yoda投稿日:2005/02/26(土) 09:39
どの寸法のことをサイズというのか分かりませんが、
getviewrectメソッドやgetwindowrectメソッドが
使えるかもしれません。
具体的には、ヘルプを参照してください。
そのほか、apiにもgetwindowrect関数があります。

03: 名前:K.K投稿日:2005/02/26(土) 11:29
Visioのアプリケーションのサイズ(縦、横)については
Visioのタイトルバーから一番下までのサイズと
Visioのタイトルバーとメニューバーを除いた作業領域部分(図面の開く部分)の
サイズの両方の値がとれるといいのですが

■トップに戻る リロード  単独スレ表示



238: 指定したカスタムプロパティの削除  全レス

01: 名前:ヨッシ投稿日:2005/02/26(土) 01:42
指定したカスタムプロパティを削除したいのですが
マクロで実装するにはどうすればいいのでしょうか

02: 名前:yoda投稿日:2005/02/26(土) 09:42
どのように指定するのかによって違うと思いますが、
shp.DeleteRow visSectionProp, shp.Cells("Prop.Row_2").Row
のような方法があります。

■トップに戻る リロード  単独スレ表示



239: テキストファイルを自作アプリケーションで表示  全レス

01: 名前:小学5年生投稿日:2005/01/29(土) 16:08
テキストファイルを わたしが作ったテキストエディタで
表示したいんですが
アプリケーションの指定をしてもエディタが立ち上がるだけで
テキストの表示がされません
こんな僕を助けてあげてください。

02: 名前:yoda投稿日:2005/01/29(土) 16:39
ここは、Visioのことを話し合うところですから、
それは、ちょっとできないでしょう。

03: 名前:小学5年生投稿日:2005/01/29(土) 17:03
こんな質問をして、すみませんでした。

04: 名前:小学5年生投稿日:2005/01/29(土) 17:05
でも、誰か助けてくれることを祈っています。

05: 名前:M.K投稿日:2005/01/29(土) 18:49
↑の質問、ココじゃマズイでしょう...
よろしければ、当方へメールで質問を...

06: 名前:K.K投稿日:2005/02/26(土) 00:44
Visioのアプリケーションのサイズ(縦、横)を
使用し、計算したいのですが取得できるのでしょうか
よろしくお願いします。

■トップに戻る リロード  単独スレ表示



240: グループ化されたレイヤの変更について  全レス

01: 名前:隆志投稿日:2005/02/24(木) 21:23
単独の図形をレイヤ変更すると、うまく変更されるのですが
グループ化された図形のレイヤを変更するとうまく反映されません
VBAでグループ化された図形のレイヤ変更方法を
どなたかご存知でしたら教えてください。

11: 名前:yoda投稿日:2005/02/25(金) 14:40
可能だと思います。

12: 名前:隆志投稿日:2005/02/25(金) 14:50
Prop.NumLinesを数式として判断してくれないのですが...

13: 名前:yoda投稿日:2005/02/25(金) 15:27
"Prop.NumLines"は、シェイプシート上のpropセクションの行の名前に
すぎません。文字であり数式ではありませんので、数式ではないと
いう結果が返されるでしょう。

14: 名前:隆志投稿日:2005/02/25(金) 15:48
シェイプシートのユーザ定義に、Prop.NumLineやStrCmp(aaa)などが
定義してあった場合、文字列ではないような判断をする
方法はないのでしょうか。

15: 名前:yoda投稿日:2005/02/25(金) 16:01
StrCmp(aaa)は、意味が分かりませんので、何ともいえませんが、
数値を返すものであるなら、isnumeric関数で、trueが返されるでしょう。
"Prop.NumLine"は、文字列ですので、数値と判別することは、
どのようにしてもできないのではないでしょうか?

16: 名前:隆志投稿日:2005/02/25(金) 16:21
申し訳ありませんが、レイヤ変更の際に
グループ化された図形の中のグループ図形のレイヤの変更の際に
先ほど教えて頂いた方法を使用したのですが
うまく反映されません
レイヤ情報をもっていないものに関してはうまく反映されるのですが
レイヤ情報を既にもっていてその図形のレイヤを反映しにいくと
うまく反映されないみたいです。
何か解決策がありましたら教えてください。

17: 名前:yoda投稿日:2005/02/25(金) 16:48
http://www.mster.co.jp/visiosquare/cgi-bin/upload/image/118.lzh [source] [check]
にマクロを付けた簡単な図面をアップロードしましたので、解凍して
図面を開いて、マクロ"test"を起動してみて、ご参考にしていただけ
れば幸いです。

18: 名前:隆志投稿日:2005/02/25(金) 17:12
ありがとうございます。

確認いたしましたが、グループの化された図形の中の指定されたシェイプIDの
のもののみ変更したいのですが、
(すべて変更するのではなく指定したもののみです)
情報伝えきれずに申し訳ございません

19: 名前:yoda投稿日:2005/02/25(金) 17:27
話が違うのではないですか?

その場合は、
Set shp = ActivePage.Shapes(1)としたところを、
たとえば、
myID = 2
Set shp = ActivePage.Shapes(1).Shapes(myID)
のようにすればよいと思います。

■トップに戻る リロード  全レスを表示


ログ検索  リロード  前のページ  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 次のページ  総てのスレッド  スレッド総数 696231 - 240 を表示