KoMaDo   VISIO SQUARE : VB/VBA  ■ Headline ■ HOME    

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

61 :GUARD()関数で保護されたセルの変更(02)  62 :Cellsを使ったAskセルの参照(08)  63 :用紙上の空きスペース(06)  64 :フリーフォームで閉じたパスを描く方法(04)  65 :挿入された図のPath(03)  66 :ステンシルの表示(11)  67 :自動でステンシルを配置 (15)  68 :シェイプの削除後に処理を実行したい(04)  69 :マスターシェイプの削除(11)  70 :フォーム上のデータ(07)  71 :シェイプシートの値の取得(05)  72 :テンプレートを開くとタイトル(08)  73 :テキストを編集状態にしたい(05)  74 :Visio の線やテキストの文字の座標をテキストに吐き出したい(05)  75 :VISIOで簡易GISソフトを構築する方法を教えて下さい(07)  76 :1(オブジェクト)対多(コネクタ)について(08)  77 :オブジェクトの挿入について(16)  78 :図形の非表示方法 (05)  79 :カスタムプロパティの変更(04)  80 :コンボボックスをツリー状にしたい(09)  81 :リンクオブジェクトの取得(06)  82 :コントロール配列ができない!?(06)  83 :白黒GIFファイルで保存する方法(02)  84 :グループ内メンバーの図面の重ね合わせ判定(05)  85 :位置を取得方法(01)  86 :複製として開かれている場合の判断(02)  87 :Webブラウザ(03)  88 :複数個のドッキングウインドウをタブ状態で表示するには(15)  89 :COM Add-inからレイヤのロックを解除(05)  90 :VB2005でOLE を実現する方法は?(06)  91 :起動時にパスワード入力ダイアログが表示されてしまう(04)  92 :DDL文の出力の自動化(02)  93 :挿入図形の解像度指定(03)  94 :線の頂点の絶対座標(11)  95 :図面ステンシルの制御(03)  96 :子とのHitTest (03)  97 :曜日の自動取得(04)  98 :.VDT ファイルに保存してテキストで修正したら開けないのは?(02)  99 :VCでのオートメーション開発(07)  100 :標準モジュールについて(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 次のページ  総てのスレッド  スレッド総数 69661 - 70 を表示


61: GUARD()関数で保護されたセルの変更  全レス

01: 名前:mar投稿日:2007/02/05(月) 15:48
GUARD関数で保護されたセルの数式はVBAで変更できないのでしょうか?
宜しくお願いします。

02: 名前:mar投稿日:2007/02/05(月) 15:52
自己レスです。
FormulaForceU を使えば出来ました。

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



62: Cellsを使ったAskセルの参照  全レス

01: 名前:mar投稿日:2007/02/02(金) 18:40
こんばんは
あるシェイプのカスタムプロパティーの値を別のシェイプにコピーしようと思っていますが、"Ask"のセルが参照できません。
Cells("Prop.name.Ask").FormulaU
を参照しようとすると
"予期しないEOFエラーです。"
のエラーが発生します。
Ask以外のCellは全て参照できます。
CellsSRCを使うにはRowIDがわからない為使えません。
良い方法は無いでしょうか?
宜しくお願いします。

02: 名前:yoda投稿日:2007/02/02(金) 19:34
Visioの間違いで本当は、Verifyなのです。
簡単に確認できます。
シェイプシートを開き、画面上の方の、
式入力欄(Xレと書いてあるところ)をクリックし、
次に、Askセルのデータ欄をクリックすると、
上の方の式入力欄に、セルの正しい名前が
入ります。たとえば、Prop.Row_1.Verify と。
この間違いは、面白いことに、2007にも、
継承されています。

03: 名前:mar投稿日:2007/02/02(金) 19:42
確かにシェイプシート上で参照すると Prop.name.Verify と表示されました。
他にもこんなセルはあるんですかね?
yodaさん ありがとうございます。
無事解決です。

04: 名前:mar投稿日:2007/02/02(金) 19:55
あとCellsSRCを使う方法なんですが、Rowの名前を使ってCellの値を取得することは出来ないんでしょうか?

05: 名前:yoda投稿日:2007/02/03(土) 13:52
Rowで、名前を使えるのは、名前付きRowだけです。
できるものと、できないものがある、ということです。
名前付き、とは、Rowの名前をクリックして、上の欄
に名前がでるものだけです。たとえば、カスタム・プロ
パティ、ユーザー定義、ハイパーリンクくらいでしょう。

06: 名前:yoda投稿日:2007/02/03(土) 16:39
補足ですが、CellsSRCは、indexしか使えません。
CellsSRC( I, J ,K ) と、三次元の座標で指定できるで便利。
Rowの名前に関するプロパティは、以下のものがあります。
Cell(0).RowName
Row(0)..Name
メソッドは、
Shape.AddNamedRow メソッド

07: 名前:yoda投稿日:2007/02/03(土) 20:56
全く余談ですがCellsSRC( I, J ,K ) で、すべてのセクションやセル
を探すと、シェイプシートには載っていない、何に使っているのか不明な、
隠しセクションやセルが出てきます。こんなことをしても、意味はありま
せんが。

08: 名前:mar投稿日:2007/02/05(月) 11:15
やはりRowNameを使ってCellを参照する方法はCellsしかないんですね。
yodaさんありがとうございます。

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



63: 用紙上の空きスペース  全レス

01: 名前:UL投稿日:2007/01/29(月) 14:33
こんにちは、日々拝見させていただいております。
VBAのみで
用紙上の空いている部分を検索することは可能でしょうか。

目的としては、
ボタン押下→空きを探して新たに図の挿入(図同士が重ならないよう)
という感じです。
よろしくお願いします。visio2003

02: 名前:UL投稿日:2007/01/29(月) 15:44
見よう見まねですが、APIで矩形範囲検討中です。
まず、表示されている用紙の左上端の座標を取得出来ないかなと。

03: 名前:yoda投稿日:2007/01/29(月) 16:26
それでも良いかも知れませんが、Visioには、shapeのSpatialNeighbors
プロパティや、SpatialRelationがありますので、これも、検討の価値
がありそうです。

04: 名前:UL投稿日:2007/01/31(水) 09:12
アドバイスありがとうございます。
一度動かして.SpatialRelationを使っての確認をしてみようと思います。
別のでひっかかっているので後ほど。

また、page.SpatialSearchで先に図形を探してから見られるかと思ったのですが
距離指定の部分、単位がinchiかと思いましたが
mmで指定出来る方法等ありましたらおコメントよろしく願いします。

05: 名前:yoda投稿日:2007/01/31(水) 09:35
mmで指定するには、FormulaのResultプロパティを使います。
VBAでは、inchiが標準ですので、私は単純に25.4をかけて
換算します。

06: 名前:UL投稿日:2007/01/31(水) 13:44
かける25.4ですか…inchiに慣れとくべきでしょうか。。
とりあえずこうなりました報告。
適当に配置した後、重なって場合に下へずらしていく。

dim Sel as selection
dim myS as visio.shape, AA as visio.shape
dim y1 as single,y2 as single
set myS=activepage.shapes("obj")
set Sel=myS.SpatialNeighbors(13, 0.38, 0)
y1=297
do until sel.count=0
for each AA in Sel
y2=AA.Cells("piny").Result(visMillimeters) - (AA.Cells("height").Result(visMillimeters) / 2)
if y1>y2 then y1=y2
next
'再移動
myS.cells("piny").Result(visMillimeters)=y1
set Sel = myS.SpatialNeighbors(13, 0.38, 0)
loop

.SpatialNeighborsの引数があいまいなのですが
なんとか希望通り動いてくれたのでいったん良しにします。
移動をさせる対象はグループ図形なのですが、グループ枠を見ているわけではいない様子。
とりあえずvisioの範囲の広さに感激です。ありがとうございました。

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



64: フリーフォームで閉じたパスを描く方法  全レス

01: 名前:名無しさん投稿日:2007/01/29(月) 16:45
お世話になっております。質問させて頂きます。

手入力でフリーフォームを描くとき、「閉じたパス」というコマンドで
閉じた図形を描くことができますが、
この「閉じたパス」と同じことをVBAでやる方法はありますでしょうか?

つまり、例えば、
Application.CommandBars("Drawing").Visible = True
With ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, 207#, 154.5)
.AddNodes msoSegmentLine, msoEditingAuto, 294.75, 141#
.AddNodes msoSegmentLine, msoEditingAuto, 315#, 199.5
.AddNodes msoSegmentLine, msoEditingAuto, 232.5, 207#
.ConvertToShape.Select
End With
で4頂点からなる折れ線を描き、
その後ポップアップメニューから選択できる「閉じたパス」を指定した
場合と同じように、折れ線を閉図形に変更するVBAステートメントは
どのようになるのでしょうか?
(もちろん、第4頂点と第1頂点の間を新たな線分でつなげば、
見た目上は同じ図形を描けることは承知しています。
この方法しかないのでしょうか?)

よろしくお願いします。

02: 名前:Iwase投稿日:2007/01/29(月) 16:50
失礼しました、うっかり名無しになってしまいました。
Iwaseと申します。
改めましてよろしくお願い致します。

03: 名前:yoda投稿日:2007/01/29(月) 16:59
シェイプシートを開いて、観察してください。
閉じた図形であれば、
Geometryセクションの最終行の式が、1行目を参照しています。
このようにすれば、閉じた図形になると思います。

04: 名前:Iwase投稿日:2007/01/30(火) 13:33
yodaさん、勉強になりました。
ありがとうございました。

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



65: 挿入された図のPath  全レス

01: 名前:mar投稿日:2007/01/29(月) 15:03
メニューの[挿入(I)]-[図(P)]-[ファイルから(F)]で画像を挿入したときに画像のファイル名、パスを取得したいのですが、可能でしょうか?
宜しくお願いします。

02: 名前:mar投稿日:2007/01/29(月) 16:46
VisualStudioでファイルを挿入するアドインでも作成するしかないんでしょうか??

03: 名前:yoda投稿日:2007/01/29(月) 16:55
そうでしょうねー。

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



66: ステンシルの表示  全レス

01: 名前:mar投稿日:2007/01/26(金) 10:48
複数のステンシルを開いているとき、指定したステンシルを折りたたまれていない状態にすることは可能でしょうか?
また 現状折りたたまれていないステンシル名を取得することは可能でしょうか?
連日 質問ばかりですいません。
宜しくお願いします。

03: 名前:yoda投稿日:2007/01/26(金) 11:25
折りたたまれって、どういうことでしょうか?

04: 名前:mar投稿日:2007/01/26(金) 11:33
表現がいまいちですいません。
複数のステンシルを開くと、図形Windowに表示されますが、登録されているマスタが見えるのは一つだけですよね。
このマスタが見える状態のステンシル名を取得したいのです。
状態により、選択したいステンシル候補のマスタが表示されていればそのまま
表示されていなければ変更したいんです。
宜しくお願いします。

05: 名前:yoda投稿日:2007/01/26(金) 13:22
WindowのWindowStateプロパティが、特定の値のとき、
先頭にあるようです。私の場合は、&HC000401でしたが、
これが普遍的かどうかわかりません。
逆に、特定のステンシルを先頭にするには、Windowの
Activateメソッドがよいようです。

06: 名前:mar投稿日:2007/01/26(金) 15:38
Resありがとうございます。
Windowを調べてみましたが、複数のステンシルを開いても1つしかありません。

Dim wnd As Window
For Each wnd In Application.Windows
Debug.Print wnd.Type
Next

結果
1 'visDrawing(図面)

07: 名前:yoda投稿日:2007/01/26(金) 15:53
Windowについて、もっと勉強してください。
そのWindowのさらに子供達があることを忘れないでね。
For Each wnd In Application.Windows(1).Windows
とするか、
For Each wnd In ActiveWindow.Windows
とします。

08: 名前:mar投稿日:2007/01/26(金) 16:55
Windowの下にWindowがあるとは知りませんでした。
調べてみます。

09: 名前:mar投稿日:2007/01/26(金) 18:11
yodaさん ありがとうございます。
目的のステンシルを取得できました。

Dim wnd As Window
For Each wnd In ActiveWindow.Windows
If wnd.Type = 7 Then
If (wnd.WindowState And visWSActive) Then
Debug.Print wnd.Document.Name
End If
End If
Next

[結果]
xxx.vss

10: 名前:yoda投稿日:2007/01/26(金) 18:40
私も、大変勉強になりました。
If (wnd.WindowState And visWSActive) Then
は、いいですねー。

11: 名前:mar投稿日:2007/01/29(月) 15:11
恐縮です・・・

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



67: 自動でステンシルを配置  全レス

01: 名前:ささき 投稿日:2000/07/27(木) 10:55
こんにちは!
Visio2000で、設定された情報(縦位置や横位置や利用ステンシル)を元に、
自動で指定されたステンシルを図面に貼り付けるマクロを作成したいのですが、
どのように作っていけばよいのか、未熟なもので皆目見当がつきません。
どなたか、なんでもけっこうですので、ご教授お願いいたします。

07: 名前:TKS投稿日:2001/11/14(水) 14:50
>X、Yはインチで指定する必要があります。

座標の単位について、どこに記述されているのか、さっぱり
分からなかったので、助かりました。

ヘルプにはX,YはInteger型だと書いてありますが、
SingleやDoubleでも大丈夫みたいですね・・・。

08: 名前:kokage投稿日:2001/12/13(木) 13:04
>X、Yはインチで指定する必要があります。

私も座標単位の記述を見つけられなかったクチで、助かりました。

09: 名前:初心者投稿日:2002/05/14(火) 18:53
管理人さま、
すみません、やっぱり3番のレス内容もう少し詳しくお願いできないでしょうか。
”該当ステンシルを開く"というのがわかりません。
仮に、

・ステンシル・・・AAA.vss
・マスタシェイプ・・・BBB

だとしたら、どういった風になるのでしょうか。
初歩的な質問かもしれませんが、本当に困っています。
宜しくお願いします。

10: 名前:名無し投稿日:2002/05/15(水) 17:30
Dim docObj as visio.document
Dim mstObj as visio.master
Dim pagObj as visio.page
set docObj = Documents.OpenEx("AAA.vss", visOpenDocked)
set mstObj = docObj.Masters("BBB")
set pagObj = ActivePage
こんな感じでしょうか?

11: 名前:初心者投稿日:2002/05/15(水) 17:43
レスありがとうございます。
無事解決できました!

12: 名前:rumi投稿日:2002/11/27(水) 13:47
ミリメートルで持っている座標位置をインチに変換する際に
どうしても誤差が生じてしまいます。
ミリメートルで位置を指定させる方法はないでしょうか?

13: 名前:なか投稿日:2002/11/27(水) 15:06
Draw????メソッドやSeBegin,SetEnd,SetCenterメソッドでは
インチでしか設定できませんが、
セルの値を直接Resultプロパティ等で変更する場合は
単位を指定して設定することができます。

14: 名前:rumi投稿日:2002/11/28(木) 09:36
なかさん、レスありがとうございました。解決しました。

15: 名前:Amanda投稿日:2007/01/27(土) 19:32
Sentimental and nostalgic. Great.

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



68: シェイプの削除後に処理を実行したい  全レス

01: 名前:mar投稿日:2007/01/25(木) 16:51
シェイプの削除後に処理を実行したいのですが、実現する方法はあるでしょうか?
VisioのイベントにはDocument_QueryCancelSelectionDelete,Document_BeforeSelectionDeleteしかイベントは見当たりません。
削除された後に接続されているShapeをリストアップして処理したいんですが...
宜しくお願いします。

02: 名前:yoda投稿日:2007/01/25(木) 17:01
AddAdviseメソッドを使えばできると思います。
ヘルプにサンプルが付いています。

03: 名前:mar投稿日:2007/01/25(木) 17:27
yodaさん Resありがとうございます。
AddAdviseメソッドを調べてみます。

04: 名前:mar投稿日:2007/01/25(木) 19:39
yodaさん AddAdviseでうまくいきました。
ただ削除された後なのでシェイプの情報は受取れないんですね。
Beforイベントでシェイプ情報を受取って、削除後のイベントで処理を行うようにして解決しました。

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



69: マスターシェイプの削除  全レス

01: 名前:mar投稿日:2007/01/24(水) 13:17
図面上で使われていないマスターシェイプをVBAで削除しようと考えています。
それぞれのマスターが使用されているかどうかの判別方法はどのようにすればよいのでしょうか?
宜しくお願いします。

03: 名前:mar投稿日:2007/01/24(水) 17:40
yodaさん Resありがとうございます。
Deleteメソッドを使っているのですが使用中でも消えてしまいます。
ちょっと消え方が変なんですが...
[実際のコード]
Dim mst As Master
For Each mst In ActiveDocument.Masters
mst.Delete
DoEvents
Next
実行すると使用されていないマスターと使用しているマスター1個が消えます。
そのままもう一度実行すると使用されているマスターがもう1つ消えます。
Visioは2003を使用しています。

04: 名前:名無しさん投稿日:2007/01/24(水) 17:41
削除する時は後ろからです。
前から削除すると実数と総数がズレます。

05: 名前:yoda投稿日:2007/01/24(水) 19:20
私の早とちりだったようでしね。
なるほど、単純にDeleteでは、全部消えてしまいますね。
とすると、厄介です。
全シェイプを調べて、シェイプのmaster
プロパティを使って、マスターのリストを作り、
図面ステンシルのマスターが、そのリストになければ
消去する。という形に、なるのでしょうね。

06: 名前:yoda投稿日:2007/01/24(水) 19:32
以前、管理人さんの作ったマクロがあったのですが、
見つかりませんでした。

07: 名前:yoda投稿日:2007/01/24(水) 20:00
CreateSeletionメソッドを使いましょう。
Dim mst As Visio.Master
Dim mySel As Visio.Selection
For Each mst In ThisDocument.Masters
Set mySel = ActivePage.CreateSelection(visSelTypeByMaster, , mst)
If mySel.Count = 0 Then
mst.Delete
End If
Next

08: 名前:yoda投稿日:2007/01/24(水) 20:12
また間違えた!!こうですね。
Dim mst As Visio.Master
Dim mySel As Visio.Selection
Dim I As Long, N As Long
N = ThisDocument.Masters.Count
For I = N To 1 Step -1
Set mst = ThisDocument.Masters(I)
ActiveWindow.DeselectAll
Set mySel = ActivePage.CreateSelection(visSelTypeByMaster, , mst)
If mySel.Count = 0 Then
mst.Delete
End If
Next

09: 名前:mar投稿日:2007/01/25(木) 09:35
返事遅れてすいません。

>削除する時は後ろからです。
まさしく その通りです。修正しました。


>CreateSeletionメソッドを使いましょう。
CreateSelectionではページ単位の比較しか出来ないため 複数ページのDocumentなのでうまくいきませんでした。
全ページをスキャンして削除するようにしてみます。

10: 名前:yoda投稿日:2007/01/25(木) 09:58
図面の上で、手で消去しようとすると、使用中のマスターについては、
確認のメッセージが出るのに、Deleteメソッドでは、なぜ出ないので
しょうね。これが出れば、もっと簡単にマクロができそうな気がするの
ですがね。

11: 名前:mar投稿日:2007/01/25(木) 10:33
yodaさんのコードを全ページ対象に改造してうまくいきました。
ありがとうございました。

Dim mst As Visio.Master
Dim mySel As Visio.Selection
Dim myPage As Integer, mstCnt As Integer, pgCnt As Integer, shpCnt As Integer
Dim i As Integer, j As Integer

myPage = ActivePage.Index
mstCnt = ActiveDocument.Masters.Count
pgCnt = ActiveDocument.Pages.Count

For i = mstCnt To 1 Step -1
Set mst = ActiveDocument.Masters(i)
shpCnt = 0
For j = 1 To pgCnt
ActiveWindow.Page = ActiveDocument.Pages(j)
ActiveWindow.DeselectAll
Set mySel = ActivePage.CreateSelection(visSelTypeByMaster, , mst)
shpCnt = mySel.Count
If shpCnt > 0 Then Exit For
Next
If shpCnt = 0 Then mst.Delete
Next
ActiveWindow.Page = ActiveDocument.Pages(myPage)

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



70: フォーム上のデータ  全レス

01: 名前:名無し投稿日:2007/01/24(水) 16:36
アクセスについてもvisioについても初心者です。
フォームに配置したテキストボックス内に入力されたデータをアクセスにエクスポートしょうと考えてます。
『データベースへのエクスポート』ではシェイプ情報しかエクスポートされません。

もしかしたら FORM.Hide で何とかなるかもなど考えてはいるんですけど、フォーム上のデータの
扱い方が良く分かりません。
どなたか分かる人がいらっしゃればご伝授お願いします。

02: 名前:yoda投稿日:2007/01/24(水) 16:47
フォーム上のデータをシェイプに移せば、よいのでは?

03: 名前:名無しさん投稿日:2007/01/24(水) 16:55
返信ありがとうございます。
それをやると図面に余分なシェイプが増えて見ずらくなると思ってやってないです。
その方法だと出来るんですけど…すいません。。

04: 名前:yoda投稿日:2007/01/24(水) 17:07
終わったあと、消せばよいのでは?

05: 名前:yoda投稿日:2007/01/24(水) 17:08
同じページに書くから、見ずらくなるのでは?

06: 名前:名無しさん投稿日:2007/01/24(水) 17:10
あ!なるほど…!そうですね!
終わったあと消すやり方でやります!

07: 名前:名無しさん投稿日:2007/01/24(水) 17:10
ありがとうございます!

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


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