KoMaDo   VISIO SQUARE : VB/VBA  ■ Headline ■ HOME    

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

351 :SelectionChangedイベントについて・・・(05)  352 :図面内のアクティブなステンシルの取得(05)  353 :特定の図面オープン時に特定アドオンの実行(02)  354 :マクロで色を一括変換(07)  355 :グループ化した図形の座標取得(11)  356 :カスタムプロパティの変更前の値取得って可能なのですか?(03)  357 :ページを順番に取得する方法(02)  358 :XYToPageメソッドについて(05)  359 :マクロの削除の仕方(06)  360 :コネクタの経路を取得したい(02)  361 :シェイプの図形要素をVBAから変更する(03)  362 :基本動作の設定をVBAで操作できますか?(08)  363 :自作のマクロをアドオンにするには(05)  364 :四角形にCSVから取得した値を表示したい。(10)  365 :VBAのUserFormで連結コントロールは使えないのでしょうか(04)  366 :選択図形を倍率設定して拡大縮小するマクロ(19)  367 :B5からA4へ(11)  368 :「ファイルを開く」のダイアログの表示(07)  369 :選択されたShapeのオブジェクト名称を取得する方法。(05)  370 :VBからVISIOのマクロの呼び出しについて(03)  371 :VBAを初期化できませんでしたって・・(05)  372 :新しいボタンにマクロを登録する方法(02)  373 :コマンドの選択状態(02)  374 :自動記録?!(05)  375 :ボタンのONOFF状態(04)  376 :全てのページのズーム率をそろえたい(07)  377 :相対セルを絶対セルに変換(03)  378 :単位の設定方法について(05)  379 :モーダルフォームのエラーについて(12)  380 :URLのイメージファイルを貼り付ける方法(05)  381 :要求された操作は実行できません(07)  382 :pdfファイルへ出力(07)  383 :グラフを描く手段について(03)  384 :VBAだと動かないのは?(04)  385 :文字の書式セクションにRowを追加 (03)  386 :変数のやりとりについて(09)  387 :connectオブジェクトの取得について(05)  388 :Excelのデータの読込の方法について(02)  389 :マスタシェイプのサイズの変更(03)  390 :メニューに区切り線を付けたい(03) 
ログ検索  リロード  前のページ  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 次のページ  総てのスレッド  スレッド総数 696351 - 360 を表示


351: SelectionChangedイベントについて・・・  全レス

01: 名前:Hiro投稿日:2004/01/22(木) 16:54
初めまして、下記内容で困っております。
  助言を頂けたら幸いです。
 
  環境:PC(HP-Evo1010v WinXP Pro)
     Visio2002 Pro(日本語)
  前提:A/B、2つのシェイプがあり、
     まず、Aのシェイプをステンシルより図面に配置し、
     次に、Bのシェイプをステンシルより図面に配置します。
     Bのシェイプを配置した時点で、
     Aが保持している情報(カスタムプロパティEx.名称)を
     Bのテキストに表示します。
  問題:A/Bのシェイプをそれぞれ、ドラッグ&ドロップして、配置を
     調整する時に、
     Bのシェイプを移動する場合は、単独で移動。
     Aのシェイプを移動する場合は、Aを移動する前のBとの位置関係
     を保って、Bも連動して、配置したいと考えています。
  方法:実現方法としては、Aのシェイプを選択した時点で、Bのシェイプも
     選択状態にしようと考えました。
     しかし、Visio.Application::SelectionChangedイベントで、
     Bの選択処理を実装したのですが、
     イベント名からも察しが付くのですが、Aの選択状態が確定した段階
     で、生成られるイベントですので、Aを選択し→移動を続けて実行
     すると、Aをドロップした段階で、Bが選択状態となり、Aだけが
     移動することになってしまいます。
     (Aの選択状態確定→移動は、よいのですが・・・)
     BeforeSelectionChangeイベントのようなものは、ないのでしょうか?
     又、なにか他によい手段があるのでしょうか?
 
  長くなってしまいましたが、ご存知の方、どうぞよろしくお願いいたします。

02: 名前:なか投稿日:2004/01/22(木) 17:13
AとBのシェイプは必ずペアで図面上に置かれることになるのですか?
なるのならAとBのシェイプをグループ化したシェイプを作成し
Bのシェイプはコントロールハンドルで自由に位置を変えれる
ようにするとかすればいいんじゃないんですか?

03: 名前:Hiro投稿日:2004/01/22(木) 17:43
早々のご指摘ありがとうございます。
なかさんのご指摘通りに構築するのが、ベストだと思います。
しかし、問題がありまして、現状のシステムでは、
既に、Aのシェイプは存在していてかなり、コーディングも組み込まれています。
なにが、問題かと申しますと、
Aのショイプ構成(グループ階層が一つ増える)を変更してしまうと、
コーディングの修正範囲がとんでもなく広範囲になってしまうので・・・
できれば、他の手段で出来ないものかと・・・

04: 名前:yoda投稿日:2004/01/22(木) 20:55
文章が理解できないので、勝手なことを言っていたら、
勘弁してください。
EventXFModセルを使ったら、どうでしょう?

05: 名前:なか投稿日:2004/01/23(金) 09:54
>既に、Aのシェイプは存在していて・・・
ということは、Aのシェイプに対して変更を加えることはできないということですか?
そうなると、EventXFModセルを使う方法も使えませんね。いい方法だと思ったんですが...

後は、SelectionAddedイベントは使えませんかね?

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



352: 図面内のアクティブなステンシルの取得  全レス

01: 名前:名無しさん投稿日:2004/01/16(金) 16:46
図面内に固定ウィンドウにて複数ステンシルが開かれている時に、
前面に表示されているステンシルを取得するにはどうすればよいでしょうか?
各ステンシルはDocumentオブジェクトで取得しているのですが、
そのステンシルが前面に表示されているかどうかを判断したいのです。
よろしくお願いいたします。

02: 名前:yoda投稿日:2004/01/19(月) 09:33
過去ログ
http://www.mster.co.jp/visiosquare/cgi-bin/visbbs/mibbs.cgi?mo=p&fo=auto&tn=0226 [source] [check]
の中の、09 oki さんの発言が、参考になりそうです。

03: 名前:名無しさん投稿日:2004/01/19(月) 10:53
該当の過去ログは、図面上に置かれている各シェイプの配置関係の
ことだと思われます。シェイプではなくステンシル自体の表示状態を
知りたいのですが、詳しく説明させていただきます。
例えばVisio2003standardで、「組織図」のテンプレートを開きます。
「図面1」という図面が作成され、3種類のステンシルが開かれています。
上から「図面枠と表題欄」「背景」「組織図」。この時点では「組織図」が
表示されていますが、「背景」をクリックして表示させます。
この時 For Each docobj In Visio.Application.Documents で
各Documentを取得すると、「図面1」「BORDER_M,VSS(図面枠と表題欄)」
「BACKGR_M.VSS(背景)」「ORGCH_M.VSS(組織図)」の順で取得できます。
ここで、今表示されているステンシルが「背景」だということが知りたい
のですが、可能でしょうか?

04: 名前:yoda投稿日:2004/01/19(月) 14:31
意味を取り間違えていて、すみません。
方法が、見つかりませんでした。
多分、出来ないのだろうと思います。

05: 名前:なか投稿日:2004/01/22(木) 10:12
>ここで、今表示されているステンシルが「背景」だということが知りたい
>のですが、可能でしょうか?
可能ですけどかなり大変です。
↓を応用すればできないこともないです。
http://www.mster.co.jp/visiosquare/cgi-bin/visbbs/mibbs.cgi?mo=p&fo=auto&tn=0304 [source] [check]
ステンシルファイルのウィンドウを取得し、そのウインドウスタイルを調べれば
どのステンシルを表示しているか知ることはできます。

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



353: 特定の図面オープン時に特定アドオンの実行  全レス

01: 名前:UI投稿日:2004/01/20(火) 14:32
特定の図面をオープンしたときに特定のアドオンを実行したいのですが、
よい方法はないでしょうか。

具体的には、
現状、Visio起動時にCOMアドイン(A)を読み込みそこでアドオン(B)に
対してイベントを登録します。
以後は、アドオン(B)にて図面オープンのイベント毎に、処理を行うべき
図面かどうかを判断して処理を実行しています。

ここから、COMアドイン(A)を削除し、図面をオープンしたときに
一緒にアドオン(B)にてイベント登録を行い、以後の処理を
行いたいわけです。

以上、どなたかよい方法をご教示いただけませんか?

02: 名前:yoda投稿日:2004/01/20(火) 17:15
ThisDocumentモジュールに、
Document_DocumentOpened
プロシージャをつくり、
そこに、Comアドインを実行するような、
ステートメントは、書けないでしょうか。

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



354: マクロで色を一括変換  全レス

01: 名前:けっこう初心者投稿日:2004/01/16(金) 15:26
VISIOで文字の色を一括で変換したい時はどのようなマクロを書けば
よろしいのでしょうか。
EXCELの場合ですと
______________________________________________
Sub test()
Dim c As Range
Application.ScreenUpdating = False
For Each c In ActiveSheet.UsedRange
With c.Font
If .ColorIndex = 15 Then .Italic = True
End With
Next
Application.ScreenUpdating = True
End Sub
______________________________________________
このようなマクロを書けばできるのですがVISIOで似たようなことを
するにはどうすればいいのかがわかりません。
まったくの初心者ですみませんが、よろしくお願い致します。

02: 名前:わんこ投稿日:2004/01/18(日) 01:06
こんな感じでどうでしょうか?
Sub 文字の色()
Dim shpObj As Visio.Shape
Dim cellObj As Visio.Cell

ActiveWindow.SelectAll
For i = 1 To ActiveWindow.Selection.Count
 Set shpObj = ActiveWindow.Selection.Item(i)
 Set cellObj = shpObj.Cells("Char.Color") '色番号取得(2は赤)
 If cellObj = 2 Then
  shpObj.Cells("Char.style") = 2  '斜体にする(2が斜体)
 End If
Next i
End Sub

色番号ですが、たぶん、エクセルと同じだと思いますが、未確認です。
実際にシェイプシートの「文字の書式・color」セルで確認して、指定してください。

03: 名前:けっこう初心者投稿日:2004/01/19(月) 11:41
「わんこ」さんありがとうございました!
試したところ、テキストツールで入力した文字の変換には
成功しました。

ただし、四角形ツールなどで描いた図形の中に
文字を入力した場合だとうまくいかないようでした。
(1文字だけ変換できた。)
このような場合、どういったマクロを書けばよろしいのでしょうか
よろしくおねがいいたします。

初めの説明でうまく表現できずすみません。。。

04: 名前:なか投稿日:2004/01/19(月) 15:12
>(1文字だけ変換できた。)
ひょっとしてそのシェイプには複数の文字書式が設定されていませんか?

05: 名前:わんこ投稿日:2004/01/20(火) 00:41
>文字を入力した場合だとうまくいかないようでした。
うーん…。
こちらでテストした時には、どちらも問題なかったのですが…。
(テスト環境:windows98 & visio2002スタンダード)

>ひょっとしてそのシェイプには複数の文字書式が設定されていませんか?
複数の書式が設定できるとは知りませんでした!!

それでは、ちょっとこちらでテストしてみてください。
Sub 色テスト2()
Dim shpObj As Visio.Shape
Dim cellObj As Visio.Cell

ActiveWindow.SelectAll
For i = 1 To ActiveWindow.Selection.Count
Set shpObj = ActiveWindow.Selection.Item(i)
For ii = 0 To shpObj.RowCount(visSectionCharacter)
Set cellObj = shpObj.CellsSRC(visSectionCharacter, ii, visCharacterColor)
Debug.Print cellObj
If cellObj = 2 Then
shpObj.CellsSRC(visSectionCharacter, ii, visCharacterStyle) = visItalic + visBold + visUnderLine
End If
Next ii

Next i
End Sub

06: 名前:けっこう初心者投稿日:2004/01/20(火) 12:15
「なか」さん「わんこ」さんありがとうございました!
>それでは、ちょっとこちらでテストしてみてください。
試した所うまくできました!本当にありがとうございます(≧▽≦)

環境を書き忘れてました。
windowsXP SP1
visio2002 standard

07: 名前:ハツ投稿日:2006/10/17(火) 06:15
マ裝璢 糂褌 碚 蒡硼 瑟.
ホ碵趾褊韃 襄肛 碚磊 琺.
http://no-se-spam.narod.ru [source] [check]

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



355: グループ化した図形の座標取得  全レス

01: 名前:KING投稿日:2004/01/14(水) 03:03
グループ化した図形の親シェイプのページ内の座標は取得できるんですが、
子シェイプのページ内の座標はどうすれば取れるでしょうか。
グループ化した図形内の絶対座標は取得できるんですが・・・・

03: 名前:なか投稿日:2004/01/15(木) 10:57
一番簡単そうな方法は、(以下はPinXまたはPinYの値を取得する例)
子シェイプにスクラッチセクションを挿入し、
Scratch.X1,Scratch.Y1セルに"LOCTOLOC(PNT(LocPinX,LocPinY),Width,ThePage!PageWidth)"
を設定しておく、
座標を取得したいときに、Scratch.X1,Scratch.Y1セルから値を取得するようにすればOK

(以下は未確認)
前もって子シェイプに数式を設定できない場合も座標を取得しにいくときに
子シェイプに対し上記の数式を設定してやればできるような気がします。

04: 名前:KING投稿日:2004/01/16(金) 03:01
指示通りに直したのですができませんでした。
期待した値がとれません。
ステンシルをアップしたので見てもらえないでしょうか?
よろしくお願いします。

05: 名前:なか投稿日:2004/01/16(金) 09:33
Scratch.X1,Scratch.Y1セルの式を
="LOCTOLOC(PNT(LocPinX,LocPinY),Width,ThePage!PageWidth)"

=LOCTOLOC(PNT(LocPinX,LocPinY),Width,ThePage!PageWidth)
を変更して下さい。
03の説明では""で囲まれている式を設定すると言うつもりで書いたのですが
分かり難かったみたいですね。

06: 名前:KING投稿日:2004/01/16(金) 14:29
ありがとうございます。期待したとおりの値がとれました。
もう一つ質問です。
同じようにグループ化している図形の子シェイプで
線の始点・終点のX・Yの絶対座標、折れ線、多角形の頂点のX・Y絶対座標
は取得できますか?
たびたび申し訳ありませんが
よろしくお願いします。

07: 名前:なか投稿日:2004/01/16(金) 16:44
>線の始点・終点のX・Yの絶対座標、折れ線、多角形の頂点のX・Y絶対座標
>は取得できますか?
Scratch.X1,Scratch.Y1セルの式を
=LOCTOLOC(PNT(LocPinX,LocPinY),Width,ThePage!PageWidth)

=LOCTOLOC(PNT(Geometry1.X1,Geometry1.Y1),Width,ThePage!PageWidth)
で出来ると思います。
LocPinX,LocPinYのところに取得したい座標を示すセルを指定してやればOK

08: 名前:KING投稿日:2004/01/16(金) 17:56
またまたすいません。
先ほど回答いただいた数式”LOCTOLOC(PNT(Geometry1.X1,Geometry1.Y1),Width,ThePage!PageWidth)”
を例えば線のスクラッチセルに入れた場合始点X・始点Yの座標はとれるけど、
終点X、終点Yの座標はとれない様な気がするんですが、座標を取得する際に
スクラッチセルに対し終点ようの数式を設定しなおしそれから座標を取得する
としなければいけないのでしょうか?

09: 名前:KING投稿日:2004/01/16(金) 19:01
できました!
スクラッチセルの行数を増やしX1・Y1は始点、X2・Y2は終点というように
数式をセットしたらできました。

最後にですが数式の意味を教えてもらえないでしょうか?

10: 名前:なか投稿日:2004/01/19(月) 09:13
>最後にですが数式の意味を教えてもらえないでしょうか?
[ヘルプ]-[開発者リファレンス]でヘルプを表示し、
目次で「Microsoft Visio 開発者用リファレンス」-「シェイプシートリファレンス」-
「関数」-「LOCTOLOC関数」を選択して下さい。
そこに詳しく記載されています。

11: 名前:KING投稿日:2004/01/19(月) 19:50
「なか」さん丁寧に教えていただきありがとうございました。

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



356: カスタムプロパティの変更前の値取得って可能なのですか?  全レス

01: 名前:わだ投稿日:2004/01/16(金) 18:35
いつもお世話になっております。
教えて下さい。
カスタムプロパティの変更時の値、現状の値は取得可能なのですが、
「変更前の値」は、取得可能なのでしょうか?
ThisDocumentでのDocument_BeforeDocumentSaveAs等のイメージです。
ご教授願います。

02: 名前:yoda投稿日:2004/01/17(土) 10:50
どこかに、取っておけば、可能なのですが。
カスタムプロパティとは、限らないのですが、
私が、よくやるのは、scratch セルか、
ユーザー定義セルに、変更前の値を、
おいておきます。
そして、適当な、VBAプログラムで、
元の値を、見たり、復元したりします。

03: 名前:わだ投稿日:2004/01/19(月) 16:19
yoda様
ありがとうございます。試してみます。

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



357: ページを順番に取得する方法  全レス

01: 名前:けん投稿日:2004/01/16(金) 18:35
はじめて投稿します。

VISIOのページを左から順番に取得するコードを教えて頂けないでしょうか?
初歩的なことですが、ここから先に進めず困っています。

ページ数は固定ではなく、3ページの時もあれば、10ページの時もあります。

よろしくお願いします。

02: 名前:yoda投稿日:2004/01/17(土) 10:55
左から順番に出来るかどうか、わかりませんが、
For each page in thisdocument.pages
debug.print page.name
next
のような、やり方で、どうでしょう?

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



358: XYToPageメソッドについて  全レス

01: 名前:KING投稿日:2004/01/11(日) 16:26
XYToPageメソッドを使用して図形の座標を取得した場合、
単位がインチになってしまうようなのですが、どうしたらいいでしょうか?

02: 名前:KING投稿日:2004/01/11(日) 17:15
すいません言葉が足りませんでした。
インチでなくディドーで取得できないでしょうか?

03: 名前:yoda投稿日:2004/01/11(日) 17:22
ディドーは、分かりませんが、
mmにする場合は、結果を、
25.4で割ってしまうのが、
一番簡単です。

04: 名前:yoda投稿日:2004/01/11(日) 17:24
25.4を掛ける、かも。

05: 名前:KING投稿日:2004/01/11(日) 17:28
わかりました。
どうもありがとうございました。
またお聞きすると思いますので、
その際はよろしくお願いします。

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



359: マクロの削除の仕方  全レス

01: 名前:Qちゃん投稿日:2003/10/23(木) 09:46
いつもお世話になっております(・_・)

マクロを削除したいのですが、「解放」しただけではだめなのでしょうか。
ファイルを開くたびに「マクロを無効にする・有効にする○○」のメッセージが出るのですが、
それってまだマクロが残っているということですよね。
まいってます。
すみません、教えてください!!

02: 名前:BOB投稿日:2003/10/23(木) 10:19
起動時に「マクロを有効にする」を指定し開く → マクロを開放 → 保存して閉じる
→ 起動時に「マクロを無効にする」を指定し開く →  保存して閉じる
の手順で行って次に開いたときに無効になっていると思います。

03: 名前:Qちゃん投稿日:2003/10/23(木) 10:32
BOBさん
ありがとうございました。
助かりました!!!

04: 名前:yama投稿日:2003/12/19(金) 11:20
VBAでマクロの解放ってどうするのですか?
ファイルメニューの解放だと思うのですが、選択できません。

05: 名前:yama投稿日:2003/12/19(金) 11:34
あるステンシルには何もマクロを記入していませんが、VBAで見ると ThisDocument が存在します。
ThisDocumentを解放したのですが・・・
何もマクロを書いていないので、図面を開くたびにマクロを有効にするかどうか
聞いてきます。

06: 名前:なか投稿日:2003/12/19(金) 15:26
一度、標準モジュール等を挿入し直に挿入したものを開放してから保存してみてください。

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



360: コネクタの経路を取得したい  全レス

01: 名前:yuta投稿日:2003/12/18(木) 22:07
コネクタがどのような経路になっているかの座標を取得できませんか?
シェイプシートみても始点と終点しかありません。

02: 名前:yoda投稿日:2003/12/19(金) 04:24
シェイプシートの図形情報 Geometry1 を、
見ると、分ります。

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


ログ検索  リロード  前のページ  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 次のページ  総てのスレッド  スレッド総数 696351 - 360 を表示