KoMaDo   VISIO SQUARE : VB/VBA  ■ Headline ■ HOME    

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

301 :BeforeDocumentClose時に渡されるパラメータについて(06)  302 :コネクタの経路取得について(05)  303 :マクロの実行について(04)  304 :特定のシェイプを削除されないように保護する方法(10)  305 :Visioのキーイベント取得について(07)  306 :複数のブックのデータを取得する(03)  307 :シェイプの選択状態の解除(03)  308 :Visioへ値を渡す方法(04)  309 :DXFの変換(09)  310 :visio終了処理の回避(04)  311 :vb.netのフォームにvisioの図貼れますか(01)  312 :図形のテキスト取得(03)  313 :VCからVisioのマクロを起動したいのですが・・・(12)  314 :IMEの入力モードが無効になってしまいます。(03)  315 :モードレスにおけるシェイプシートの制御(07)  316 :コネクタについて(07)  317 :Visio2003+ステンシルの参照設定+読み込み専用=エラー?(06)  318 :グループの中のシェイプ取得について(03)  319 :グループ図形の線の色などを変更する方法(07)  320 :VBとVBAのメリットとデメリット(04)  321 :強制終了された場合のイベント処理(04)  322 :VBAで図形の色を変更する (05)  323 :クリップボードをクリア(06)  324 :CSV出力でエラー(05)  325 :VisioでComment機能(08)  326 :VISIO図面内の1つのシェイプを選択する方法(06)  327 :MDI機能がありますか?(04)  328 :ExcelからVisioへの出力(05)  329 :Visioで。。(07)  330 :VB6からVISIO2003の図形操作かのうですか?(41)  331 :フォーカス機能?(18)  332 :Visio標準の保存をしたくない(03)  333 :ステンシルのVBAが別なOS・パソコンで動作しない(05)  334 :イミディエイトウインドウをクリアするツールボタン(03)  335 :プリインストールダイアログを消したい(04)  336 :ファイルパスの取得(04)  337 :カスタムプロパティをVBAで消す方法(04)  338 :ファイル保存時のメッセージ(11)  339 :Shapeのフォント名変更(15)  340 :ツールバーへコンボボックス(06) 
ログ検索  リロード  前のページ  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 次のページ  総てのスレッド  スレッド総数 696301 - 310 を表示


301: BeforeDocumentClose時に渡されるパラメータについて  全レス

01: 名前:Cherry投稿日:2004/06/22(火) 11:14
VB・VBAとは少し違うのですが、当方、C++にてVisioのアドインを
作成しています。

VisioのアドインにはHandleVisioEventというメソッドがあり、
ここでVisioのイベントを処理しています。

ここで、ドキュメントクローズ時のイベントを処理していると、
以下の問題がありました。

■HandleVisioEventの第6引数(IDispatch* pSubjectObj)
 から、ドキュメントクローズイベント時にIVDocumentの
 インタフェースが取得できない。
 (ドキュメントクローズ時に、閉じられたドキュメントのファイル名を
 取得したい。)

*詳細は以下
C++のVisioアドインに含まれるHandleVisioEventでドキュメント
クローズ時の処理をしようと思い、該当のイベントコード
(visEvtDel+visEvtDoc)のときHandleVisioEventの第6引数
(IDispatch* pSubjectObj)にQueryInterfaceでIID_IVDocument
を指定すると、0x80004002(E_NOINTERFACE)が返される。

ドキュメントクローズ時に渡されるIDispatch*は
ドキュメントオブジェクトのものではないのでしょうか?

どなたかご存知の方がおられましたら、ご教示いただけませんでしょうか。

02: 名前:yoda投稿日:2004/06/22(火) 13:30
答えは全くわかりませんが、
Visio オブジェクトの公開方法に関しては、
http://www.eu.microsoft.com/japan/developer/library/visio/DVS_27_Programming_Visio_with_C++666.htm [source] [check]
がご参考になるかも。
(urlの途中の" [Source][Check])"は、
ご自分で取り除いてください。

03: 名前:なか投稿日:2004/06/22(火) 14:02
>ドキュメントクローズ時に渡されるIDispatch*は
>ドキュメントオブジェクトのものではないのでしょうか?
いいえ、ドキュメントオブジェクトです。
どこが悪いかはソースコードを見てみないとなんとも言えません。
差し支えなければ、ソースコードを記述してください。

04: 名前:Cherry投稿日:2004/07/01(木) 13:02
なかさん、yodaさん、ありがとうございました。

当方でもう少し検証し、問題があればまた聞かせてください。
ありがとうございました。

05: 名前:Cherry投稿日:2004/07/01(木) 13:11
すいません、別件の質問となるかもしれませんが
HandleVisioEventの第6引数(IDispatch* pSubjectObj)
について以下の質問があります。

■HandleVisioEventの第6引数(IDispatch* pSubjectObj)
をCComPtrで受け取り、メンバ変数などへコピーして
HandleVisioEventを抜ける様な処理を行っても問題はないのでしょうか?


CComPtrで受け取った後、メンバへコピーすることで
インタフェースがAddRefされると思うのですが、
この状態のままHandleVisioEventを抜けても大丈夫なのでしょうか。。
例えば、ページ削除のイベント発生時、
HandleVisioEventの第6引数(IDispatch* pSubjectObj)
に対して上記の処理を行うと、
HandleVisioEventを抜けた後に”Visio側は削除しようとするが、
アドイン側で参照カウンタをインクリメントしたため、Visio側が
ページオブジェクトを削除できない”といったようなことが起きて
Visioが正常に動かないのではないかと心配です。

上記質問のような処理は許されるのかどうか、
ご存知の方がおられましたら、ご教示いただけませんでしょうか。

06: 名前:yoda投稿日:2004/07/02(金) 03:45
分かりませんが、実際に試して、
もし、問題が発生したら、具体的な
問題点について質問した方が、
より多くの人の意見が得られると、
思います。

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



302: コネクタの経路取得について  全レス

01: 名前:わかばマーク投稿日:2004/06/30(水) 20:01
いつも勉強させて頂いてます。

コネクタの経路取得について質問させていただきます。
シェイプシートに表示される図形情報 の値を取得する方法がわかりません。
可変に対応し、それぞれの値を取得したいのですがどのようにすればよろしいでしょうか?
御教授よろしくお願いします。

02: 名前:yoda投稿日:2004/06/30(水) 22:30
過去ログに同名のスレッドがあります。
乱発を避けるため、必ず前もって、
過去ログを調べるよう心がけて下さい。
例: shpをコネクタとすると
x = shp.Cells("Geometry1.X1").Result("mm")

03: 名前:わかばマーク投稿日:2004/07/01(木) 11:00
申し訳ありません。過去ログを参照したのですが理解できなかったため
質問させて頂きました。
値を取得することはできました。ありがとうございます。
もう1つ教えていただきたいのですが、コネクタの曲がっている箇所の個数を
調べることは可能でしょうか?

04: 名前:yoda投稿日:2004/07/01(木) 13:40
geometry1セクションの行数を数えれば、
よいと思います。たとえば、
x=shp.RowCount(visSectionFirstComponent)-1

05: 名前:わかばマーク投稿日:2004/07/01(木) 16:47
yodaさんへ
うまく値を取得することができるようになりました。
まだまだわからないことが出てくると思いますのでまたお邪魔します。
ありがとうございました。

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



303: マクロの実行について  全レス

01: 名前:snooy投稿日:2004/06/30(水) 09:17
VBAのマクロをバッチファイルから実行することは可能ですか?可能であればそのバッチファイルの内容を教えて頂きたいです。
宜しくお願いしますm(_ _)m

02: 名前:yoda投稿日:2004/06/30(水) 09:34
間違っているかもしれませんが、
その前に、Visioを起動し、特定の図面を開く
ことが必要なので、バッチファイルだけでは、
難しいと思います。
VBか何かで作った、そのことを実行するプログラム
を、バッチファイルで起動する、ということに、
なるのではないかと、思うのですが。

03: 名前:yoda投稿日:2004/06/30(水) 12:57
補足すると、
基本的には、Visoの特定の図面が、
開いたら、その図面の、特定のマクロが、
起動するようにマクロを作っておけば、
(ThisDocumentで、DocumentOpened
イベントを使う)
バッチファイルから、
Visio.exe filename.vsd〔両方ともフルパス〕
で、Visioの特定の図面がひらき、マクロが、
起動するはずです。
しかし、バッチファイルは、
Program Filesのように、ブランク文字を
含むパス名のところで、エラーになります。
これを、クリヤできれば、うまく行くのですが。
私には、わかりません。

04: 名前:yoda投稿日:2004/06/30(水) 13:49
バッチファイルについては、フルパス名を引用符で囲むと良いようです。
例: "C:\Program Files\Microsoft Office\Visio11\Visio.exe" "C:\Documents and Settings\Owner\デスクトップ\test.vsd"

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



304: 特定のシェイプを削除されないように保護する方法  全レス

01: 名前:Unkun投稿日:2004/06/27(日) 01:17
"ページ- 1"のshapes(1)を削除されないようにしたいのですが、
どうしたらいいでしょうか?何かいい方法がありますか?

あと、ついでに質問させていただきますが、
Set visApp = CreateObject("visio.application")
このように起動したアプリケーションがvbより先に終了した場合
それをどうやって検知したらいいのですか?

02: 名前:yoda投稿日:2004/06/27(日) 03:41
>削除されないようにしたい
LockDeleteが1となるようにすれば
よいと思います。

03: 名前:yoda投稿日:2004/06/27(日) 03:42
訂正します。
LockDelete → LockDeleteセル

04: 名前:yoda投稿日:2004/06/27(日) 03:48
>アプリケーションがvbより先に終了した場合
AppDeactivated イベントとか、
AppObjDeactivated イベントが
ありますが、HELPで調べてみては、
いかが?

05: 名前:yoda投稿日:2004/06/27(日) 09:27
そうではないようですね、
BeforeQuit イベントがよいようですね。

06: 名前:Unkun投稿日:2004/06/28(月) 09:26
http://www.mster.co.jp/visiosquare/cgi-bin/visbbs/mibbs.cgi?mo=p&fo=auto&tn=0258&rn=30 [source] [check]
よく見たらこういうスレッドがあったみたいですね。
>Set shpObj = selectObj.Item(1)
>Set cellObj = shpObj.Cells("LockDelete")
>cellObj.ResultInt(visNumber) = 1
visNumberがよくわかりませんし、
実行しても「値の取得のみ可能なプロパティに値を設定することはできません」
というエラーが出てしまいます。

07: 名前:yoda投稿日:2004/06/28(月) 10:31
cellObj = 1 で、十分です。

08: 名前:yoda投稿日:2004/06/28(月) 11:40
あるいは、ResultFromInt プロパティで、
cellObj.ResultFromInt(visNumber) = 1
とします。

09: 名前:Unkun投稿日:2004/06/28(月) 15:44
ありがとうございます。
cell.ResultFromInt(visNumber) = 1でできました。

ヘルプを読んでみたのですが、
Private Sub object_BeforeQuit(ByVal app As IVApplication)
object このイベントを受け取る WithEvents オブジェクト。
とあります。この、objectは何を指定すればいいのですか?
あと、引数のIVApplicationとはなんですか?

10: 名前:yoda投稿日:2004/06/28(月) 16:44
私の場合、ExcelからVisioを起動し、
Visioを先に止めたら、通知を受けるよう、
次のようにして見ました。
'Private WithEvents visApp As Visio.Application
'Private Sub visApp_BeforeQuit(ByVal app As Visio.IVApplication)
''''On Error GoTo ERRHAND
''''If Not (visApp Is Nothing) Then
''''''''visApp.Quit
''''''''Set visApp = Nothing
''''''''Debug.Print Time; app.Name & " ended"
''''''''MsgBox Time & " " & app.Name & " ended"
''''End If
''''Exit Sub
'ERRHAND:
''''Debug.Print Time; Err.Description
'End Sub
'
'Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
''''On Error GoTo ERRHAND
''''Set visApp = CreateObject("visio.application")
''''visApp.Visible = True
''''Debug.Print Time; visApp.Name & " started"
''''Exit Sub
'ERRHAND:
''''Debug.Print Time; Err.Description
'End Sub

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



305: Visioのキーイベント取得について  全レス

01: 名前:あり投稿日:2004/06/24(木) 10:06
Visioの図面上でキー入力を監視することが出来ますでしょうか。
最終的にはファンクションキー(F1,F2等)の入力を押された際、
実際の処理(F1の場合、ヘルプ表示)を無効にして、別の処理をさせる
事なのですが、対応方法が思いつきません。
イベントのような対処方法が解らなかったため、WindowsAPIのGetKeyStateを
使用してループで監視する方法も考えましたが、処理負荷がかかりすぎるのと
結局ファンクションキーを無効にすることまでは思いつかなかったので悩んでます。
VB歴は多少長いのですがVisio歴は1ヶ月程度の初心者です。
アドバイスの程、宜しくお願いします。

02: 名前:yoda投稿日:2004/06/24(木) 10:52
該当するかどうか分りませんが、
こういうやりとりがあります。

Can I add a user defined event to a shapesheet?
Such as being able to respond to an Alt-Click etc.

No, you can't. And Visio doesn't give you access
to key-down events either. You have to use
Windows API routines in your code to get at
the keystroke events, and then manipulate
Visio afterwards.
場所は、ここです。
(urlの途中の" [Source][Check]"は、ご自分で取り除いてください。)
http://www.visimation.com/forums/topic.asp?TOPIC_ID=443 [source] [check]

03: 名前:yoda投稿日:2004/06/24(木) 11:08
ところが、Visio2003には、
KeyDown イベントがあります。
HELPのサンプルには、以下の
ように書いてありました。
「このクラス モジュールは、
アクティブ ウィンドウのキーボード操作に
よって発生したイベントを受信する
KeyboardListener というシンク クラス
.... 」

04: 名前:あり投稿日:2004/06/24(木) 11:30
Visioのバージョンを記述しておりませんでした。すいません。
Visio2002 SR-1です。

05: 名前:あり投稿日:2004/06/24(木) 12:05
>該当するかどうか分りませんが、
この文章を読む限りでは私がやろうとしてることは難しいという感じですね。

>ところが、Visio2003には、
確かにVisio2003の『KeyDown イベント』があれば解決しやすいですけどねぇ。
残念です。他にも何かみつけたら教えてください。
私の方でも、まだ思案中です。宜しくお願いします。

06: 名前:yoda投稿日:2004/06/24(木) 13:48
2003のサンプルを実行してみたのですが、
F1に関しては、F1を1回押して、はなした
だけではイベントを捕まえられないようで
2回繰り返さないといけないようでした。
F2は問題なし。理由はわかりません。

07: 名前:あり投稿日:2004/06/28(月) 09:30
方法を考えた結果、OS上でキーイベントを取得してくれるソフトがフリー
ウェアでありましたので。それを利用するとアプリに関係なくキーを取得
し、トラップしたキーを無効化及び別のキーイベントに置き換える事が
出来るようですのでこれで何とか対処したいと思います。
ありがとうございました。

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



306: 複数のブックのデータを取得する  全レス

01: 名前:ぷちゅん投稿日:2004/06/27(日) 21:45
複数のブック(ブック名はバラバラでシート名はすべて”回答”です。)のセルA5〜BG5の
データを取得し、そのデータを、集計というブックの一つのシートのセルA2〜BG2から下に(A3〜BG3、A4〜BG4・・・)
どんどん追加していくというマクロを教えてください。

02: 名前:yoda投稿日:2004/06/27(日) 21:54
まず、ご自分で、考え、
試作してみることを、お勧めします。

03: 名前:わんこ投稿日:2004/06/28(月) 01:11
もしかして、Excelでの話ですか?
だったら、Excelの掲示板に行ったほうがたくさんレスが付くと思いますよ。
”Excel掲示板”で検索すれば、たくさんHitします。

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



307: シェイプの選択状態の解除  全レス

01: 名前:名無しさん投稿日:2004/06/21(月) 17:41
シェイプの選択状態を解除する方法がわかりません。

複数のシェイプをコピーし、貼り付けた場合
VBAから一つずつ、選択状態を解除したいのです。

選択状態にするには、
AppVisio.ActiveWindow.Select shpObj, visSelect
でOKですが、これと似たような感じで解除処理ができるのでしょうか?

ご指導のほど、よろしくお願いいたします。

02: 名前:わんこ投稿日:2004/06/21(月) 21:16
ヘルプでSelectの項目を調べてみましょう。

03: 名前:名無しさん投稿日:2004/06/22(火) 19:43
Application.ActiveWindow.Select shp, visDeselect
で出来ました。勉強不足で申し訳ありません。ありがとうございました。

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



308: Visioへ値を渡す方法  全レス

01: 名前:Cyuta投稿日:2004/06/17(木) 22:04
VBからExcelへは以下のようにして値(引数)を渡せますが、
Set xlsApp = CreateObject("excel.application")
xlsApp.Visible = True
xlsApp.Workbooks.open FileName:="Excelファイル名"
rtn = xlsApp.run("ExcelのFunction", 引数)

VBからVisioへの場合はどう記述すればよいのでしょうか?
4行目で、「オブジェクトは、プロパティまたはメソッドをサポートしてません」となる。
Set vsoApp = CreateObject("Visio.application")
vsoApp.Visible = True
vsoApp.Documents.open FileName:="visioファイル名"
rtn = vsoApp.run("visioのFunction", 引数)

最終的には、ASP側からVisoを起動し、ASP側で入力した値をVisioへ渡したいのですが
方法が判りません。

「VCからVisioのマクロを起動したいのですが・・・」が参考のようにも思えますが
アドバイスの程、よろしくお願い致します。

02: 名前:yoda投稿日:2004/06/18(金) 03:01
VCが分からないので、、
ピントはずれかもしれません。
たしか、Excelのrunステートメントに、
相当するVisioのステートメントは、
Callだったと、思います。
それから、Excelのような感じの
「visioのFunction」は、ないので、
独立した文で、
vsoApp.オブジェクト.メソッド
という形になるのでは、
ないかと思います。

03: 名前:yoda投稿日:2004/06/18(金) 03:05
もちろん、Function プロシージャ
のことであれば、別ですが。

04: 名前:なか投稿日:2004/06/18(金) 08:54
Document オブジェクトのExecuteLine メソッドを調べてみましょう。

>最終的には、ASP側からVisoを起動し、ASP側で入力した値をVisioへ渡したいのですが
>方法が判りません。
メソッド名やメソッドが含まれるオブジェクトが違うだけで、
ExcelでもVisioでもやり方は同じです。

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



309: DXFの変換  全レス

01: 名前:名無しさん投稿日:2004/06/15(火) 11:19
[VB6&Visio2003]
DXFファイルを開き、"CAD Drawingオブジェクト"の変換を行いたいのですが、
オブジェクトに対してどのメソッドを使えば変換処理ができるのか分かりません。
"CAD Drawingオブジェクト"の右クリックで行う変換処理を、変換画面での
各種設定も自動設定をして処理を行いたいのです。よろしくお願いたします。
※マクロの記録機能では、何も記述されません・・・

02: 名前:yoda投稿日:2004/06/15(火) 13:56
変換処理というのは、
DXFをVisioで読み、
Visioとして保存する
ということですか?

03: 名前:yoda投稿日:2004/06/15(火) 14:18
失礼、意味わかりました。
が、むずかしそうですね。

04: 名前:名無しさん投稿日:2004/06/15(火) 17:44
Set appVisio = CreateObject("visio.application")
mypath = "c:\xxx\"
myname = Dir(mypath & "*.dxf")
Do While myname <> ""
____If myname <> "." And myname <> ".." Then
________Set doc = appVisio.Documents.Open(mypath & myname)
________「変換処理」
________doc.SaveAs mypath & Left(myname, Len(myname) - 4) & ".vsd"
________doc.Close
____End If
____myname = Dir
Loop

doc.Pages(1).OLEObjects(1) または doc.Pages(1).Shapes(1) で、
取り込んだDXFを取得できるのですが、それに対して何をすれば
よいのかが分からないのです。
※変換の設定を引数として渡して、VisioのCADコンバーターを
実行させたいのですが無理なのでしょうかね・・・

05: 名前:yoda投稿日:2004/06/15(火) 20:47
でしょうね。

06: 名前:yoda投稿日:2004/06/16(水) 02:33
少し発想を変える必要が
あるかもしれませんが、
HELPの
「複数のCAD図面を変換する」
はどうでしょう?

07: 名前:yoda投稿日:2004/06/16(水) 09:08
雑多なネタですみませんが、
Addon.runメソッドを使ったら、どうかと。
ここまで来ましたが、
引数をどうするか。
'Sub test()
' Dim ad As Visio.Addon
'' For Each ad In Visio.Addons
'' Debug.Print ad.Name
'' Next
' Set ad = Visio.Addons("CAD 図面の変換...")
' ad.Run
'End Sub

08: 名前:yoda投稿日:2004/06/16(水) 11:23
なんとか、動きそうになりました。
'Sub test()
' Dim ad As Visio.Addon, op As Visio.Addon
' Dim mydxf As String
' mydxf = "C:\My Documents\test.dxf"
' Set op = Visio.Addons(24)
' op.Run mydxf
' Set ad = Visio.Addons(28)
' ad.Run mydxf
'End Sub

09: 名前:yoda投稿日:2004/06/16(水) 17:28
上の24は、AutoCAD 図面を開く、
28は、CAD 図面の変換... です。
以下のマクロで確認します。
' Dim ad As Visio.Addon
' For Each ad In Visio.Addons
' Debug.Print ad.Name; ad.Index
' Next

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



310: visio終了処理の回避  全レス

01: 名前:名無しさん投稿日:2004/06/14(月) 13:29
×ボタンでvisio終了をする際、保存確認のダイアログ(windows標準(?))が
表示され、そこで「キャンセル」を選択すると、保存処理が回避されますが、
このような回避をマクロプログラムで作成したいのです。

現状は、×ボタン押下→Document_QueryCancelDocumentCloseイベント
に入り、その中でmsgBoxを使用し、メッセージダイアログを表示しています。
そのダイアログでキャンセル押下時はvisioの終了を回避させたいのですが、
標準のダイアログのようにうまくいきません。

×ボタンからの終了回避の方法をご教授ください。
お願いいたします。

02: 名前:yoda投稿日:2004/06/14(月) 14:02
ご参考になるかどうか、分りませんが、
過去ログで、保存とか、保存 確認とか
をキーワードにして、検索すると、
過去の似たような話題が、検索で聞きます。

03: 名前:名無しさん投稿日:2004/06/14(月) 17:41
終了回避できました。
QueryCancelDocumentCloseイベント内で、
Document_QueryCancelDocumentClose = True としたらOKでした。

04: 名前:yoda投稿日:2004/06/14(月) 22:52
下衆の後知恵ですが、解説がありました。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devref/HTML2/DAR_Events_ [source] [check](D-Z)_3136.asp

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


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