KoMaDo   VISIO SQUARE : VB/VBA  ■ Headline ■ HOME    

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

211 :instancehandle32からVisio.Applicationオブジェクトを取得(10)  212 :User-Defined Cells(17)  213 :値の取得(03)  214 :サブメニューの作り方(07)  215 :EXCELからVISIOマクロを動かしたのですが(06)  216 :シェイプの背景色が変わらない(04)  217 :シェイプデリートイベントをキャンセルする方法(11)  218 :ポップアップメニューを非表示する方法を教えて(05)  219 :ページ名の変更について(03)  220 :Visioのプロパティ内容の取得(15)  221 :AutoCadの図面ファイルをVBに取り込む方法を教えて(03)  222 :VBAで構文エラーになります(01)  223 :シェイプのダブルクリックされた位置を取得方法(03)  224 :FileDialogオブジェクト(06)  225 :図形やテキストのサイズ・位置を取得したい(07)  226 :シェープ(連続線)の角点の指定(03)  227 :Excel→Visioの文字列コピーについて(17)  228 :VB6からVisio2003のプロジェクトのロックを外すには?(04)  229 :Microsoft Forms2.0 ListBoxの操作方法(05)  230 :挿入したEXCELオブジェトの下位オブジェクトへのアクセス方法(08)  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) 
ログ検索  リロード  前のページ  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 次のページ  総てのスレッド  スレッド総数 696211 - 220 を表示


211: instancehandle32からVisio.Applicationオブジェクトを取得  全レス

01: 名前:鳥肌投稿日:2005/05/29(日) 09:37
VBAでのVisio開発経験はあります。
今回add-onのexe(com add-inではない)を作るにあたって質問があります。

add-onには起動時の引数として
「/visio=instancehandle32 ・・・」といったものが渡されます。
このinstancehandle32からVisio.Applicationオブジェクトを
取得するにはどうすればよいのでしょうか。

使用言語は問いません。
そもそも、できない(add-onからのVisio操作方法が
VBAやadd-inとは根本的に違う)のでしょうか。

02: 名前:yoda投稿日:2005/05/31(火) 10:38
私の場合、VB6のCommand関数では、/Doc= から後だけしか
出ませんでした。Visioのinstancehandle32プロパティ で見ると、
どのVisioでも、同じ値 4194304 でした。なにに使うのでしょう。

03: 名前:M1号投稿日:2005/05/31(火) 12:41
ヘルプから推測すると複数のVISIOインスタンスがある場合に
どのVISIOインスタンスからリクエストされたかを識別するためのモノのようですね。

ちなみに私もyodaさん同様、VB6のCommand関数では/Doc=以降だけしか受け取れませんでした^^;

04: 名前:M1号投稿日:2005/05/31(火) 12:42
忘れてた。

>このinstancehandle32からVisio.Applicationオブジェクトを
>取得するにはどうすればよいのでしょうか。
instancehandle32はHWDなのでWindowsAPIでVisio.Applicationオブジェクトを取れます。

05: 名前:yoda投稿日:2005/05/31(火) 12:51
なんという名のAPI関数か、教えていただけますか?

06: 名前:鳥肌投稿日:2005/05/31(火) 13:58
私のVB6SP6の環境ではCommand関数で空文字列が返されます。
また、InstanceHandle32は確かに、複数の
Visioインスタンスでも常に4194304になっているようです。

07: 名前:名無しさん投稿日:2005/06/01(水) 11:09
add-onからVisioのApplicationオブジェクトを取得するのに
通常は引数を意識することはないと思います。
VBであれば、操作方法はVBAとほとんど変わらないです。

・参照設定で、VisioのType Libraryを参照している場合
____Dim appVisio As Visio.Application
____Set appVisio = GetObject(,"visio.application")
・参照していない場合
____Dim appVisio As Object
____Set appVisio = GetObject(,"visio.application")

ちなみに、得られる引数はそのexeの起動され方によって
変わってきます。例えば
(1)メニューから起動された場合
____/Visio=xxxx
(2)シェイプのアクションメニューで RUNADDON関数から
起動された場合
____/Visio=xxxx /doc=xxxx /page=xxxx /shape=xxxx
(3)図面ページのアクションメニューで RUNADDON関数から
起動された場合
____/Visio=xxxx /doc=xxxx /page=xxxx

ただしVisio2003からは、Visio=xxxx は渡されなくなっているようです。
なので、メニューから起動された場合には空文字列になりますね。

注意が必要なのは、自分で引数を設定したい時です。例えば
上の(3)で、RUNADDONWARGS関数を使用し、引数が"AAA"の場合
____/Visio=xxxx /doc=xxxx /page=xxxx "AAA"
となります。

08: 名前:鳥肌投稿日:2005/06/01(水) 13:50
ご回答ありがとうございます。

GetObjectではVisioが複数起動されていた場合に、
add-onを実行したVisioと違うVisioを取得してしまうことがある気がします。
add-on起動元のVisioを確実に取得する方法はないのでしょうか。

09: 名前:名無しさん投稿日:2005/06/01(水) 14:57
ヘルプには、次のような説明があります。
『複数の Visio インスタンスが実行されている場合、GetObject 関数は
そのうちのアクティブなインスタンスを返します。プログラムがアドオン
として、または図形をダブルクリックして実行されている場合は、
そのプログラムの実行元のインスタンスがアクティブ インスタンスに
なります。それ以外の場合は、最後に実行された、または前面に
表示されているインスタンスがアクティブ インスタンスになります。』

add-onをVisioから起動するのであれば、実行したVisioと違うVisioを
取得することはないと思われます。(私はこれまで特に問題が起きた
ことはありません。)
今回作成されようとしているadd-onは、Visio以外から起動する
のでしょうか?

10: 名前:鳥肌投稿日:2005/06/01(水) 21:56
なるほど、GetObjectで取れるのですね。
解決しました。

ありがとうございます。

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



212: User-Defined Cells  全レス

01: 名前:ゆき投稿日:2005/05/18(水) 15:10
[User-Defined Cells] セクションのvalue値をVBAで取得する方法を
教えていただけませんか?

09: 名前:M1号投稿日:2005/05/24(火) 20:37
.Formula = "RUNADDON(""ThisDocument.Open_Test"")"

二重引用符(ダブルクォーテーション)が足りません。

10: 名前:ゆき投稿日:2005/05/25(水) 09:29
M1号様 ありがとうございます。

しかし、【予期しないEOFエラーです。】と表示されてしまいます。

詳しく書きますと下記のように書いています。

Set objShape = Application.ActivePage.Shapes
objShape.Item(1).Text ="部署名"
objShape.Item(1).Cells("Events.DblClick").Formula = "RUNADDON(""ThisDocument.Open_Test"")"

objShapeのセットの仕方が間違っているのでしょうか?

11: 名前:yoda投稿日:2005/05/25(水) 11:18
"Events.DblClick" ではなく、"EventDblClick"です。
こういう間違いを防ぐ、うまい方法があります。
シェイプシートをアクティブにすると、Visioアプリケーション
のメニューバーの下に[X レ]の印のある入力欄が出ます。
そこをクリックして、”=”の次に、入力カーソルができたこ
とを確認したら、"EventDblClick"セルのセル(式を入力す
るところ)をクリックします。すると、上の[X レ]の印のある
入力欄に、セル名"EventDblClick"が出ます。
これを切り取るか、コピーして、VBAの式の中に、ペーストします。

12: 名前:ゆき投稿日:2005/05/25(水) 12:09
yoda様 ありがとうございます。

セル名の取得方法を今後活用させて頂きます。

しかし、今回は【セルが保護されています。】と表示されてしまいます。

「保護のプロパティ」で確認をし、保護がかかっているところを
PvsoShapes.Item(1).CellsSRC(visSectionObject, visRowLock, visLockWidth).FormulaU = "0"
でクリアしてもエラーメッセージは変わりません。

保護のクリア対象が「保護のプロパティ」では確認できない所なのでしょうか?

13: 名前:yoda投稿日:2005/05/25(水) 14:51
すでに、セルに式が書き込まれていて、その式が、
GUARD()関数で囲ってあると、式が保護されます。
この場合は、Formula プロパティの代わりに、
FormulaForce プロパティ、あるいは、
FormulaForceU プロパティを使います。

14: 名前:yoda投稿日:2005/05/25(水) 15:11
こういう風に、次々とハードルが現れるので、
大変だと思います。私は、よく腹を立てたものです。
用意されたどのオブジェクトを使えば、自分の望みの
処理ができるか、できないか、予測が立てにくいから
です。VBAは楽に使える反面、そういう面があります。
系統的にすっきりしているわけでもありません。
スペックどおりにコーディングしても、思い通りに動か
ないこともあります。いろいろな道具をそろえて、上手
に使い分けなければならないので、職人さんみたいな
ところがあります。ですから私の場合は、いっぺんに
たくさんのコードを書くようなことはせず、極端にいうと、
1行1行テストしながらやっております。そのようにすると
比較的に楽です。

15: 名前:ゆき投稿日:2005/05/25(水) 17:24
yoda様 ありがとうございます。

お心使い大変うれしく思っています。
無事に【EventDblClick】の問題は解決することが出来ました。

16: 名前:ゆき投稿日:2005/05/30(月) 14:43
ふたたびお世話になります。

objShape.Item(1).Cells("Prop.cost").Formula
などで値を取得することは出来ます。

でも、もともとカスタムプロパティがないシェイプに
プロパティを追加し、
objShape.Item(2).Cells("Prop.Test").Formula

で同じように値を取得しようとすると
【予期しないEOFエラーです】とっ、エラーが出てしまいます。

取得する方法はないのですか?

17: 名前:yoda投稿日:2005/05/30(月) 14:56
正しくプロパティを追加してあれば、取得できるはずです。
EOFエラーです というのは、たぶん、そういう名のセルが
そのシェイプには見つからないということだと思います。
名前の間違えということもありえます。

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



213: 値の取得  全レス

01: 名前:ゆき投稿日:2005/05/25(水) 19:50
またまたお世話になります。

AccessからVisioの起動をしているのですが、
visioは「Document_DocumentOpened」でユーザーフォームを開きます。

ユーザーフォームのテキストボックスに
Accessの画面のでテキストの値を取得する方法を悩んでいます。
何か良い方法はありますか?

02: 名前:yoda投稿日:2005/05/26(木) 08:21
>Accessの画面のでテキストの値
もっと具体的にお願いします。

03: 名前:ゆき投稿日:2005/05/26(木) 14:10
yoda様 ありがとうございます。

ログの『VCからVisioのマクロを起動したいのですが・・・』を参考として
解決することが出来ました。

『VC』っと書かれていたので見逃していましたが
内容がやりたい事と似ていたので参考にさせて頂きました。

お騒がせして申し訳ありませんでした。

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



214: サブメニューの作り方  全レス

01: 名前:渡辺投稿日:2002/04/11(木) 09:16
ヘルプに習ってカスタムメニューを作成しました。
さらに、”プロパティ表示”にサブメニューを追加したいのですが、その方法が分かりません。
ご教示お願いします。
Dim uiObj As Visio.UIObject
Dim menuSetsObj As Visio.MenuSets
Dim menuSetObj As Visio.MenuSet
Dim menusObj As Visio.Menus
Dim menuObj As Visio.Menu
Dim menuItemsObj As Visio.MenuItems
Dim menuItemObj As Visio.MenuItem
ThisDocument.ClearCustomMenus
Set uiObj = Visio.Application.BuiltInMenus
Set menuSetsObj = uiObj.MenuSets
Set menuSetObj = menuSetsObj.ItemAtID(visUIObjSetDrawing)
Set menusObj = menuSetObj.Menus
Set menuObj = menusObj.AddAt(10)
menuObj.Caption = "ユーザメニュー(&U)"
Set menuItemsObj = menuObj.MenuItems
Set menuItemObj = menuItemsObj.Add
menuItemObj.Caption = "プロパティー表示"
menuItemObj.AddOnName = "aa"
ThisDocument.SetCustomMenus uiObj

02: 名前:渡辺投稿日:2002/04/11(木) 10:13
自己レスです。下記のようにして出来ました。
 (省略)
Set menuItemObj = menuItemsObj.Add
menuItemObj.Caption = "プロパティー表示"
Set menuItemsObj = menuItemObj.MenuItems
Set menuItemObj = menuItemsObj.Add
menuItemObj.Caption = "プロパティー表示2"
menuItemObj.AddOnName = "bb"
ThisDocument.SetCustomMenus uiObj

03: 名前:めぐ投稿日:2005/05/20(金) 11:18
お世話になっています。

渡辺様を参考にさせて頂き、カスタムメニューを作らせて頂きました。
このままだとファイルの表示時に

>menuItemObj.AddOnName = "aa"

の"aa"が実行されてしまいますよね・・・。

サブメニューが選択された場合のみ"aa"が実行出来るような
記述ってどうすれば良いのですか?

04: 名前:M1号投稿日:2005/05/20(金) 16:32
VISIOのヘルプにあるメニューのサンプルは変数名が似通っていてしかもムダに長いので理解しづらいですよね。
そこでサンプルを元に分かりやすいように階層メニューのコードを作ってみました。


Sub test()
 Dim uiObj As Visio.UIObject
 Dim menuItemsObj As Visio.MenuItems
 Dim menuItemObj As Visio.MenuItem

 Dim Lv1_menuObj As Visio.Menu
 Dim Lv1_menuItemS As Visio.MenuItems
 Dim Lv1_menuItem As Visio.MenuItem

 Dim Lv2_menuObj As Visio.Menu
 Dim Lv2_menuItemS As Visio.MenuItems
 Dim Lv2_menuItem As Visio.MenuItem

 Dim Lv3_menuObj As Visio.Menu
 Dim Lv3_menuItemS As Visio.MenuItems
 Dim Lv3_menuItem As Visio.MenuItem ThisDocument.ClearCustomMenus
 Set uiObj = Visio.Application.BuiltInMenus
 Set Lv1_menuObj = uiObj.MenuSets.ItemAtID(visUIObjSetDrawing).Menus.AddAt(10)
 Lv1_menuObj.Caption = "ユーザメニュー(&U)"
 Set Lv1_menuItemS = Lv1_menuObj.MenuItems


 Set Lv1_menuItem = Lv1_menuItemS.Add
 Lv1_menuItem.Caption = "メニュー1"
 Lv1_menuItem.AddOnName = "aa.exe"

 Set Lv1_menuItem = Lv1_menuItemS.Add
 Lv1_menuItem.Caption = "メニュー2"
 Lv1_menuItem.CmdNum = visCmdHierarchical '階層を表すCmdNum

  Set Lv2_menuItem = Lv1_menuItem.MenuItems.Add
  Lv2_menuItem.Caption = "メニュー2−1"
  Lv2_menuItem.AddOnName = "bb.exe"

  Set Lv2_menuItem = Lv1_menuItem.MenuItems.Add
  Lv2_menuItem.Caption = "メニュー2−2"
  Lv2_menuItem.CmdNum = visCmdHierarchical '階層を表すCmdNum

   Set Lv3_menuItem = Lv2_menuItem.MenuItems.Add
   Lv3_menuItem.Caption = "メニュー2−2−1"
   Lv3_menuItem.AddOnName = "cc.exe"

   Set Lv3_menuItem = Lv2_menuItem.MenuItems.Add
   Lv3_menuItem.Caption = "メニュー2−2−2"
   Lv3_menuItem.CmdNum = 1002 'ファイルを開く機能番号

  Set Lv2_menuItem = Lv1_menuItem.MenuItems.Add
  Lv2_menuItem.Caption = "メニュー2−3"
  Lv2_menuItem.CmdNum = 1092 'HELPの機能番号

 Set Lv1_menuItem = Lv1_menuItemS.Add
 Lv1_menuItem.Caption = "メニュー3"
 Lv1_menuItem.CmdNum = 1312 'カスタムプロパティの機能番号

 Set Lv1_menuItem = Lv1_menuItemS.Add
 Lv1_menuItem.Caption = "" 'キャプション無しは境界線

 Set Lv1_menuItem = Lv1_menuItemS.Add
 Lv1_menuItem.Caption = "メニュー4"
 Lv1_menuItem.CmdNum = 1024 '削除の機能番号


 ThisDocument.SetCustomMenus uiObj

End Sub


なお、上記サンプルの行頭には読みやすいように全角の空白が入っているのでコピー&ペーストしたら全角の空白を半角の空白に置き換えてください。

05: 名前:めぐ投稿日:2005/05/23(月) 11:39
M1号さん ありがとうございます。
メニューを作成することができました。

ただ、ファイルのDocumentOpenedに記述しているせいか、
拡張子が(VSD)の場合はすんなり実行してくれるのですが、
テンプレート(VST)にすると実行してくれません。
テンプレートの場合でも、ファイルと開くとカスタムメニューが
出来るようにしたいのですが、どうすればよいのですか?

よろしくおねがいします。

06: 名前:M1号投稿日:2005/05/23(月) 14:07
通常テンプレート(VST)から開いた場合には、Opened(オリジナルを開く)ではなくCreated(複製を開く)になります。
したがってめぐさんのようにVSDでもVSTでも同じようにメニューを出したい場合には、
DocumentCreated と DocumentOpened の双方でコードを実行する必要があります。

07: 名前:めぐ投稿日:2005/05/23(月) 14:52
M1号さん ありがとうございます。
できました!

M1号さんのレスは解りやすくて、とても感謝しています!
また何かありましたらご教授宜しくお願い致します。

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



215: EXCELからVISIOマクロを動かしたのですが  全レス

01: 名前:TAMON投稿日:2005/05/19(木) 12:17
VISIOのVBAヘルプなどや以前のスレッドにはVISIOからEXCELを呼び出す事の
事例はあるのですが逆は見当たりません。
EXCELから呼び出すこともプログラムとして関心があるのですが方法があればお教えください。

02: 名前:yoda投稿日:2005/05/19(木) 14:23
基本的には、同じです。
見つけるのは、大変かも知れませんが、
以前のスレッドに、ないことはないと思います。

03: 名前:TAMON投稿日:2005/05/19(木) 15:51
回答ありがとうございます。
うむ,,,,,,
私には難易度が高いようで、力量不足 悲しい。。。。
過去のスレッドも探したが見つからず、残念

04: 名前:わんこ投稿日:2005/05/19(木) 17:30
とりあえず指定したvisioファイルを開く方法です。
パスやファイル名はご自分の環境に合わせて修正してください。

excelのVBAだったらexcelの掲示板で質問した方がレスが多いと思いますよ。

Sub test()
Dim aaa
'visio起動
aaa = Shell("C:\Program Files\Microsoft Office\Visio10\Visio.exe", vbNormalFocus)

'指定したファイルを開く
SendKeys "%FO", True

SendKeys "C:\My Documents.\図面1.vsd", True
SendKeys "{enter}", True

End Sub

05: 名前:M1号投稿日:2005/05/19(木) 19:09
yodaさんが書いているようにExcelのVBAもVisioと同じです。
VISIOで使うメソッドやプロパティもExcelのVBAからそのまま使えます。
以下は、ExcelからVisioへの参照設定がなされていない場合の例ですが、

Sub test()
Dim visApp As Object
Dim visDoc As Object
Dim visShp As Object

Set visApp = CreateObject("Visio.application")
Set visDoc = visApp.documents.Add("")
Set visShp = visDoc.pages(1).drawrectangle(1, 2, 4, 8)
End Sub

1行目でVISIOを立ち上げて、
2行目で空白の図面を追加して、
3行目でアクティブページに縦長の四角を描く、

です。

06: 名前:TAMON投稿日:2005/05/19(木) 21:54
みなさま方、アドバイスありがとうございます。
感謝、感謝ありがたいことです。
これから、試してみます。
ありがとうございます。

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



216: シェイプの背景色が変わらない  全レス

01: 名前:つくつく投稿日:2005/05/18(水) 11:21
こんにちわ、いつも大変お世話になっております。
プログラム内でシェイプの背景色を変更したいのですが、
何故か変更できません。(VISIO2003を使用しております。)
下記のように各プロパティにRGBを与えた後、
図面にシェイプを貼り付けております。
(下記流れで線色は変更されておりますが背景色は変更されておりません。)
貼り付けられた後、図面上でプロパティを確認すると背景色は指定した
RGBカラーになっているのですが、表示は白のまんま・・・。
どなたかご教授よろしくお願いいたします(>_<)

'''宣言
pobjShp As Visio.Shape
'''線色変更
pobjShp.Cells("LineColor").Formula=RGB(*,*,*)
'''背景色を変更
pobjShp.Cells("FillForegnd").Formula=RGB(*,*,*)

その後シェイプを貼り付ける

02: 名前:わんこ投稿日:2005/05/18(水) 14:49
画面が更新されていないのかもしれません。
処理後に
DoEvents
を1行追加してみてはどうでしょうか?

【参考】
http://www.mster.co.jp/visiosquare/cgi-bin/visbbs/mibbs.cgi?mo=p&fo=auto&tn=0420&rn=30 [source] [check]

03: 名前:yoda投稿日:2005/05/18(水) 16:28
=RGB(*,*,*) を ="RGB(*,*,*)" とすればよいかも知れません。

04: 名前:つくつく投稿日:2005/05/19(木) 09:52
おはようございます。
わんこさん、yodaさん、ご返答ありがとうございました!!!

DoEvents追加、RGBを""で囲むという対処方法ですか・・・、
一度、試してみます!!

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



217: シェイプデリートイベントをキャンセルする方法  全レス

01: 名前:ど素人投稿日:2004/10/08(金) 18:28
シェイプのデリートイベントを拾って、特定の処理を行っています。
イベントは、AddAdviseメソッドを使って追加しました。
途中でシェイプをデリートしたくない場合があったため、EventSink
クラスのVisEventProcメソッドの戻り値をfalseにしました。
ですが、シェイプはそのまま削除されてしまいます。
デリートのクエリをキャンセルする方法はないでしょうか?

宜しくお願いしまっす・・・;;

03: 名前:ど素人投稿日:2004/10/08(金) 22:19
レスありがとうございます!
BeforeShapeDeleteのイベントを拾って、
VisEventProcの中で処理を行っています。
シェイプを回復する手段としてUndo()メソッドを使用したのですが、
例外が発生してしまいました。

[図面1 - Microsoft Visio]
Message :
例外が発生しました。
at Microsoft.Office.Interop.Visio.IVApplication.Undo()

VisEventProcの中でUndo()メソッドを実行するのはうまくいかないのでしょうか?

ちなみに、コードは以下のようにかきました。C#ですが・・・
※applicationは、VisioのApplicationオブジェクトへの参照です。

// イベントが発生しないようにする
application.EventsEnabled = (short)0;
// Undoコマンド実行
application.Undo();
// イベントの発生を元に戻す
application.EventsEnabled = (short)1;

↑Undo()でAddShapeのイベントが走ると思い、
EventsEnabledを上下にはさみました。

っていうか、シェイプのデリートが完了されないのに、
Undoしても意味ないような気がしてきました・・・
BeforeShapeDeleteはシェイプが削除される前ですよねぇ・・・

yodaさんのおっしゃる「シェイプを回復する」方法には
どのようなものがあるでしょうか?
新しくシェイプをドロップするしかないでしょうか〜
なぜUndo()が実行できないのかも謎です・・・

04: 名前:yoda投稿日:2004/10/08(金) 22:48
なるほど、undoとは考えましたね、
わたしは、
before deleteの時点で、
activewindow.selection.....で、
消去前のシェイプの座標を取得し、
コピーを作っておき、
消去しないなら、
元の場所に貼り付ければ、
よいのかなと、思っていました。

05: 名前:yoda投稿日:2004/10/09(土) 02:45
そういえば、昔ここで、
undo redoの使い方を
教わりました。
過去ログが見つからない
し、使い方も覚えていない
のですが、以下の通りです。

Option Explicit

Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Sub ExecUndo()
Dim hWnd As Long
hWnd = Visio.Application.WindowHandle32
Call PostMessage(hWnd, &H111, &H3F9, hWnd)
End Sub

Public Sub ExecRedo()
Dim hWnd As Long
hWnd = Visio.Application.WindowHandle32
Call PostMessage(hWnd, &H111, &H3FA, hWnd)
End Sub

06: 名前:あひゃ投稿日:2004/10/13(水) 01:35
返事が遅れてすいません。
貴重な情報をありがとうございます!
まだ試してないのですが、今週中には試してみようと思います。^^
しかし、Undoするだけでこんなややこしいとわ・・・

07: 名前:名無しさん投稿日:2004/10/26(火) 13:26
>BeforeShapeDeleteはシェイプが削除される前ですよねぇ・・・
>yodaさんのおっしゃる「シェイプを回復する」方法には
>どのようなものがあるでしょうか?
BeforeShapeDeleteのCase分の中で、図面を保存してしまえば、
Shapeをdeleteする前の状態を確保できます。
そしてこの図面を、再びopenすれば、deleteする前の
状態が、回復できると思います。

08: 名前:名無しさん投稿日:2004/10/26(火) 13:58
図面を保存するには、ThisDocumentに、
以下のようにしておけば、よいと思います。

Private WithEvents pge As Visio.Page

Private Sub Document_DocumentOpened(ByVal doc As IVDocument)
Set pge = ActivePage
End Sub

Private Sub pge_BeforeShapeDelete(ByVal Shape As IVShape)
MsgBox Shape & "が削除されます!"
ThisDocument.Save
End Sub

09: 名前:yoda投稿日:2004/10/26(火) 21:04
undo, beginundoscope,endundoscope
を使って、deleteしたシェイプを回復する
マクロのサンプルを作りましたので、
アップロードしました。解凍して、
ファイルを開き、シェイプを消すと、
回復します。ここです。
http://www.mster.co.jp/visiosquare/cgi-bin/upload/image/096.lzh [source] [check]

10: 名前:yoda投稿日:2004/10/27(水) 09:45
096.lzhは、複数のシェイプを削除したときの表示が
悪かったので、改善しました。
http://www.mster.co.jp/visiosquare/cgi-bin/upload/image/097.lzh [source] [check]

11: 名前:yoda投稿日:2005/05/18(水) 06:26
簡単な方法を教えてもらいました。
MS の "Discussions in visio.developer.vba"の"Cancel Delete"(5/16/2005)
で、urlは、
http://msdn.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.visio.developer.vba&lang=en&cr=US [source] [check]
マクロはこんなに簡単です。これです。
Private Function Document_QueryCancelSelectionDelete(ByVal Selection As IVSelection) As Boolean
Document_QueryCancelSelectionDelete = True
End Function

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



218: ポップアップメニューを非表示する方法を教えて  全レス

01: 名前:lover投稿日:2005/05/16(月) 21:40
セルを右クリックしたときに出るポップアップメニューをVBAで人為的に出ないようにする方法がありますか?

02: 名前:yoda投稿日:2005/05/17(火) 06:13
たぶん、ないでしょう。
ただ、シェイプ独自のポップアップは、
シェイプのアクションセクションを
削除すれば、消えますが、削除
されてしまいます。

03: 名前:M1号投稿日:2005/05/17(火) 20:37
シェイプの右クリックをイベントを使って消してみました。
まずクラスを挿入して以下のコードを貼り付けてください。
Dim WithEvents vsoWindow As Window
Private Sub Class_Initialize()
Set vsoWindow = ActiveWindow
End Sub
Private Sub Class_Terminate()
Set vsoWindow = Nothing
End Sub
Private Sub vsoWindow_MouseDown(ByVal Button As Long, ByVal KeyButtonState As Long, ByVal x As Double, ByVal y As Double, CancelDefault As Boolean)
If Button = 2 Then
CancelDefault = True
End If
End Sub

次にThisDocumentに以下のコードを貼り付けてください。
Dim myMouseListener As Class1
Sub evStart()
Set myMouseListener = New Class1
End Sub
Sub evStop()
Set myMouseListener = Nothing
End Sub

VISIOのツール-マクロ-ThisDocumentのevStartで右クリックが無効になります。
VISIOのツール-マクロ-ThisDocumentのevStopで右クリックが有効に戻ります。

プログラムの仕組みはコードを見ていただければ分かると思いますが、
VISIOの右クリックイベントを無効にしているだけです。
と、ここまで書いてから「セルを・・・」に気が付きました。
もしかしてシェイプシートのセルでしょうか??

04: 名前:yoda投稿日:2005/05/17(火) 21:28
さすが、M1号さんですね。
こんな簡単な方法があるのですね。

05: 名前:名無しさん投稿日:2005/05/20(金) 15:13
SHIFT+F10も消すのであれば
コンテキストメニューメッセージを無効にするしかないかもですね。
出来るのかわからないけれど。

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



219: ページ名の変更について  全レス

01: 名前:kool投稿日:2005/05/13(金) 17:49
最近、VISIOのマクロをやり始めたので基本的な質問かもしれませんが、
左のページから順番にページ名を
変更したいのですがどのようにすればよいのでしょうか?

よろしくお願いします。

02: 名前:yoda投稿日:2005/05/13(金) 19:38
For Each objPage In ThisDocument.Pages
I = I + 1
objPage.Name = "mymymypage" & I
Next
でいけそうです。

03: 名前:kool投稿日:2005/05/16(月) 09:58
返信遅くなってすいません。
出来ましたありがとうございます。

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



220: Visioのプロパティ内容の取得  全レス

01: 名前:まもる投稿日:2005/05/10(火) 16:28
EXCELのVBAでフォルダにあるすべてのVisioファイルのプロパティ内容を
取得したいと考えています。
どのようにすればよろしいでしょうか?
どなたかわかる方いたらお願いします。

07: 名前:yoda投稿日:2005/05/11(水) 17:36
>ThisDocumentオブジェクトの
Documentオブジェクトの間違いでした!!

08: 名前:yoda投稿日:2005/05/11(水) 17:41
あるいは、ここ。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devref/HTML/DVS_appendix_a_939.asp [source] [check]

09: 名前:yoda投稿日:2005/05/11(水) 17:44
ここにも、「改定番号」・「コメント」は、ないようです。
本当に、Visio2002には、あるのですか?

10: 名前:まもる投稿日:2005/05/11(水) 18:40
プロパティの原作者の中にあるのですが・・・・

11: 名前:yoda投稿日:2005/05/11(水) 19:46
そうですか。Visio2003には、「作成者」はありますが、
その中というのがありません。
ほかの方法としては、Visio2002の図面を、XMLで
保存して、それらしいタグを探してみて、もしあれば、
そのタグから取得するようにする方法があると思います。

12: 名前:yoda投稿日:2005/05/12(木) 09:01
XMLで保存したVisio2003図面をノートパドでみると、
図面のプロパティの部分は、以下のようになっていました。
<DocumentProperties>
<Title>test</Title>
<Subject>test</Subject>
<Creator>test</Creator>
<Keywords>test</Keywords>
<Desc>test</Desc>
<Manager>test</Manager>
<Company>test</Company>
<Category>test</Category>
<HyperlinkBase href='test'/>

13: 名前:kuni投稿日:2005/05/12(木) 11:25
http://park7.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200505/05050066.txt [source] [check]

こんな方法もあるみたいですよ

14: 名前:yoda投稿日:2005/05/12(木) 12:09
面白いですね!!
こんな方法があるとは、知りませんでした。
kuni さん、ありがとう。

15: 名前:まもる投稿日:2005/05/12(木) 14:14
yodaさん、kuniさんありがとうございます。

なんとか欲しい情報を抜粋することができました。
今後もわからないことがあったら教えて下さい。

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


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