VISIO SQUARE : VB/VBA  ■ Headline ■ HOME    

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

1 :印刷ダイアログの印刷範囲をVBAから設定するには(08)  2 :シェイプのテキストだけを最前面へ(05)  3 :マスタシェイプ(07)  4 :Visioをバックグラウンドで立ち上げる方法(05)  5 :リストの更新と参照(07)  6 :マクロのキャンセル(04)  7 :ActiveX コントロールを図面に追加する方法(03)  8 :テンプレートを開いた後名前を変更したい(04)  9 :単位の変換について(04)  10 :Drawing Control のエラー(11)  11 :マクロの削除、開放?(04)  12 :VisioからExcelファイルへの保存に関して(05)  13 :Activeなグループのメンバー図形の取得(04)  14 :ユーザ定義セルを消去しても残ります(03)  15 :マスタシェイプの更新で一括更新(05)  16 :Webページとして保存をマクロで実行(03)  17 :マウスカーソルを砂時計にしたいのですが(04)  18 :フォントサイズ(04)  19 :複数のカスタムツールバー、メニューの作成について(05)  20 :図面ページ上のシェイプを探すマクロ(07)  21 :任意のシェイプを画面の中央へ(03)  22 :接続ポイントの追加(03)  23 :ページにまつわる増減する情報の記録先(10)  24 :VBAUnit について(06)  25 :ステンシルでのマクロ起動(05)  26 :ステンシル・メニュー「編集」の制御について(04)  27 :MDIフォームのメニューが消える(03)  28 :子シェイプも含めて、全てのシェイプを処理(01)  29 :CreateSelectionの第2引数(04)  30 :UniqueIDが一意になる範囲(03)  31 :データベースレコードの更新をVBAで (19)  32 :FromConnect と Connect の違い(02)  33 :メモリーに入れるか、再計算させるか(01)  34 :カスタムプロパティのダイアログ(03)  35 :カスタムプロパティのユーザ定義セルに値を書き込むには。(02)  36 :VB.netからVISIO2002に作成したバーコードのValueを設定する方法(04)  37 :ゆう(02)  38 :複数のステンシルやソリューションから使用するVBAコード(11)  39 :フィールドのユーザ定義式での文字列の引っ張り方(03)  40 :ステンシルに保存したVBAコードについて(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 次のページ   総てのスレッド  スレッド総数 6961 - 10 表示


1: 印刷ダイアログの印刷範囲をVBAから設定するには  全レス

01: 名前:yuko投稿日:2007/12/26(水) 17:32
DoCmdで印刷ダイアログを表示する方法は以前の掲示板で分かりましたが、印刷範囲で"現在のページ"が選択されるようにできますでしょうか?

02: 名前:yoda投稿日:2007/12/26(水) 18:30
分かりませんので、マクロを記録してみました。
Application.ActiveDocument.PrintOut PrintRange:=visPrintCurrentPage, _
PrinterName:="Microsoft Office Document Image Writer"

そのあと、PrintOutメソッドについて、F1を押して
ヘルプを表示してみました。そこには、
こんなサンプルが、あるでは、ありませんか。
'現在のページを 2 部既定のプリンタで印刷します。
ThisDocument.PrintOut visPrintCurrentPage, , , , , , , 2

03: 名前:yoda投稿日:2007/12/27(木) 09:01
Application.DoCmd visCmdFilePrint で出てくるダイアログは、
アプリケーションモーダルですので、ダイアログが表示されて
いる間は、VisioのVBAはそこで、ウエイティングの状態になって
しまいます。そのため、ダイアログの上で、オプションを選択する
ことは、VisioのVBAでは、できませんので、全く別の、独立した
プログラムを作り、そこから、Visioのダイアログに対して、たとえ
ば、ALT+E と、SendKeyコマンドを発行することが、必要になる
のではないかと、思います。スマートな解決方法とは、とても
言えませんが。

04: 名前:yuko投稿日:2007/12/27(木) 09:44
yodaさんありがとうございます。
試してみましたところ、そのまま印刷が実行されてしまいました。
印刷ダイアログを表示したまま、"現在のページ"ボタンが選択された
状態にはならないようです。もう少し調べてみます。

05: 名前:M1号投稿日:2007/12/27(木) 17:44
Application.ActiveDocument.PrintOut visPrintFromTo, Application.ActivePage.Index, Application.ActivePage.Index

こんなんでどうでしょう?

06: 名前:yoda投稿日:2007/12/27(木) 17:47
PrintOut の場合は、そのまま印刷になると思います。
説明不足で申し訳ありませんでした。
03の説明で、"現在のページ"ボタンが選択された
状態にする案を述べたつもりでしたが、これも、
説明不足だったようですね。すみませんでした。

07: 名前:M1号投稿日:2007/12/27(木) 20:12
私の勘違いですね(^_^;)

印刷ダイアログを表示した状態で、
且つ
"現在のページ"ボタンが選択された状況を作るわけですね。

印刷ダイアログを表示した時のデフォルトが"現在のページ"であれば良いのでしょうか?

08: 名前:M1号投稿日:2007/12/27(木) 23:04
DoCmdでダイアログを出してから、SendKeysでは同期ズレが起こりやすいので、
いっそのこと全部SendKeysのほうがいいと思います。

SendKeys ("%FP+{TAB}{DOWN}")

※上記はVBA環境からでは動きません。
必ずVISIOのメインメニューから「ツール-マクロ-〜」で動かしてください。

趣味の範囲ならこれでも十分ですがSendKeys は確実性に乏しいので、
業務として使われるならSendMessageやPostMessageを使われたほうがいいでしょう。

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



2: シェイプのテキストだけを最前面へ  全レス

01: 名前:moto投稿日:2007/12/16(日) 23:59
いつも参考にさせていただいています。
テキストを埋め込んだシェイプの上に別のシェイプを作成した場合で、
下になっているシェイプのテキストのみ最前面に表示することは
可能なのでしょうか?
アドバイスお願いします。

02: 名前:yoda投稿日:2007/12/17(月) 06:12
それは、できないと思いますが、テキストだけを書いておけばよいのでは?

03: 名前:moto投稿日:2007/12/17(月) 09:41
アドバイスありがとうございます。
当方、図面(シェイプ)をデータベースで管理するプログラムを
組んでいるのですが、シンプルな図面にしたいのと、visioに関する
知識が浅いので、あまり複雑な処理に踏み込めないでいます。
yodaさんのアドバイスをふまえて、もっとvisioを勉強してみます。

04: 名前:名無しさん投稿日:2007/12/17(月) 11:05
簡単なのは、
塗りつぶしをしない。
もしくは上になるシェイプの塗りつぶしに透明度を設定。
といったところでしょうか。

05: 名前:moto投稿日:2007/12/17(月) 13:48
名無しさんありがとうございます。
上下どちらのシェイプも仕様上塗りつぶしが必須なんです・・
透明化も考えたのですが、印刷時に色が薄くなってしまい視認性が
良くないと指摘をうけ、却下されました。
Geometryセクションを挿入して図形を描画してみたんですが
塗りつぶしが同一色しか使えない事に気付き(当たり前ですが)
あえなく玉砕です。
やはりテキスト用のシェイプを別に用意して最前面に描画させるのが
確実ではないかと考えています。シェイプ数が倍増してしまうのは
痛いのですが・・

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



3: マスタシェイプ  全レス

01: 名前:ほし投稿日:2002/07/18(木) 10:43
はじめまして。

VISIOでかかれた線や円の座標を取得することは出来たのですが
マスタシェイプを使って書かれたものの図形情報・図形座標は
どのように得ることができるのでしょう?

02: 名前:oki投稿日:2002/07/18(木) 20:17
同じやり方で出来ます。
たぶん、マスターからドラッグしてくるとグループ化されているので戸惑って
おられるのではないでしょうか?
もし、そうであればこちらをご参照ください。

http://www.mster.co.jp/visiosquare/cgi-bin/visbbs/mibbs.cgi?mo=p&fo=zukei&tn=0102 [source] [check]

03: 名前:ほし投稿日:2002/07/19(金) 11:45
ありがとうございます。
が、初心者な者でうまく理解できません。
以下はリンク先の文章ですが…

-----------------------------------------
グループ化してもVBAから操作可能です。
例)
shpObj→親のシェイプ
subshpObj→子のシェイプ
Set subshpObj=shpObj.Shapes(1)
----------------------------------------

親のシェイプ・子のシェイプの認識が出来ないのですが、
こちらでは
親のシェイプー>オブジェクトタイプがグループのオブジェクト
         (座標数が0となっているものです)
子のシェイプー>?::どのようにしゅとくしていいのか分からないです。

上記を参考に、プログラムしてますがうまくいきません。
C++ですが以下に貼り付けます。

shpObj shape
shpsObj shapes

shape.Type(&Type);
if Type== Groupe
shape.Shapes(shapes);
という感じにしてみました。

04: 名前:oki投稿日:2002/07/19(金) 13:34
すいません、C++は無知ですが、
shape.Shapes(ID または シェイプ名);
になるんではないかと思います。
例えば、3つのシェイプで構成されているグループでは、IDは1〜3になります。
シェイプ名がわかっているのであれば、シェイプ名を直接指定しても取得できる筈です。

05: 名前:ほし投稿日:2002/07/19(金) 16:08
そうですか・・・
問題のデータはマスタシェイプをドラッグしています。
このためApp->Doc->Page->shapeのオブジェクトの種類は
”グループ”となっています。
このshapeに対してGeometryCountとかで図形の数を取っているんですが
これが0又はマイナス値になってしまいます。
App->Doc->master->shapeでも同様の結果です。
以上のような原因からグループ内の図形の座標を取得できないのかな
とおもったんですが・・・・
VBAとVC++では異なっているのでしょう・・・。

もう少し試してみます。
早いお返事ありがとうございます。

06: 名前:なか投稿日:2002/07/19(金) 17:44
C++でグループの子シェープを取得するには、
shapesコレクションを取得してからでないと出来ません。
以下に記述例を付加します。
試して見て下さい。

CVisioShapes shapes;
shape.Shapes(shapes);
long count;
shapes.Count(&count);
for (i=1; i<=count; i++)
{
shapes.Item(i, shape);
// 実際の操作

}

07: 名前:ほし投稿日:2002/07/22(月) 09:21
書き方が悪かったようですね。
Pages->Page->Shapes->Shapeです

Shapesのカウンタを取るとこまでは一緒ですがその後が異なっていました。
shapes.ItemFromID( i,shape)
としていました。

週末で問題も解決し、グループの子シェイプも取れるようになりました。

ご意見・アドバイスありがとうございました。

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



4: Visioをバックグラウンドで立ち上げる方法  全レス

01: 名前:mar投稿日:2007/12/04(火) 21:32
VBからVisioを立ち上げる場合 バックグラウンドで立ち上げる方法はないのでしょうか?
Dim vis As New Visio.Application
を実行するとVisioの画面が立ち上がってしまいます。

02: 名前:yoda投稿日:2007/12/05(水) 06:01
Applicationのかわりに、InvisibleApplicationとすれば、よいでしょう。
または、Application.Visible=Falseとも、比較してみるとよいかも知れ
ません。

03: 名前:yoda投稿日:2007/12/05(水) 09:25
InvisibleApp でした。
この時間、MSの英文の掲示板に、全く同じ質問が出ています。
同一人物かな?
http://msdn.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.visio.developer&lang=en&cr=US [source] [check]

04: 名前:mar投稿日:2007/12/05(水) 09:43
yodaさんいつもありがとうございます。
InvisibleApp でうまくいきました。
今配布しているアプリケーションでは
Visible = False
としていましたが これと比べるとスピードも大分速くなりました。
あと

05: 名前:mar投稿日:2007/12/05(水) 09:48
ちなみに 英語での書き込みは私には不可能です。

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



5: リストの更新と参照  全レス

01: 名前:Kott投稿日:2007/11/22(木) 19:54
Visio VBAであるリスト(配列)を保持しておき,
その値を更新,参照することができますか?

AccessやExcelではもちろんできるようなのですが,
Visioについての資料が少なく困っています.

どなたかご存知の方,よろしくお願いします.

02: 名前:yoda投稿日:2007/11/22(木) 20:49
Visioの図形のシェイプシートには、ユーザーが定義できるセルがありますから、
そこに、データを記入して、図面を保存すればよいと思います。
なお、Visio2007では、AccessやExcelのテーブルを、外部データとして
結合する機能ができました(図形をデータにリンク)ので、それを使う
方法もあると思います。

03: 名前:yoda投稿日:2007/11/23(金) 06:31
わすれていましたが、図形データがあります。
これは画面、プログラム双方からアクセスできます。

04: 名前:visGeek投稿日:2007/11/23(金) 08:11
配列は特定のアプリケーションのオブジェクトモデルに
含まれる機能ではなく、VBAのコアに含まれる機能ですので、
どのアプリケーションのVBAでも使用できます。

05: 名前:Kott投稿日:2007/11/25(日) 15:46
yoda様,visGeek様 ありがとうございます.

色々試してみましたが,
とりあえずシートのセルにデータを置く方法を使おうと思いました.

しかし,以下のようにシェイプのセルにはアクセスできましたが,シートのセルにアクセスできません.
どうすればよいのかご存知でしょうか? お願いします.

Set vsoCell = vsoshp.Cells("Prop.Row_1.Value")

06: 名前:yoda投稿日:2007/11/25(日) 16:13
Visioではシートというと、シェイプシートのことかと思ってしまいます。
ページのシェイプシートのセルには、
Set vsoCell = vsoPage.PageSheet.Cells("Prop.Row_1.Value")
でアクセスできると思います。

07: 名前:Kott投稿日:2007/11/26(月) 21:50
yoda様,visGeek様

どうにか形にすることができました.

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

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



6: マクロのキャンセル  全レス

01: 名前:AD投稿日:2007/11/21(水) 19:46
あるマクロの実行時に新規シェイプが追加されるのですが,
その時に別の新規シェイプ追加時に起動するマクロが実行されてしまいます.
その追加時マクロをキャンセルするようなことはできるのでしょうか?
ヘルプを見ましたがよくわかりませんでした.

どなたかご存知の方,ご教授お願いします.

02: 名前:visGeek投稿日:2007/11/21(水) 20:55
「あるマクロ」でフラグを立てておき、もう一つのマクロでは
そのフラグが立っていたらno-opにするのが簡単だと思います。

03: 名前:AD投稿日:2007/11/21(水) 21:45
早速のご回答ありがとうございます.

ですが,初心者なもので,ヘルプを見ましたが,
これというものが見つからず,
どの関数を使えばよいのかわかりません・・・.

no-operation状態にするには具体的にどうすればよいのでしょうか?

04: 名前:visGeek投稿日:2007/11/22(木) 07:19
そこから先はVisioは関係なく、プログラミングの問題です。
言語はなんですか?
VBAならイベントハンドラの頭でフラグを判定し、Exit Subしましょう。

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



7: ActiveX コントロールを図面に追加する方法  全レス

01: 名前:Mamy投稿日:2007/11/14(水) 13:52
OCX ファイルを Visio の VBA を使用して図面に追加する
処理を行いたいと思っています。Word や Excel などでは
AddOLEObject メソッドを使用できますが、Visio では使用
できないようです。どなたか方法をご存知ではないでしょうか。

02: 名前:yoda投稿日:2007/11/14(水) 14:23
OCXが挿入できるかどうかは分かりませんが、
InsertObject メソッドがあります。
またファイル名で挿入するには、Importメソッドがあります。
繰り返すようですが、OCXについては、分かりません。

03: 名前:Mamy投稿日:2007/11/14(水) 14:48
ご返信ありがとうございます。

早速 InsertObject メソッドを確認してみましたところ
OCX の挿入はできそうです!

本当にありがとうございました。

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



8: テンプレートを開いた後名前を変更したい  全レス

01: 名前:ベジータ投稿日:2007/11/05(月) 18:38
ベジータです。

NewDrawing()メソッドで開いたテンプレートファイルは「図面?」となりますが、
この名前をファイル保存せずに変更することは可能でしょうか?
可能であればその方法を教えてください。
Document.Nameプロパティは読み取り専用でした。

02: 名前:yoda投稿日:2007/11/05(月) 19:47
私の知る範囲では、保存するしかないのではないかと思います。

03: 名前:visGeek投稿日:2007/11/05(月) 20:16
おそらく無理でしょう。

ただ、ウィンドウのキャプションを変えたいだけであれば
Win32APIのSetWindowTextで何とかなると思います。

04: 名前:ベジータ投稿日:2007/11/06(火) 19:37
ベジータです。

無理を承知の投稿にもかかわらず、解答のほう、ありがとうございました。

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



9: 単位の変換について  全レス

01: 名前:ゆう投稿日:2007/11/02(金) 11:14
VisioでExcelのConvert関数のような、
単位の変換を行う関数、機能というのは存在しないのでしょうか。

ヘルプを探したのですが、見つからなかったので質問させてください。

02: 名前:yoda投稿日:2007/11/02(金) 12:35
Visiioのメニューにはありませんが、VBAのマクロでは、
値を、いろいろな単位で表示できるResultプロパティがあります。
これを使うと、単位換算のシェイプなどを作ることも、可能です。

03: 名前:visGeek投稿日:2007/11/02(金) 14:05
VBAからならApplicationオブジェクトのConvertResultメソッドを、
シェイプシートからならFORMATEX関数を使用して変換できます。

04: 名前:&#130;ゆう投稿日:2007/11/06(火) 11:49
了解しました。ありがとうございます。
Visioでサポートしている面積や長さについては、活用させていただきます!!

熱量の変換などもほしかったので、それらについては自作することとします。

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



10: Drawing Control のエラー  全レス

01: 名前:mar投稿日:2007/10/31(水) 11:51
Drawing Control を使ってvbフォーム上に Visioの図面を表示しています。
表示はうまく行くのですが、Formを閉じようとすると
"OS ローダー ロック内でマネージ実行を試行しました。"
のエラーが発生してしまいます。

コードは
visView.src="c:\図面1.vsd"
のみで発生します。

Visio2003+vb2005 の環境です。
やはり ComのActiveXをNet上で使うことに無理があるのでしょうか?

03: 名前:mar投稿日:2007/11/01(木) 10:59
visGeekさん 返信ありがとうございます。
公開する手段を持っていません。
メールで送らせていただいてもよろしいでしょうか?

お手数おかけしますが 宜しくお願いします。

04: 名前:yoda投稿日:2007/11/01(木) 11:15
そのために、UPLOADBBSがありますよ。
http://www.mster.co.jp/visiosquare/cgi-bin/cbbs/cbbs.cgi [source] [check]

05: 名前:mar投稿日:2007/11/01(木) 13:02
UPLOADBBS 159 に登録しました。
宜しくお願いします。

06: 名前:yoda投稿日:2007/11/01(木) 14:22
普通は、以下のようにします。
AxDrawingControl1.Src = My.Application.Info.DirectoryPath + "\図面2.vsd"
ご提供いただいたファイルを、開いてみたのですが、フォルダー構成が
違うためかどうか、わかりませんが、フォームデザイナを開くことは
できませんで、Drawing Controlが、どのようになっているのか、
分かりませんでした。
コードは開くことができました。どういうわけかわかりませんが、
AxDrawingControl1が、候補のリストにないですね。

普通は、axdと置いて、Cntl + Blank で、 AxDrawingControl1
が、出てくるのですが。

07: 名前:yoda投稿日:2007/11/01(木) 14:29
visViewってなんでしょうね。Visioのヘルプにも、見つかりませんが。

08: 名前:mar投稿日:2007/11/01(木) 16:17
yodaさん いつもお世話になってます。
visViewはAxDrawingControlに付けた名前です。

09: 名前:mar投稿日:2007/11/01(木) 16:21
こちらの環境では 図面2.vss に関係なく FormにAxDrawingControlを貼り付けて実行し、フォームを閉じるとエラーが発生します。

10: 名前:visGeek投稿日:2007/11/01(木) 17:05
確かに再現しました。

デバッガの設定の問題ですね。
以前私のblogで取り上げたことがありますので、参照してください。
http://visio.seesaa.net/article/17429990.html [source] [check]

11: 名前:mar投稿日:2007/11/01(木) 18:08
visGeekさん ありがとうございます。
「Visual Studioホスティングプロセスを有効にする」をオフにすることで、エラーは発生しなくなりました。
意味もわからず チェックを入れてしまっていたのかもしれません。

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


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


2chTypeBBS Ver.2.1 build 2 改造版  -- Ahhan ! BBS Ver 2.53 --