KoMaDo   VISIO SQUARE : VB/VBA  ■ Headline ■ HOME    

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

191 :VB6.0での更新の仕方について(02)  192 :CreatObject関数を使い方(02)  193 :VBへの値の受け渡し(03)  194 :Access のデータアクセスページでのDrawing Controlのイベント(05)  195 :excelデータより組織図を作成したい(05)  196 :回転グループ図形の幅、高さ取得(13)  197 :スタートアップ(StartUp)フォルダについて(07)  198 :INIファイルに記述した内容を取得(02)  199 :シェイプのドロップイベントをキャンセルする方法 (05)  200 :テキストの選択状態(33)  201 :座標取得(03)  202 :VisioとVSの連携(05)  203 :Visio2000の起動時ウィンドウ(04)  204 :「ファイルが見つかりません」というメッセージが出て来る(11)  205 :VBAで組織図を作成(01)  206 :図形ウインドウのVisible プロパティ(03)  207 :DoCmd関数がエラーになる例(01)  208 :DrawingControlから呼んだアドオンでのドキュメント名称の取り方(05)  209 :グループ化図形の色変更(02)  210 :図形を選択不可にする方法(03)  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) 
ログ検索  リロード  前のページ  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 次のページ  総てのスレッド  スレッド総数 696191 - 200 を表示


191: VB6.0での更新の仕方について  全レス

01: 名前:カフェ・オレ投稿日:2005/10/03(月) 15:23
今、AccessのデータベースにあるデータをSQLを使って更新させたいと思っています。
現在作っているのは、基本的なもので、データベースのデータをレコードセットに保持して
テキストボックスに表示させるものです。そこに表示されたデータを更新ボタンにより
更新するプログラムを作りたいのでが、SQLの使いたいのですが、どうもうまくいきません。
どなたかアドバイスをお願いします。

02: 名前:yoda投稿日:2005/10/10(月) 07:45
Accessのことは、Accessに関する掲示板がたくさんありますし、
そちらで質問したほうが、ずっといいですよ。

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



192: CreatObject関数を使い方  全レス

01: 名前:めしめし投稿日:2005/10/03(月) 09:43
xp環境で、VB6のCreatObject関数でexcel2000を開こうと思っているのですが
CreatObject関数でコンパイラエラーで、sub,Functionが定義されていないというエラーで落ちてしまいます
この現象について対処方法を教えていただけないでしょうか

02: 名前:yoda投稿日:2005/10/10(月) 07:24
どういう場合に、そのエラーメッセージが出るのか、
覚えていませんが、Excelのオブジェクトライブラリを参照設定し、
Dim app As Excel.Application
Set app = CreateObject("excel.application")
app.Visible = True
.............................
.............................
とすれば、動くことは動きます。

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



193: VBへの値の受け渡し  全レス

01: 名前:ゆうき投稿日:2005/09/30(金) 15:11
 わたしは、VBAで作業内容をログにして保存するという内容のマクロを作りました。
現在、VBで、そのログの内容を使ってアプリケーションを作ろうとしております。

 そこで、例えばVBAで a=10 となった変数aの内容を VBで取得して "答えは10です"といった
かんじで表示するにはどうすればよいのでしょうか?
 VBからマクロを実行するというわけではなく、VBAでの処理の結果をVBが受け取るというようにしたいのですが、
なかなか方法が思いつきません。
 もし、やり方がわかりそうな方がいらっしゃったらご返答をお待ちしております。

 VB:Visual Basic 6.0
VISIO:VISIO2002

よろしくお願いします。

02: 名前:yoda投稿日:2005/09/30(金) 21:48
VBAとVBAの間では、直接、変数を受け渡しすることは、
できないと、思います。中間のファイルに変数の値を書き、
それを、受け渡しするしか、ないと思います。中間のファイルは
テキストファイルでも、Visio図面でも、また、EXCELシートでも、
かまわないと、思います。

03: 名前:ゆうき投稿日:2005/10/01(土) 22:54
ありがとうございます。テキストファイルでの受け渡しで行いたいと思います。

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



194: Access のデータアクセスページでのDrawing Controlのイベント  全レス

01: 名前:yoda投稿日:2005/07/05(火) 22:06
AccessのデータアクセスページにDrawing Controlを貼り付けると、
Web上にDrawing Controlを表示できます。デザインモードで、スクリプト
エディタを開くと、VBScriptで、Visipのイベントプロシージャを作成できます。
しかし、私には、正しい使い方が分かりません。
たとえば、こんなスクリプトを入れてみましたが、イベントを検出しません。
何か、ヒントをお願いします。
<script language=vbscript for=ActiveXコントロール1 event=StyleAdded>
<!--
msgbox "shape added"
-->
</script>

02: 名前:yoda投稿日:2005/07/06(水) 11:52
すみません、
<script language=vbscript for=ActiveXコントロール1 event=ShapeAdded>
<!--
msgbox "shape added"
-->
の間違いでした。なにか分かりましたら、お願いします。

</script>

03: 名前:yoda投稿日:2005/09/21(水) 21:23
MSDNのフォーラムで、また、この問題が話題になりました。
しかし、なんと、質問者のほうが、正解を見つけてしまいました。
なんとVBScriptで、イベントを処理できるのです!!
それは本当に簡単で、以下のようにすればよいのです。
まだ、最初の1例しかないのですが、
<SCRIPT language=VBScript>
Sub VisOcxDrawingControl_ShapeAdded(ByVal Shape)
msgbox("Shape added")
End Sub
</SCRIPT>
と、これでちゃんと動くのです。
ただし、Drawing Control オブジェクトの名称を上のスクリプトに
合わせて変更する必要があります。
変更箇所は、<Object のところを、
<OBJECT id=VisOcxDrawingControl title="" とすること、および、
ClassID=の次にあたりにある日本語名を以下のように変更します。
classid=CLSID:E4615FA3-23B0-4976-BD3E-D611DDBE330E
VisOcxDrawingControl VIEWASTEXT>
これは、もしかしたら、大きなブレークスルーです。

04: 名前:yoda投稿日:2005/09/23(金) 10:01
Accessを使っても、もちろんできますが、単純に、HTMLファイルに、
Drawing Control を挿入し、VBScript で、動かすサンプルを、作って
見ました。Visioの図面を開くには、「参照」ボタンを押して、図面を
探し、「開く」ボタンを押します。図面を保存するには、「名前を付け
て保存」ボタンを押して、保存場所と、名前を決めます。
以下は、自然に、そうなるのですが、
Visioの図面エリアをクリックすると、周囲に、Visioのツールバーが
出ます。同時に、一番上のメニューはVisioのメニューに切り替わり
ます。図面の上で、右ボタンをおすと、Visioのポップアップメニュー
が出ます。
ダウンロードはここからどうぞ。
http://101.110.129.110/visiosquare/cgi-bin/upload/image/146.zip [source] [check]

05: 名前:yoda投稿日:2005/09/23(金) 21:22
「Web上のDrawing Control を VBScript で動かす、サンプル」
の改訂版をアップしました。
訂正箇所は、「印刷」の追加、と、シェイプを消したときの、イベント
が動かなかったのを直しました。
ダウンロードはこちらからどうぞ。
http://101.110.129.110/visiosquare/cgi-bin/upload/image/147.zip [source] [check]

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



195: excelデータより組織図を作成したい  全レス

01: 名前:yuki投稿日:2005/09/21(水) 09:21
題名の通りなのですが、EXCELのデータより、組織図を作成したいと思っています。
EXCELの情報は、部署名・氏名があります。
VISIOの方は、ごく一般的な組織図です。
どのようにすれば、良いのか、お知恵を拝借したいと願っています。
宜しくお願いします。

02: 名前:yoda投稿日:2005/09/21(水) 12:12
VBAでプログラムを作れば、可能かとは、思いますが、かなり大変です。
Visioに添付の標準の「組織図」には、「組織図ウイザード」があります。
それで、試してみて、思うようなものではないと分かったら、今度は、
本格的に、プログラムを作ることを検討するのも、良いかもしれません。
「組織図ウイザード」は、「組織図」テンプレートを開始しておいて、
メニュー/ツール/組織図/組織図ウイザード/です。
ただし、私は、ウイザードが苦手で、使い方は、よくわかりません。
ウイザードを使いこなすには、かなりの忍耐力が必要です。

03: 名前:yuki投稿日:2005/09/21(水) 14:46
回答ありがとうございます。
そうですか。少し研究する必要がありそうですね。
私もウィザードを使うのが初めてなので、何か分かる本または、ネット等で
説明されているところって、ご存知でしょうか?

04: 名前:yoda投稿日:2005/09/21(水) 15:04
わかりません。

05: 名前:yuki投稿日:2005/09/21(水) 17:10
そうですか。
分かりました。
他の方で、誰かご存知の方がいらっしゃいましたら、宜しくお願いします。
また、別の方法があれば、ご教授宜しくお願いします。

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



196: 回転グループ図形の幅、高さ取得  全レス

01: 名前:こしら投稿日:2005/08/26(金) 21:19
グループになった図形を回転させて、正味の幅と高さを
取得しようとしています。
WinObj.Selection.BoundingBox visBBoxExtents , DDLeft, DDBottom, DDRight, DDTop
などとして回転後に図形を囲む四角の座標を取得しますが、
図形そのものに接するサイズを返してくれません。
このメソッド以外に回転後の図形に接する四角のサイズを取得する
方法はないものでしょうか。
よろしくお願い致します。

05: 名前:yoda投稿日:2005/08/27(土) 16:56
ひねってやってみましたが、グループの中の子シェイプのBoundingBox
は、グループが回転する前の物しかできない。
ということは、いったんグループを解除して、個々の子シェイプについて、
BoundingBoxを求め、その後グループを修復するしかなさそうです。

06: 名前:yoda投稿日:2005/08/27(土) 21:22
こんな風になりますが、なんか、もっと楽な方法があるような気がします。
Dim shp As Visio.Shape
Dim child As Visio.Shape
Dim dblTop As Double
Dim dblBottom As Double
Dim dblLeft As Double
Dim dblRight As Double
Dim rect As Visio.Shape
Dim dblPinX As Double, dblPinY As Double
Dim dblChildPinX As Double, dblChildPinY As Double
Dim dblWidth As Double, dblHeight As Double
Dim dblAngle As Double
Dim myShapes As Collection
Dim mySelection As Visio.Selection

Set myShapes = New Collection
Set shp = ActivePage.Shapes(1)

dblPinX = shp.Cells("PinX")
dblPinY = shp.Cells("PinY")
dblAngle = shp.Cells("Angle").Result(visRadians)

For Each child In shp.Shapes
myShapes.Add child
Next
shp.Ungroup

For Each child In myShapes
child.BoundingBox visTypeShape + visBBoxUprightWH, _
dblLeft, dblBottom, dblRight, dblTop
dblChildPinX = child.Cells("PinX")
dblChildPinY = child.Cells("PinY")
dblWidth = dblRight - dblLeft
dblHeight = dblTop - dblBottom

Set rect = ActivePage.DrawRectangle( _
dblChildPinX - dblWidth * 0.5, dblChildPinY - dblHeight * 0.5 _
, dblChildPinX + dblWidth * 0.5, dblChildPinY + dblHeight * 0.5)
ActiveWindow.Select rect, visSelect
ActiveWindow.Selection.SendToBack
Next

Set mySelection = ActiveWindow.Selection
mySelection.DeselectAll
For Each child In myShapes
mySelection.Select child, visSelect
Next
mySelection.Rotate dblAngle * -1#, visRadians, , visRotateSelectionWithPin, dblPinX, dblPinY
Set shp = mySelection.Group
shp.Cells("Angle").Result(visRadians) = dblAngle

07: 名前:yoda投稿日:2005/08/27(土) 22:09
最終的には、これら囲んだ四角形全体のBoundingBoxを作れば、よさそう。

08: 名前:yoda投稿日:2005/08/27(土) 22:12
それを追加すると、このようになりますが、、、、
Dim shp As Visio.Shape
Dim child As Visio.Shape

Dim dblTop As Double
Dim dblBottom As Double
Dim dblLeft As Double
Dim dblRight As Double

Dim rect As Visio.Shape
Dim dblPinX As Double, dblPinY As Double
Dim dblChildPinX As Double, dblChildPinY As Double
Dim dblWidth As Double, dblHeight As Double
Dim dblAngle As Double
Dim myShapes As Collection
Dim mySelection As Visio.Selection
Dim myRects As Collection

Set myShapes = New Collection
Set myRects = New Collection
Set shp = ActivePage.Shapes(1)



dblPinX = shp.Cells("PinX")
dblPinY = shp.Cells("PinY")
dblAngle = shp.Cells("Angle").Result(visRadians)

For Each child In shp.Shapes
myShapes.Add child
Next
shp.Ungroup

For Each child In myShapes
child.BoundingBox visTypeShape + visBBoxUprightWH, _
dblLeft, dblBottom, dblRight, dblTop
dblChildPinX = child.Cells("PinX")
dblChildPinY = child.Cells("PinY")
dblWidth = dblRight - dblLeft
dblHeight = dblTop - dblBottom

Set rect = ActivePage.DrawRectangle( _
dblChildPinX - dblWidth * 0.5, dblChildPinY - dblHeight * 0.5 _
, dblChildPinX + dblWidth * 0.5, dblChildPinY + dblHeight * 0.5)
ActiveWindow.Select rect, visSelect
ActiveWindow.Selection.SendToBack
myRects.Add rect
Next

ActiveWindow.DeselectAll
For Each rect In myRects
ActiveWindow.Select rect, visSelect
Next
ActiveWindow.Selection.BoundingBox visTypeShape + visBBoxUprightWH, _
dblLeft, dblBottom, dblRight, dblTop
ActivePage.DrawRectangle dblLeft, dblBottom, dblRight, dblTop

Set mySelection = ActiveWindow.Selection
mySelection.DeselectAll
For Each child In myShapes
mySelection.Select child, visSelect
Next
mySelection.Rotate dblAngle * -1#, visRadians, , visRotateSelectionWithPin, dblPinX, dblPinY
Set shp = mySelection.Group
shp.Cells("Angle").Result(visRadians) = dblAngle

09: 名前:yoda投稿日:2005/08/28(日) 08:47
ということは、いちいち子シェイプを四角で囲む必要はないわけで、
上のコードは、もっと省略できます。
Dim shp As Visio.Shape
Dim child As Visio.Shape
Dim dblTop As Double
Dim dblBottom As Double
Dim dblLeft As Double
Dim dblRight As Double
Dim dblPinX As Double, dblPinY As Double
Dim dblAngle As Double
Dim myShapes As Collection
Dim mySelection As Visio.Selection

Set myShapes = New Collection
Set shp = ActivePage.Shapes(1)

dblPinX = shp.Cells("PinX")
dblPinY = shp.Cells("PinY")
dblAngle = shp.Cells("Angle").Result(visRadians)

For Each child In shp.Shapes
myShapes.Add child
Next
shp.Ungroup
ActiveWindow.DeselectAll
For Each child In myShapes
ActiveWindow.Select child, visSelect
Next

ActiveWindow.Selection.BoundingBox visTypeShape + visBBoxUprightWH, _
dblLeft, dblBottom, dblRight, dblTop

ActivePage.DrawRectangle dblLeft, dblBottom, dblRight, dblTop

Set mySelection = ActiveWindow.Selection
mySelection.DeselectAll
For Each child In myShapes
mySelection.Select child, visSelect
Next
mySelection.Rotate dblAngle * -1#, visRadians, , visRotateSelectionWithPin, dblPinX, dblPinY
Set shp = mySelection.Group
shp.Cells("Angle").Result(visRadians) = dblAngle

10: 名前:yoda投稿日:2005/08/28(日) 08:56
グループを、解除するのが、よくない場合は、グループ内の子シェイプを、
同じ位置にコピーペーストして、四角で囲むことも、考えられます。
しかし、やってみるとわかりますが、子シェイプを同じ位置に同じ向きで、
ページにコピーすることは、そんなに簡単ではなく、座標変換も必要に
なりそうで、かえって手間が、かかりそうな感じです。グループを解除
するほうが、ややこしい座標変換をしなくて済むので、わかりやすいと
思います。

11: 名前:yoda投稿日:2005/09/02(金) 10:20
今、思いついたのですが、グループそのものを、同じ位置にコピーする
のは、比較的簡単です。グループのコピーを作りそのコピーのグループ
を解除し、解除された子シェイプ全体を四角で囲みます。
解除した子シェイプは、消してしまいます。
こうすれば、もとのグループを解除しないで済みます。
こういう風にすると、マクロは更に簡単になります。
Dim shp As Visio.Shape
Dim shpCopy As Visio.Shape
Dim dblTop As Double
Dim dblBottom As Double
Dim dblLeft As Double
Dim dblRight As Double
Dim dblPinX As Double, dblPinY As Double
Dim mySelection As Visio.Selection

If ActiveWindow.Selection.Count = 1 Then
Set shp = ActiveWindow.Selection(1)
If shp.Type <> visTypeGroup Then
MsgBox "グループ図形をひとつだけ選択してください。"
Exit Sub
End If
Else
MsgBox "グループ図形をひとつだけ選択してください。"
Exit Sub
End If

dblPinX = shp.Cells("PinX")
dblPinY = shp.Cells("PinY")

ActiveWindow.Select shp, visDeselect + visSelect
Set shpCopy = ActivePage.Drop(shp, dblPinX, dblPinY)
shpCopy.Ungroup

Set mySelection = ActiveWindow.Selection
mySelection.BoundingBox visTypeShape + visBBoxUprightWH, _
dblLeft, dblBottom, dblRight, dblTop

ActivePage.DrawRectangle dblLeft, dblBottom, dblRight, dblTop

mySelection.Delete
ActiveWindow.Selection.SendToBack

12: 名前:こしら投稿日:2005/09/09(金) 15:57
遅くなりました。
質問を投稿したこしらです。
yoda様、色々な方法を提示頂きまして、ありがとうございます!
非常に参考になります。

自分でやっていて、コード中に疑問が生じましたので、
書きたいと思います。 BoundingBox の引数のことです。
引数として対象シェイプのタイプを指定する必要が
あるのでしょうか? 教えて頂いたVBのコード中に

>....BoundingBox visTypeShape + visBBoxUprightWH ....

というのがあるのですが、
マニュアルなどの説明では別項目の表になっていたので
引数には visTypeShape などは指定できないのでは
ないのでしょうか。
色々と試行錯誤した結果沸いた疑問です。
よろしくお願い致します。

13: 名前:yoda投稿日:2005/09/09(金) 20:20
まことにお恥ずかしい話ですが、私には、Helpに書いてある定数の
意味がよくわかりませんでした。そこで、片っ端から定数を入れて
試して見まして、うまくいったのは、それだけといった按配でした。
ほかにもっといいのがあるのかも知れませんが、うまく動いたと、
思ったところで、力つきました。

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



197: スタートアップ(StartUp)フォルダについて  全レス

01: 名前:niko投稿日:2005/09/05(月) 09:37
スタートアップフォルダにmymacro.vsdという名称のファイルを格納しましたが
visio起動時に自動的に開かれません。
原因をご存知の方がいましたら教えてください。

環境:windows Me + visio2000
設定:ツール→オプション→ファイルパスの設定で、
    スタートアップ:C:\Program Files\Visio\Startup\
    (デフォルトでは"StartUp"のみの文字列が指定されていましたが
     開かれないのでフルパスにしてみたのですが同様に開けません)

宜しくお願いします。

02: 名前:名無しさん投稿日:2005/09/05(月) 11:54
Visioの起動時に開かれるのは、マクロとアドオンです。
なので、図面は自動的には開かれません。

03: 名前:niko投稿日:2005/09/06(火) 11:53
お返事ありがとうございます。

やりたいことは、自作のマクロを、全てのvisioファイルの編集時に使いたいということです。

つまり、
wordであれば、自作のマクロはnormal.dotに保存し、
excelであれば、personal.xlsに保存することにより、
全てのwordなりexcelなりのファイルから自作マクロを使えると思います。
これと同様のことをvisioではどのようにすればよいのでしょうか?

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

04: 名前:yoda投稿日:2005/09/06(火) 12:42
VBでアドオンを作っておくという方法もあると思いますが、
もっと簡単には、ステンシルにマクロを組み込んで置く
方法もあります。ステンシルは、図面と独立ですから、
どの図面にでも使えます。私はもっぱらこの方法を愛用
しています。

05: 名前:yoda投稿日:2005/09/06(火) 16:30
後出しになりましたが、アドオンの自動起動は、以下のようにするとできます。
@VisioアプリのフォルダにStartUpというフォルダを作り、そこにアドオンを入れます。
AVisioのオプションで”スタートアップ”にそのフォルダを登録します。参照ボタンを使うとよいでしょう。
BVisioを再起動します。
マクロは、どうすれば自動起動できるのかわかりません。図面が開かれなければ、マクロは動かないのではないかと思うので、、、

06: 名前:niko投稿日:2005/09/07(水) 11:23
ご返答ありがとうございます。

アドオン作成は、VBまたはVCが必要だと思いますが、これは持っていないので諦めます。
ステンシルに自作マクロを組み込み、どの図面からも使う方法は成功しました。
しかしやはり、ステンシルを自動起動はできないようですから
自作マクロの自動起動手段はどうやらなさそうですね。

ご返答くださった皆様ありがとうございました。

07: 名前:yoda投稿日:2005/09/07(水) 11:42
もう質問者もいないし、望みの回答でもないと思いますが、
適切なマクロを持った図面のアイコンをダブルクリックすれば、
Visioが起動し、その図面が開き、マクロが動きます。
適切なマクロとは、たとえば、"ThisDocument"モジュールに、以下の
ようなマクロを書きます。
Private Sub Document_DocumentOpened(ByVal doc As IVDocument)
MsgBox "TEST"
End Sub

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



198: INIファイルに記述した内容を取得  全レス

01: 名前:ノッチ投稿日:2005/09/06(火) 11:00
使用ソフト:VISIO2003、ACCESS2002
OS:xp
VISIOからACCESSのテーブルを取得する上で、
ACCESSのパスを取得しようとしています。
VISIOの方で記述(VBA)で固定(絶対パス)は出来たのですが、
パスを固定で記述せず、
INIファイルの内容にパスを記述し、VISIO(VBA)で読み込み
したいのです。
分かる方、よろしくお願いします。

02: 名前:yoda投稿日:2005/09/06(火) 13:15
INIファイルのパスがわかっていれば、VBAのOpenTextFile メソッド
を使う方法があるかもしれません。詳しくはHELP参照。

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



199: シェイプのドロップイベントをキャンセルする方法  全レス

01: 名前:あひゃ投稿日:2005/09/01(木) 15:34
いつも大変お世話になっておりますm(_ _)m

C#でVisioのアドインを作成しています。
シェイプのドロップイベントをイベントハンドラで受け取り、
その中でドロップイベントそのものをキャンセルするといったことは
可能でしょうか?
ドロップ後のイベントだとキャンセルなんて出来ないでしょうか。
BeforeShapeDropみたいなイベントだとキャンセルも効きそうな感じなんですけど。

#ドロップしたシェイプをデリートすれば事足りると思うんですけど・・・

02: 名前:あひゃ投稿日:2005/09/01(木) 15:52
もしくは、
1.ユーザがシェイプドロップ
2.プログラムがエラー発見
3.プログラムが自動でシェイプを削除
4.ユーザがCtrl+Z押す

4でシェイプドロップのイベントが発生しないようにしたいです。

なにかご存知でしたら、なんでも結構なので教えて頂けないでしょうか。
宜しくお願い致します m(_ _)m

03: 名前:yoda投稿日:2005/09/01(木) 19:55
Beforeなんとか、というイベントはいろいろあれど、どれも、あとのまつりなんです。
以前このコーナーで、削除のキャンセルがありましたけど、そこで教わったのは、
Queryなんとかというイベントです。Helpにありますが、これが使えるイベントの
種類は11種類しかないです。
依然あったのは、「シェイプデリートイベントをキャンセルする方法」でした。

04: 名前:名無しさん投稿日:2005/09/02(金) 01:10
どうもありがとうございます!
どれも、あとのまつりなんですか〜^^;
Queryなんとかには、ドロップのキャンセルはなさそうでした。
別の方法を考えることにします!
強引にプログラムからctrl+Zをしようかなと思っております。

できたらまたご報告します^^

05: 名前:yoda投稿日:2005/09/02(金) 08:08
待ってますよ。

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



200: テキストの選択状態  レス数30でのページ 1 2  全レス

01: 名前:やま投稿日:2005/05/28(土) 11:41
おせわになっています。

VBAにてシェイプの選択を行い選択したシェイプにテキストを持っている場合
ある特定の文字列が存在した場合、その文字列のみを選択状態にする
やり方がありましたら教えてください。(検索機能を使用した場合と同じ
感じです)

以上、何かわかりましたらよろしくお願いします。

25: 名前:yoda投稿日:2005/07/15(金) 11:52
少し文章がらりっていますね。お酒かなにかのせいでしょうか。
すみませんが、よくわかりません。

26: 名前:エイ投稿日:2005/07/15(金) 12:48
大変申し訳ないですが、日本語は得意ではないですので、
なにかうまく伝えていなかったみたいですね。(笑)
それより、VBAではもっと下手なんですよ。
この間、質問させていながら、いろいろ試していました。

簡単にいうと、
visioの置換機能をVBAで実現したいわけです。

置換元:str_jobname9_tbl(idex)
置換先:str_jobname8_tbl(idex)

SendKeys str_jobname9_tbl(idex)
SendKeys ("{TAB}")
SendKeys str_jobname8_tbl(idex)
SendKeys ("{TAB 8}")
SendKeys ("{ENTER}")
SendKeys ("{ENTER}")
Application.DoCmd visCmdEditReplace
コーディングで話すと、分かりやすいかな。

置換項目はやく500、置換ファイルもやく500件
このぐらい量なら、結構時間掛かると思いますが、
なにか効率いい方法がないでしょうか。

27: 名前:visGeek投稿日:2005/07/15(金) 20:51
ご呈示のコードで目的は達成できたかと思います。
効率の良い方法はないと思いますが、
描画を止めればある程度は早くなるでしょう。

この処理はよく使うのでしょうか、それとも
1回だけ置換が済めばお役ご免となるのでしょうか。
後者であれば、500項目*500ファイルを1項目1秒として約70時間。
3連休の間に処理が終わりますね。

28: 名前:yoda投稿日:2005/07/15(金) 21:08
遅くなりましたが、能率のよい方法ということで、
考えてみました。ただ、テキストの置換だけに
的を絞ると、VBAのReplace関数を使う方法があ
るかも知れません。SendKeysよりは少し早いかも
知れません。この場合、プログラムのスケルトンは
単純で、以下のようになります。
Sub test()
Dim str1 As String, str2 As String
str1 = "yoda"
str2 = "yamada"
ChangeAll str1, str2
End Sub

Sub ChangeAll(str1 As String, str2 As String)
Dim shp As Visio.Shape
Dim pos As Long
For Each shp In ActivePage.Shapes
shp.Text = Replace(shp.Text, str1, str2)
Next
End Sub

29: 名前:エイ投稿日:2005/07/15(金) 23:23
ただいま、手元に開発環境がないですため、
試して見えないですが、ちょっと思ったのは、
頂いたサンプルにて半角、全角文字を区分しないようにできませんか。

30: 名前:yoda投稿日:2005/07/16(土) 08:14
わかりませんが、Replace関数には、比較方法に関する
引数もあるので、Help等で調べてみてはいかがでしょうか?
お手元に開発環境がなくても、msdnのサイトには、HELPと
ほとんど同じものがあります。その気にさえなれば、yahoo
の検索で適切なキーワードを入れるだけで、引っかかってく
るとかも知れません。

31: 名前:エイ投稿日:2005/07/18(月) 11:35
いろいろ、どうも有り難う。
置換仕様では、1つShapeに1つ置換対象のわけではありません。
考えした上、やはり「visCmdEditReplace」でやるべきではないか
と考えています。
時間掛かりますけど、PC2台、3台でやるんだったら、
割り切れるんでしょうか。(笑)

32: 名前:yoda投稿日:2005/07/18(月) 12:49
>置換仕様では、1つShapeに1つ置換対象のわけではありません。
Replace関数をテストしてみましたか?
もしテストすれば、意外な事実がわかるかも知れませんよ。

33: 名前:エイ投稿日:2005/07/19(火) 10:07
For Each shp In ActivePage.Shapes
shp.Text = Replace(shp.Text, str1, str2)
Next
該当処理では1ページに限定してるんでしょうか。

また、msdnに載せたのは、下記
-----------------------
REPLACE (old_text, start_num, num_chars, new_text)
old_text 置換する元の文字列。
start_num new_text で置換する old_text 内の最初の文字の位置。文字列の最初の文字位置は、1 になります。
num_chars old_text 内の置換する文字数。
new_text old_text 内の置換する文字列。
-----------------------

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

 レス数30でのページ 1 2 [最新レス]

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