KoMaDo   VISIO SQUARE : VB/VBA  ■ Headline ■ HOME    

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

121 :シェイプをレイヤに配置させたい(03)  122 :グループ化でオートメーション エラー(09)  123 :CTR+Zのときのイベントについて(03)  124 :TIPセルへの書き込み(05)  125 :selection_changed イベント(14)  126 :グループ化されたシェイプについて(26)  127 :動的コネクタの頂点のX,Y指定(10)  128 :クローズイベントについて(08)  129 :参照設定のパスについて(23)  130 :[表示(V)]メニュー[図形ウィンドウ(N)]の制御(18)  131 :シェイプのコピーを制限する方法について(02)  132 :図面をresizeする方法(09)  133 :絵のイメージで表示し、イベントはとりたい(04)  134 :EXCELのタスクをCOLSEするには?(03)  135 :vb6.0での(03)  136 :続)EXCELのデータを取り込むには?(03)  137 :VC++からのオートメーション起動について(02)  138 :drawingcontrol上の図面の印刷(06)  139 :シェイプがマスターより派生されたかどうか調べる方法(09)  140 :改行コードについて(03)  141 :図ツールの表示(10)  142 :メッセージを非表示に出来ないでしょうか?(08)  143 :ステンシルの編集について(03)  144 :貼り付けたエクセルデータの取得方法について(13)  145 :シェイプシートの関数取得について(04)  146 :用紙方向(印刷方向?)の情報取得について(06)  147 :シェイプが削除された時の処理を実行したい(09)  148 :強調表示させることは出来ますか?(06)  149 :ページ名称を消すことはできますか?(11)  150 : IOleInPlaceFrame インターフェイスを正しく実装する方法(02)  151 :名前をつけて図面を一時的に保存する。(04)  152 :参照設定について(03)  153 :グループ化したシェイプの中にシェイプが存在してるか確認する方法(06)  154 :描画ツールの表示(05)  155 :カスタムプロパティについて(02)  156 :メニューの有効・無効の方法について(08)  157 :【DoCmd】 キャンセル後のマウスカーソル(04)  158 :テキストの書き込み(04)  159 :ショートカットについて(12)  160 :SaveAsWebPageについて(02) 
ログ検索  リロード  前のページ  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 次のページ  総てのスレッド  スレッド総数 696121 - 130 を表示


121: シェイプをレイヤに配置させたい  全レス

01: 名前:ひとで投稿日:2006/04/20(木) 23:08
はじめまして。
シェイプの色ごとに、レイヤに登録させたいと考えています。

1)シート上には、シェイプが数百個配置されています。
2)1シェイプ1色、全部で10色に塗りわけられています。
3)現在レイヤーは存在していません。
4)visio2002を利用。

(やりたいこと)
1>レイヤーを10個作成。
2>塗り分けられた色をみて、レイヤーに所属
→セルのFillforegndが1なら、レイヤー1というように、全シェイプを色単位でレイヤーに所属
3>1つのシェイプは、1つのレイヤーにのみ所属
4>背景もあるけど、前景だけに適用する

どなたか、ご教授願えませんか。
10個のレイヤーの作成まではできたのですが・・・
会社での書き込みが出来ない上、自宅にVISIOがないので、困っています。
どうぞよろしくお願いいたします。

02: 名前:yoda投稿日:2006/04/21(金) 08:15
会社での書き込みが出来ない上、自宅にVISIOがないのでは、
どうしようもないです。

03: 名前:ひとで投稿日:2006/04/21(金) 23:03
yodaさん、ありがとうございます。
会社では「読む」ことは可能だったんですが、仕方ないですね。

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



122: グループ化でオートメーション エラー  全レス

01: 名前:yuka投稿日:2006/04/05(水) 17:26
いつもお世話になっております。
vb6+visio2000でvbからvisioの図形を作成した後に
グループ化をしたいのですが、
グループ化の途中でエラーが出てしまいます。

以下がエラーメッセージです。
オートメーション エラーです。
リモート プロシージャ コールに失敗しました。

以下は実際にグループ化をしている部分です。
エラーの発生するタイミングは不定期で、ループの初めだったり
最後の方だったり、エラーが出てしまう原因がわかりません。

visio2k.ActiveWindow.DeselectAll
visio2k.ScreenUpdating = 1
visio2k.ShowChanges = True
visio2k.AutoLayout = True

For lngCnt = 1 To pubNodeCnt
If typMPos(lngCnt).tagflg = 0 Then
If strtmpcd <> typMPos(lngCnt).Cd Then
visio2k.ActiveWindow.Selection.Group
visio2k.ActiveWindow.DeselectAll
strtmpcd = typMPos(lngCnt).Cd
End If
visio2k.ActiveWindow.Select pubshpObj(lngCnt), visSelect
End If
Next lngCnt

どなたか同じような経験をされた方はいらっしゃいますか?
コードの書き方が間違っているのでしょうか?
宜しくお願い致します。

02: 名前:yoda投稿日:2006/04/05(水) 18:30
見えないコードがあるので、正確なことは言えませんが、
一番最初は、図形が選択されていないのに、Groupメソッドを実行
しているように見えますが、いかがでしょうか?
もしそうなら、エラーメッセージは、違いますが、エラーになります。
その後、Deselectして、別の図形をSelectして、またループ内で、
そのSelectした単独の図形をGroup化しているように、見えます。
これも、エラーになると思います。

もし、図形を次々にグループに加えたいのでしたら、Selectionに
対する、AddToGroup メソッドを使う方が良いかも知れません。

03: 名前:yoda投稿日:2006/04/05(水) 20:03
VBAの場合で、02で申し上げたような場合について、簡単なサンプル
を作ると、以下のようになります。
注意すべき点は、Forループ内で、次々とグループ化すると、単独な
シェイプの個数が次第に減少し、最後にはグループ一つになってしまう
ため、単純にShapeの個数を固定して、ループ終了の合図にすると、
どこかで、エラーになることです。そこでサンプルでは、ShapeのIDを
使って見ました。このサンプルを試験する場合は、白紙に新しいシェイプ
を連続して複数作ってから、試験する必要があります。
Sub test()
Dim shp As Visio.Shape
Dim myGroup As Visio.Shape
Dim I As Long, N As MailFormat
N = ActivePage.Shapes.Count
ActiveWindow.DeselectAll
For I = 1 To N
Set shp = ActivePage.Shapes.ItemFromID(I)
ActiveWindow.Select shp, visSelect
If I = 1 Then
' Do nothing
ElseIf I = 2 Then
ActiveWindow.Selection.Group
Set myGroup = ActiveWindow.Selection(1)
Else
ActiveWindow.Selection.AddToGroup
End If
Next
End Sub

04: 名前:yoda投稿日:2006/04/05(水) 20:12
あるいは、ループ内ですべてのシェイプの選択を次々としておいて
(Deselectしないで)、ループが終了したあとで、まとめてグループ
化する方が、簡単でよいかも知れません。

05: 名前:yoda投稿日:2006/04/06(木) 08:31
この方が簡単ですし、処理速度も圧倒的に速いようです。
Sub test()
Dim shp As Visio.Shape
Dim I As Long, N As MailFormat
N = ActivePage.Shapes.Count
ActiveWindow.DeselectAll
For I = 1 To N
Set shp = ActivePage.Shapes.ItemFromID(I)
ActiveWindow.Select shp, visSelect
Next
ActiveWindow.Selection.Group
End Sub

06: 名前:yuka投稿日:2006/04/06(木) 09:58
yodaさま。さっそくのご回答ありがとうございます。

01のコードだとわかりにくい部分がありましたので
もう少し詳しく書くと以下のようになります。
私もVBAで試したときはエラーは発生しなかったのですが
VBで同じコードを実行するとエラーが発生してしまうため
どうしていいのかわからずにいます。

yodaさんのご指摘どおり、1つの図形を選択してグループ化している
時があったので、複数の図形を選択した場合のみグループ化するように
変更しましたが、エラーは発生してしまうようでした。
おそらく05の書き方と同じような気がするのですが、何か違う部分は
ありますでしょうか?
宜しくお願い致します。

Public visio2k As Visio.Application
Public pubshpObj() As Visio.Shape

Set pubshpObj(lngCnt) = vPage.DrawRectangle(typMPos(lngCnt).left, typMPos(lngCnt).top, typMPos(lngCnt).left + typMPos(lngCnt).width, typMPos(lngCnt).top + (typMPos(lngCnt).height * -1))

strtmpcd = typMPos(1).Sochi_Cd

visio2k.ActiveWindow.DeselectAll
visio2k.ScreenUpdating = 1
visio2k.ShowChanges = True
visio2k.AutoLayout = True

For lngCnt = 1 To pubNodeCnt
If strtmpcd <> typMPos(lngCnt).Cd Then
'コードが変わったらグループ化
visio2k.ActiveWindow.Selection.Group
'選択を解除
    visio2k.ActiveWindow.DeselectAll
'新たなコードを格納
strtmpcd = typMPos(lngCnt).Cd
End If
'図形を選択
visio2k.ActiveWindow.Select pubshpObj(lngCnt), visSelect
Next lngCnt

07: 名前:yuka投稿日:2006/04/06(木) 10:14
できました!

以下の部分を

'コードが変わったらグループ化
visio2k.ActiveWindow.Selection.Group
          ↓
visio2k.ActiveWindow.Group
に変えたらエラーが発生しませんでした。

私がVBAでテストしたときは
visio2k.ActiveWindow.Group
こちらの方法を使っていたようです。

いろいろとありがとうございました!

08: 名前:yoda投稿日:2006/04/06(木) 11:05
面白いですねー。
ActiveWindow.Group で、正常に動くんですねー。大変勉強になりました。
Visioのヘルプには、そんなことは書いてないのですが、MSDNには、
サンプルがありました。ここです。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devref/HTML2/DaR_Examples_ [source] [check](S-Z)_672.asp
このサンプルは何でしょうねー。もしかして、裏技?
このサンプルと同じコードが、Selectメソッドのヘルプや、MSDNの
Visio2003SDKのSelect に書いてありますが、そこでは、
ActiveWindow.Selection.Group となっています。

09: 名前:yoda投稿日:2006/04/12(水) 14:40
Groupメソッドの対象は、Visio2002、2003では、SelectionとShape
オブジェクトだけです。
Visio2000では、Windowオブジェクトも、対象になっていましたが、
Visio2002で廃止されたようです。

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



123: CTR+Zのときのイベントについて  全レス

01: 名前:shin投稿日:2006/04/06(木) 11:15
いつもお世話になっていますm(_ _)m

図面上にシェイプを配置したとき、
このシェイプを「Ctr+Z」で復元したときも
shapeAddedイベントが発生しますが、
配置した時と「Ctr+Z」で復元したときとを
区別する方法はありますでしょうか?

IsInScopeプロパティの内容で制御しようとしましたが
上手くいきませんでした・・・

以上、宜しくお願いします。

02: 名前:yoda投稿日:2006/04/06(木) 11:34
IsUndoingOrRedoing プロパティを使うと良いかもしれません。
ヘルプにサンプルがあります。
昔、使ってうまくいったような記憶があります。

03: 名前:shin投稿日:2006/04/06(木) 15:36
yoda様

IsUndoingOrRedoingプロパティで制御できました。
ありがとうございます。

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



124: TIPセルへの書き込み  全レス

01: 名前:KN投稿日:2006/04/02(日) 16:10
お世話になっております。
シェイプシートのコントロールハンドルセクションのTIPセルに
マクロからテキストコメントを入れたいのですが、どのように
するのでしょうか。教えてくださいませ。

shpObj.CellsSRC(iSection, visRowControl, visCtlTip) = "tmp"
とすると、「型が一致しません」と怒られ、
shpObj.CellsSRC(iSection, visRowControl, visCtlTip).Formula = "tmp"
とすると、「#NAME?」と怒られます。
もともと、TIPセルはテキスト(string)だと、手元にある本には
書いてあるのですが、、、
ちなみに
shpObj.CellsSRC(iSection, visRowControl, visCtlTip).Formula = 3
とかやると3が入ります("3"でなく3だけですが)。

あいかわらずの初心者の質問ですが途方にくれておりますので、
よろしくお願いいたします。

02: 名前:りゅん投稿日:2006/04/02(日) 17:05
それだと、シェイプシートからTIPセルに =tmp と入力したのと同じ結果になります。
シェイプシートに入力するときは、 ="tmp" ですよね。
シェイプシートに、"tmp" と入力するためには、VBAでは、"""tmp""" としてください。

03: 名前:KN投稿日:2006/04/03(月) 14:53
りゅんさん、ありがとうございます。
確かめたいのですが、会社のパソコンで初めてマクロを動かしたところ
マクロがまともに動かないため確かめられずにいます。
strやchr(13)などで「プロジェクトまたはライブラリがありません」
と怒られるのですが、、、なぜだ。。。
最悪帰宅してから確かめます

04: 名前:yoda投稿日:2006/04/03(月) 17:18
私も、以前に、「プロジェクトまたはライブラリが見つかりません。」
で、文字列関数が動かないことが、何度かありました。
そのとき、どのようにして直したのか、どうしても思い出せません。
MSサポートによると、VBE画面のツール・参照設定で、参照不可に
なっているライブラリのチェックをはずすと直る場合があるそうです。
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B208218 [source] [check]

05: 名前:KN投稿日:2006/04/03(月) 17:41
yodaさん、ありがとうございます!!!
参照不可になっていたライブラリのチェックを外したら動きました!
ついでに、動いた後、もう一度チェックを入れてみたのですが、
なんの問題もなく動いています。。。変なの。

で、りゅんさん。こちらも解決です!
ありがとうございました。
おっしゃるとおりでした。
実際の代入は、tmptxtというstringを編集してから
行っていたのですが
tmptxt = "Point" & Str(i )

tmptxt = """" & "Point" & Str(i) & """"
として代入して、はじめて"Point 1"と入りました。

というわけですべて解決です。
ありがとうございました。

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



125: selection_changed イベント  全レス

01: 名前:KN投稿日:2006/03/28(火) 10:38
お世話になってます。
VISIO2002使用の初心者です。

選択図形をかえるごとに、ユーザーフォームが切り替わると
いいなあと思いました。
で、とりあえず、イベントを試してみたいと思い、
(まともに使ったことがない)
ThisDocumentのコードに、

Dim WithEvents pagObj As Visio.Page
Dim WithEvents appObj As Visio.Application
Dim WithEvents shpObj As Visio.Shape
Dim WithEvents winObj As Visio.Window
Dim WithEvents docObj As Visio.Document

Private Sub docObj_PageChanged(ByVal Page As IVPage)
MsgBox "PageChanged(doc)"
End Sub

Private Sub pagObj_PageChanged(ByVal Page As IVPage)
MsgBox "PageChanged(page)"
End Sub

Private Sub winObj_SelectionChanged(ByVal Window As IVWindow)
MsgBox "SelectionChanged(win)"
End Sub

などいろいろ書いたのですが、
図面ページで、図形選択を変えても、ページを変えても、
ページ名を変えても、MsgBoxが出る気配もありません。

初歩的な質問で恐縮ですが、どこが問題なのか教えてください。

06: 名前:KN投稿日:2006/03/28(火) 12:56
yodaさん
3で述べたように、ファイルはいったん閉じましたが、それでは
だめなのでしょうか?開きなおすとはこの場合どういう意味ですか?

M1号さん(ありがとうございます)
すいません。ちょー初心者なので、おっしゃっていることが
私には難しすぎます。。。
お手数ですが、コードをちょびっと教えてくださいませ。
別のスレッドで私がUPしているマクロも、「objectの取得」
っていうのがさっぱりわからず、他からのコピーにもかかわらず
苦労しました。

07: 名前:M1号投稿日:2006/03/28(火) 13:11
WithEvents とクラスについてドキュメントを読んで理解を深めてください。

'-----ここから以下のコードをクラスモジュールに追加してください。
Public WithEvents g_VisioApp As Visio.Application

Private Sub Class_Initialize()
Set g_VisioApp = Visio.Application
End Sub

Private Sub g_VisioApp_SelectionChanged(ByVal Window As IVWindow)
MsgBox "SEL CHG"
End Sub
'------------ここまで

'-----ここから以下のコードをThisDocument に追加してください。
Private mClass As Class1

Sub test()
Set mClass = New Class1
End Sub
'------------ここまで

08: 名前:M1号投稿日:2006/03/28(火) 13:12
補足

test() を実行するとイベントクラスが生成されクラスモジュールでイベントのハンドリングが可能になります。

09: 名前:KN投稿日:2006/03/28(火) 13:50
M1号さん

動きました!
ありがとうございます。

ThisDocumentもクラスモジュールにも始めてコードを
記入しました。何をとっかかりに勉強したら良いでしょうか。
ドキュメントみてもヘルプを見ても、?が増えるばかりです。

10: 名前:M1号投稿日:2006/03/28(火) 14:13
VB について多少の知識があるならば、
yoda さんが紹介してくれた「Visio 2000ソリューション開発ガイド」
がお勧めです。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/visio/DVS_00_Preface535.asp [source] [check] [source] [check]

11: 名前:yoda投稿日:2006/03/28(火) 14:54
03の間違えているとところが分かりました。
docObj の Openedイベントではだめなのです。
docObjは、まだ、なににも割り当てられていないから。
そうではなく、ThidDocumentnのDocumentのDocumentOpened
イベントを使うのです。
Private Sub docObj_DocumentOpened(ByVal doc As IVDocument)
Set pagObj = ActivePage
End Sub
ではなく、
Private Sub Document_DocumentOpened(ByVal doc As IVDocument)
Set pagObj = ActivePage
End Sub
となるはずです。

12: 名前:KN投稿日:2006/03/28(火) 21:30
yodaさん、遅くなりましたが、yodaさんの方法でも
動きました。

要は、WithEventsで定義した変数になんとかして
(ActivePageなり、Visio.Applicationなりを)入れる、
いうことですね。

ところで。
pageを切り替えたときに発生するイベントっていうのは
ないのでしょうか。あるページを出しているときだけ、
ユーザーフォームを表示したいと思うのですが。

13: 名前:yoda投稿日:2006/03/29(水) 10:14
WindowTurnedToPage イベント だと思います。
ヘルプに説明があるように、このイベントの対象は、Applicationか、
Windowか、Windowsなので、そのつもりでどうぞ。

14: 名前:KN投稿日:2006/03/29(水) 10:29
yodaさん、いつもありがとうございます。
WindowTurnedToPageで大丈夫でそうです。
Pageが頭についたものしか見てませんでした。。。
すいません。

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



126: グループ化されたシェイプについて  全レス

01: 名前:shin投稿日:2006/02/02(木) 17:26
グループ化したシェイプの子シェイプの情報の取得の仕方に
ついての質問です。

シェイプAとシェイプBの2つのシェイプをグループ化したとします。
この時、シェイプAを選択しActiveWindow.Selectionで選択されているシェイプ情報を
取得しようとしていますが、取得できません。
ActiveWindow.Selection.Countを表示すると「0」と表示されてしまいます。
グループ化された子シェイプの情報を取得する方法を教えて頂けないでしょうか。

以上、宜しくお願いします。

18: 名前:shin投稿日:2006/03/25(土) 13:21
yoda様

内部的に変換されるのではなく、
実際に座標が変換されて、シェイプ自体が動くということですか?

19: 名前:yoda投稿日:2006/03/25(土) 13:36
PinXに入れれば、そこで指定した場所へ行くのではないでしょうか?
実際に試したわけではありませんので、お試しいただきたいと
思います。

20: 名前:shin投稿日:2006/03/25(土) 13:43
yoda様

その通りです。
移動してしまいます。

実際には、移動させないで座標だけ取得したいと思っています。
VBA側で内部的に取得する方法はあるのでしょうか?
それとも、グループ(親)シェイプとの位置関係から
算出するしかないのでしょうか?

21: 名前:yoda投稿日:2006/03/25(土) 14:00
そのために、私のサンプルでは、Scratchで計算させているのです。
サンプル図のマクロ"test"で、Scratchを読み取ることができます。

22: 名前:shin投稿日:2006/03/25(土) 16:58
yoda様

移動してしまうってことは、
移動先の座標が取れてしまいますよね?

実際に取得したいのは、
グループシェイプ内で描画されいる状態での
図面における、子シェイプの座標です。

説明が下手なんで、分りづらいと思いますが、
宜しくお願いします。

23: 名前:yoda投稿日:2006/03/25(土) 17:58
それが21でご説明したことです。

24: 名前:shin投稿日:2006/03/25(土) 19:49
yoda様

上記の方法で、取得することができました。
結果が取得できたことに付随して2つ程質問があります。

1.座標が0のとき「2.25597318603832E-14 」のように取得してしまう
・数値で取得する方法はありますでしょうか?

2.X座標の場合のみ、1回目を取得した値を保持?しているらしく、座標を変えても同じ値を取得してしまう。
・詳細は、Scratchセクションに式を挿入し、座標を取得するとします。
 このとき図面上の座標が「10」だったとします。この図面上の座標を「20」に変えても取得する値は、
 「10」です。どこが悪いかご指摘いただけないでしょうか?Y座標に関しては、上手く取得できています。
 式は以下の通りです。
 X:LOCTOLOC(PNT(LocPinX,LocPinY),Width,ThePage!PageWidth)
 Y:LOCTOLOC(PNT(LocPinX,LocPinY),Height,ThePage!PageHeight)

以上、宜しくお願いします。

25: 名前:yoda投稿日:2006/03/25(土) 20:31
1. 2.25597318603832E-14 は数値ですよ。 = 2 x 10^(-14)
失礼ですが、基本的なことがお分かりになっていらっしゃらないようです。

2.そんなことはないですよ。わたくしが、単純な長方形を動かして
  テストしたら、変わりましたよ。いったい、どのようなことをしたのでしょうか?

26: 名前:shin投稿日:2006/03/25(土) 21:22
yoda様

私の勉強不足でした、。申し訳ありません。
今後は、もっと良く調べてから質問させていただきたいと思います。

2については、私自身で努力したいと思います。
努力しても分らない点が出た場合、また質問させて
いただきたいと思います。

ありがとうございますm(_ _)m

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



127: 動的コネクタの頂点のX,Y指定  全レス

01: 名前:yuka投稿日:2006/03/23(木) 11:56
ログ検索をしてみたのですが、見当たらなかったので
投稿しました。VISIO初心者のvisio2000+vb6です。

やりたいことは、
@動的コネクタをドロップ。
A頂点を追加する。
B始点、中間点、終点のXY座標を指定する。
です。
試行錯誤しながらA頂点を追加するところまでは
できたのですが、頂点を追加すると始点と終点の位置が
ずれてしまいます。
また黒い線を引きたいのですが、うまく引けません。
そしてBXY座標の指定の仕方が
よくわかりません。
うまく説明できないので、プログラムを載せますね。

  ’動的コネクタをドロップ
Set vStencil = Application.Documents.OpenEx("基本フローチャート.vss", visOpenDocked)
Set vConnectorMaster = vStencil.Masters("動的コネクタ")
Set shpObj = ActivePage.Drop(vConnectorMaster, 20 / 25.4, 20 / 25.4)

  ’始点と終点の位置を指定
shpObj.Cells("BeginX").Formula = "100mm"
shpObj.Cells("BeginY").Formula = "100mm"
shpObj.Cells("EndX").Formula = "140mm"
shpObj.Cells("EndY").Formula = "140mm"
  ’指定の方法、あってますでしょうか??

  ’Aセクションに行の追加 頂点を追加する
For i = 1 To 4
shpObj.AddRow visSectionFirstComponent + "0", visRowLast, visTagLineTo
Next i

  ’Bここで頂点のXY座標を指定したいのですが
  ’XYにwidthを使わずに直接値を指定することはできないのでしょうか??
shpObj.CellsSRC(visSectionFirstComponent, visRowVertex + 1, visX).Formula = "width * 0.3"
shpObj.CellsSRC(visSectionFirstComponent, visRowVertex + 1, visY).Formula = "width * 0"
shpObj.CellsSRC(visSectionFirstComponent, visRowVertex + 2, visX).Formula = "width * 0.3"
shpObj.CellsSRC(visSectionFirstComponent, visRowVertex + 2, visY).Formula = "width * 0.3"
shpObj.CellsSRC(visSectionFirstComponent, visRowVertex + 3, visX).Formula = "width * 0.6"
shpObj.CellsSRC(visSectionFirstComponent, visRowVertex + 3, visY).Formula = "width * 0.3"

  以上、何か良い方法がございましたら
  宜しくお願い致します。

02: 名前:M1号投稿日:2006/03/23(木) 13:18
>Bここで頂点のXY座標を指定したいのですが
ここでブレークしましたが、始点終点はズレてはいませんでした。

>また黒い線を引きたいのですが、うまく引けません。
下から右上(矢印付)にL字型のシェイプですよね?

>’XYにwidthを使わずに直接値を指定することはできないのでしょうか??
単位をつけなければインチになりますが直接値を入れることはできますよ。

03: 名前:yuka投稿日:2006/03/23(木) 15:38
早速のご回答ありがとうございます。

>>Bここで頂点のXY座標を指定したいのですが
>ここでブレークしましたが、始点終点はズレてはいませんでした。
うまく説明できずにすみません。
BeginX、EndXなどの値は変わっていないのですが
図面上の図が指定した位置からズレてしまっているようなんです。
また頂点を追加すると三角形のような図が表示されます。

>>また黒い線を引きたいのですが、うまく引けません。
>下から右上(矢印付)にL字型のシェイプですよね?
そうですね。
頂点を追加すると、やりたいこととは違う動きを
してしまうようです。

>>’XYにwidthを使わずに直接値を指定することはできないのでしょうか??
>単位をつけなければインチになりますが直接値を入れることはできますよ。
ホントですか??
例えば、下図のような図を描く際に、
コネクタの頂点のXYを指定するには
どのようにすれば宜しいでしょうか?
                _
                |_|
|
| ̄
| ̄
| ̄|
              ̄

04: 名前:yuka投稿日:2006/03/23(木) 16:06
図形が正しく表示できませんでした。
すみませんでした。

こちらの方へ添付させていただきました。
http://www.mster.co.jp/visiosquare/cgi-bin/cbbs/cbbs.cgi [source] [check]

図のように階段状に頂点を指定していきたい場合、
どのようにすれば宜しいでしょうか?
宜しくお願い致します。

05: 名前:yoda投稿日:2006/03/23(木) 20:22
横入りですみませんが、yukaさんの言う頂点を追加しようと、手動で
ダイナミックコネクタのシェイプシートを開き、Geometry1セクションに、
行の挿入を試したのですが、拒否されました。
みたところ、プロテクトがかかっているわけでもないのに、なぜでしょう?
アドインかなにかのイベントで監視しているのでしょうか?

しかし、図面の画面で、コネクタを変形すると、自動的に行が挿入され
ますし、マクロの記録で撮ったマクロを再実行すると、そのとおりには
ならないにしても、一応階段状にはなります。何じゃこれ?

06: 名前:yoda投稿日:2006/03/23(木) 20:50
>マクロの記録で撮ったマクロを再実行すると、そのとおりには
>ならないにしても、一応階段状にはなります。
しっかり調べてみると、これは間違いで、記録したマクロではだめです。
また、別に作成したマクロでも、AddRowメソッドは、全く受け付けない
ようです。ということは、図面の画面でしたように、マクロでもしないと
いけないということでしょうか?たとえば、コントロールポイントを移動
するとか。

07: 名前:yoda投稿日:2006/03/23(木) 21:01
ダイナミックコネクタでは、行の挿入はできないので、他のコネクタ
を使えばよいでしょう。「Visioエキストラ」の中の「コネクタ」ステンシルに、
昔のコネクタがありますから、その中の、ダイナミックでないものに対して
AddRowメソッドを実行すれば、良いかもしれません。

08: 名前:M1号投稿日:2006/03/24(金) 09:38
動的コネクタはVisio の内部関数を使ってダイナミックに座標計算しているので
自分で思ったような形状には整形できないようです。
再計算を保留させて座標を指定しても保留解除後に勝手に変形してしまうようです。

09: 名前:yuka投稿日:2006/03/24(金) 10:37
yodaさま、M1号さまご回答ありがとうございます。

私もいろいろ試してみましたが、やはり思い通りの形には
ならないようですね・・・。

動的コネクタによる階段状の表示はあきらめたいと思います。

いろいろとありがとうございました!

10: 名前:削除されました投稿日:削除されました
削除されました

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



128: クローズイベントについて  全レス

01: 名前:shin投稿日:2006/03/16(木) 22:09
いつもお世話になっています。

Visioドキュメントを閉じた後に、
その閉じたVisioドキュメントを削除したいと思っています。

クローズイベントを取得し、kill関数で削除を実行すると
書き込みエラーが発生してしまいます。

この原因は、ドキュメントが開かれている状態だからだと思っています。

エラーが発生させずに、閉じたと同時に削除する良い方法はないのでしょうか?

以上、宜しくお願いします。

02: 名前:yoda投稿日:2006/03/17(金) 06:25
コードを見せていただけませんか?

03: 名前:shin投稿日:2006/03/17(金) 11:11
yoda様

以下がコードとなります。

ヘルプでイベントを検索してみても、
クローズ関連ではBeroreイベントはあっても
Afterイベントが無いような気がします。

以下のコードで、ファイル自体は削除されることは
確認できたんですが、アプリケーションが異常終了してしまいます。

=======================================================================
=======================================================================
Option Explicit
Private WithEvents myApp As Visio.Application
Private WithEvents myDoc As Visio.Documents
Private strPath As String

Private Sub Document_DocumentOpened(ByVal doc As IVDocument)
Set myApp = Application
Set myDoc = Application.Documents
End Sub

Private Sub myApp_BeforeDocumentClose(ByVal doc As IVDocument)
If (strPath <> "") Then
Kill (strPath)
End If
strPath = doc.Path & doc.name
End Sub

=======================================================================
=======================================================================

以上、宜しくお願いします。

04: 名前:yoda投稿日:2006/03/17(金) 11:55
strPathの取得方法が分かりませんので、なんとも言えないのですが、
もし、自分自身を削除しようとしている、とすると、エラーが発生しても、
不思議ではないような気がしますが、どうでしょうか。Before_Clse
イベントだと、まだ、閉じていない図面に対して、自分でKill命令を出
しているのですから、、、 VBなどの独立した系からKillを出した方が
安全のような気がしないでもないです。私は、以下のように、別の
図面を立ち上げて、消すことを試してみましたが、そこでは、エラーには
なりませんでした。
Sub test()
Dim NewDoc As Visio.Document
Dim NameDoc As String

Set NewDoc = Application.Documents.AddEx("", visMSDefault, 0)
NewDoc.SaveAs ("TestDelete.vsd")
NameDoc = NewDoc.FullName
NewDoc.Close
Kill NameDoc
Application.Documents.Open NameDoc ' 消えたことを確認する。
End Sub

05: 名前:yoda投稿日:2006/03/17(金) 12:07
それから、
03のコードで、strPath = doc.Path & doc.nameは、
すでに図面が削除されているのですから、エラーになると思います。
どこか、別の場所にあったものを、単にここに書いただけなのかもし
れませんが。

06: 名前:shin投稿日:2006/03/19(日) 15:12
yoda様
返事遅くなりましたm(_ _)m

確かに、プログラム実行中(起動中)に削除するなんてことは
そもそもできないですようねぇ・・・

図面が閉じられたときに、同期して「VBなどの独立した系」に
Killさせることは可能なのでしょうか?

できれば、図面が閉じられたと同時にファイルを削除したいと
考えています。

以上、宜しくお願いします。

07: 名前:yoda投稿日:2006/03/19(日) 20:15
やってみたことはありませんので、お試しいただきたいと思います。
VBから、Visioを起動し、図面を開き、閉じ、削除すれば、よいのでは
ないでしょうか。

08: 名前:shin投稿日:2006/03/20(月) 10:23
yoda様

VBなりC++なりからの削除方法を考えたいと思います。
ありがとうございます。

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



129: 参照設定のパスについて  全レス

01: 名前:shin投稿日:2006/03/09(木) 20:27
「テスト.vsd」から「プログラム.vsd」に参照設定を行った場合、
Visio上の管理方法としては、
絶対パス?もしくは、相対パスのどちらになるのでしょうか?

カレントディレクトリに2つファイルが存在する時に参照設定を行うと、
「テスト.vsd」を他のディレクトリに移動すると参照不可になってしまいます。
また、2つのファイルが別のフォルダに存在する場合は、「テスト.vsd」を他のディレクトリに
移動しても参照可能です。

以上、よろしくお願いします。

15: 名前:shin投稿日:2006/03/10(金) 17:20
yoda様

まず、すでに「プログラム.vsd」が開かれていたとして、パスを取得したとします。
「テスト.vsd」から「プログラム.vsd」への参照パスを動的に取得したパスに変更することは、
可能なのでしょうか?(AのPC環境からBのPC環境へ)

以上、宜しくお願いします。

16: 名前:yoda投稿日:2006/03/10(金) 17:55
>「テスト.vsd」から「プログラム.vsd」への参照パス
これは、どういう意味でしょうか?
「テスト.vsd」にもVBAプログラムが書いてあるということでしょうか?
先ほどは、できるだけ書かないようにする、というお話でしたが、
それは、どうなっているのですか?

また
>動的に取得したパス
の「動的に」とは、どういう意味でしょうか?

「テスト.vsd」と「プログラム.vsd」が、共に開かれているなら、
それぞれのDocumentのPathプロパティで、それぞれの図面の
保管されているフォルダの、パスを取得できますが、開かれてい
ない図面のパスは、Visioのプロパティでは、取得できません。
開かれていない図面のパスを取得するためには、おそらく、
ドライブの中を図面名をキーワードにして、探しまくるループ
を組む必要があると思います。

また、
>参照パスを動的に取得したパスに変更することは
の「変更」とは、何を変更するのでしょうか?
図面が保管されている場所を変更、すなわち、図面を移動する
ということでしょうか?

17: 名前:shin投稿日:2006/03/10(金) 18:26
yoda様

>「テスト.vsd」にもVBAプログラムが書いてあるということでしょうか?
今回、「テスト.vsd」を開いた時、メニューバーに新しい項目を追加しようとしています。
「テスト.vsd」上で、OPENイベント取得して、
「プログラム.vsd」上のマクロを呼び出して実現しています。

>「動的に」とは、どういう意味でしょうか?
分りづらくて、すみませんm(_ _)m
動的にの後に"、"が入り「動的に、取得したパスに」となります。
動的にというのは、違う環境に持っていっても(BのPCに)、C++で書いた外部プログラムで
参照可能状態にすると言う意味です。

>参照パスを動的に取得したパスに変更することは
>の「変更」とは、何を変更するのでしょうか?

参照不可状態を参照可能状態にする(変更)と言う意味です。

以上、宜しくお願いします。

18: 名前:yoda投稿日:2006/03/10(金) 19:18
もう一つ、教えてください。
参照設定の方法について、具体的に教えてください。

19: 名前:shin投稿日:2006/03/10(金) 19:53
yoda様

VBエディタの「ツール」→「参照設定」で、参照ボタンを押下後に、
「プログラム.vsd」を選択しました。

以上、宜しくお願いします。

20: 名前:yoda投稿日:2006/03/10(金) 20:22
過去ログ
「参照設定なしで他のプロジェクトのプロシージャを呼び出す方法」
http://101.110.129.110/visiosquare/cgi-bin/visbbs/mibbs.cgi?mo=p&fo=auto&tn=0552 [source] [check]
に、VBAのサンプルがあります。
ただし、Visioの設定が必要です。
メニュー、オプション⇒セキュリティ⇒マクロのセキュリティ⇒信頼できる
発行元⇒Visual Basic プロジェクトへのアクセスを信頼する、
という設定が必要になります。

21: 名前:shin投稿日:2006/03/12(日) 15:56
yoda様

ドキュメントを開いた時に
この方法で参照設定を追加できました。

このサンプルコードで一つ質問があります。
「.vsd」ファイルのセキュリティ警告ダイアログ上で「マクロを有効にする」ボタンを
押下後に「予期しないEOFエラー」が発生してしまいます。
このエラーは、参照設定先(プログラム.vsd)のファイルが原因なのでしょうか?
(他のファイルを指定しても発生してしまいます。)

以上、宜しくお願いします。

22: 名前:yoda投稿日:2006/03/12(日) 20:49
ページのシェイプシートに、Actions.Row_3や、Actions.Row_4
がないためだと思われます。

23: 名前:shin投稿日:2006/03/15(水) 21:33
yoda様

返信遅くなりましたm(_ _)m

上記原因だったようです。
確認が取れました。
ありがとうございます。

この方法で実現しようと思います。
また、質問するかもしれませんが、
そのときは、宜しくお願いします。

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



130: [表示(V)]メニュー[図形ウィンドウ(N)]の制御  全レス

01: 名前:ド素人投稿日:2006/01/31(火) 15:41
以前質問させて頂いた者です。

VBのフォーム上にVisio Drawing Controlを配置して
そこでVisioの制御をプログラミングしています。

開発環境は、
 VB.Net2003
 Visio2003
です。

Visio2003の[表示(V)]メニュー[図形ウィンドウ(N)]を
繰り返し押すことにより
「図形ウィンドウ」(ステンシル)が表示/非表示となります。

この動作をVB.Netにてコーディングしたいのですが
どうも旨くいきません。
(Openするのですが、Closeが思うようにいきません)
※「ステンシルの表示・非表示制御」のスレッドを参考にしました。

Visioだけの動きを見ていると、トグルボタンの様な制御に見えます。
DoCmd等コレと思うものを手当たり次第
試してみたのですがダメでした。
(やり方が悪いのかもしれません)

お知恵を授かりたく投稿しました。
宜しくお願い致します。

10: 名前:ド素人投稿日:2006/02/01(水) 14:36
ありがとうございます。

図形ウィンドウの表示制御をすることができました。

P.S.
 図形ウィンドウのIDが「1669」だと、なぜ分かるのでしょうか?
 IDが振られている一覧等がどこかにあるのでしょうか?

11: 名前:yoda投稿日:2006/02/01(水) 14:41
ヘルプで、列挙型の定数の、VisWinTypes の定数 を見ると分かります。

12: 名前:ド素人投稿日:2006/02/02(木) 20:01
ありがとうございます。

ヘルプにて確認することができました。

13: 名前:yoda投稿日:2006/02/07(火) 16:18
Drawing Control で、DoCmdが動くもの、動かないもの、について、
少しだけ調べました。環境は、VB .net 2003 でした。
× 1002 visCmdFileOpen 図面を開く     動かない
× 1005 visCmdFileSaveAs 名前を付け保存 動かない
○ 1010 visCmdFilePrint 印刷         動く
○ 1442 visCmdFileOpenStencil 個人図形を開く  一応動く
○ 1669 visCmdShapesWindow 図形ウインドウの開閉  動く
○ 1223 visCmdDRRectTool 長方形ツール 動く
○ 1219 visCmdDRPointerTool ポインターツール 動く
× 1092 visCmdHelpContents 作業ウインドウを開く 動かない
なお、作業ウインドウは、下記の方法でも、だめでした。
AxDrawingControl1.Window.Application.CommandBars("Task Pane").Visible = True
AxDrawingControl1.Window.Application.InvokeHelp _
("C:\Program Files\Microsoft Office\Visio11\1041\Visio.chm", 15, 0)
そのほか、Shellコマンドでも、試しましたが、これは、chmファイルをダブル
クリックするのと同じで、一応ヘルプが表示されますが、リンクが飛ばない
ものもあり、不完全です。

14: 名前:yoda投稿日:2006/02/14(火) 08:33
http://www.mster.co.jp/visiosquare/cgi-bin/cbbs/file/Test.lzh [source] [check]
に、VB .net のサンプルプログラムをアップロードしました。
話は、少し変わりますが、Visio本体のツールバーは、Visio本体
の上で、浮動状態になっていれば、VB .netのフォームでも、表示で
きるようです。ただし、メニューはできません。
サンプルではまた、Visio本体のツールバーの状態を、Visioの図面に
バックアップしたのち、.netのフォームを開き、ツールバーを開くときに、
浮動状態にします。浮動状態ですから、.netのフォームに固定はで
きませんが、自分で、ツールバーやメニューを作るのに比べると、便利
な場合もあります。VB .net のフォームを閉じるときに、浮動状態に
したツールバーを元にもどします。
以上、あくまでも、実験ですので、どうなってもよい試験環境で、
試してください。

15: 名前:yoda投稿日:2006/02/16(木) 08:54
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odc_vis2003_ta/html/OfficeVisioIntegratingMenusAndToolbars.asp [source] [check]
に、「Integrating Menus and Toolbars in Visio 2003 Drawing Control Applications」という記事がありました。あいにく、言語はC#ですが、
IOleCommandTarget インターフェイスを使って、VC# .net のメニューやツールばーから、フォームにつけたVisio Drawing Control に、Visioのコマンドを送って、いろいろなことをしようというものです。ていねいな記事なので、書いてあるとおりにやってみたら、動きました。しかし、メニューは、すぐには動きませんでした。「#region Windows フォーム デザイナで生成されたコード」の中のメニューアイテムの各項目に、以下のようなコードを追加したら、動くようになりました。
this.mnuPrintPreview.Click += new System.EventHandler(this.mnuPrintPreview_Click);
ここに、そのサンプルプログラムをアップロードしました。ここです。
http://www.mster.co.jp/visiosquare/cgi-bin/cbbs/file/IntegrateVisioMenus.lzh [source] [check]
また、この中には、簡単な印刷プレビューもあります。
これは、Vsio2003SDKのコードライブラリアンとサンプルプログラムの
中にあるものを、使うことが、説明したありました。そこで、SDKの中を
探してみたところ、たしかにあり、それを、プログラムに使うことができ
ました。

16: 名前:yoda投稿日:2006/02/16(木) 15:07
http://www.mster.co.jp/visiosquare/cgi-bin/cbbs/file/VisioDrawingControlOnForm.lzh [source] [check]
に、VB .net のフォームにDrawing Controlをおく場合の、改訂版を
アップロードしました。今回は、上記15でも出てきた、印刷プレビュー
を追加しました。これは、Visio2003SDKにあるサンプルです。

17: 名前:yoda投稿日:2006/03/01(水) 22:51
http://www.mster.co.jp/visiosquare/cgi-bin/cbbs/file/VisioDrawingControlOnForm2.lzh [source] [check]
に、 VB .NetのフォームにDrawing Controlをつける例の改良(?)版
を、アップロードしました。このバージョンは、DrawingControlの載った
フォームをMDIフォームの中に置くようにしてみました。
そうすると、Visioのツールバーが、MDIフォームの中に入るのではない
かと思ったのですが、そうはなりませんでした。しかし、MDIフォームだ
と、DrawingControlの載った、子フォームのインスタンスをいくつでも
作れます。複数の図面を同時に開くことができます。

18: 名前:yoda投稿日:2006/03/15(水) 10:37
一部を訂正しました。複数のdrawingControlをつけた場合、ウインドウメニューで
選べるようにしました。ここにアップロードしました。
http://www.mster.co.jp/visiosquare/cgi-bin/cbbs/file/VisioDrawingControlOnForm3.lzh [source] [check]

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


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