- 01: 名前:HIRO投稿日:2005/03/30(水) 10:31
- Visio素人で申し訳ありませんがご教示願います。
VisioのVBAにて、以下のようにExcelセルの文字列をVisioのカスタムプロパティにセットしようとしました。
visShape.Cells("Prop.Row_5").Formula = xlApp.Range(xlCellRange).Formula
Excel側のシートのセルに「”””文字列”””」と記述し保存しておくと、
Visioのカスタムプロパティに「”文字列”」のようにセットされることはできたのですが、
本当の目的は、
Excel側のシートのセルの「文字列」と記述してあるものに対して
Visioのカスタムプロパティに「文字列」のようにセットされるようにしたいのです。
これを直接行える記述はあるのでしょうか?
それとも別途で文字列置換を行わなければならないのでしょうか?
Visio2003で作成しております。
- 09: 名前:yoda投稿日:2005/04/07(木) 16:28
- 図面を開くことが必要です。
- 10: 名前:HIRO投稿日:2005/04/07(木) 16:47
- 図面を開くとはページを開くという意味でしょうか?
省略してしまいましたが実際にはファイルを開いた後、目的のページを開くコードは記述しています。
具体的な質問として展開しますと、ExcelVBA上でCellSRCやRowCountに相当する記述はできないものかということなのですが、
シェイプひとつを更に展開するようなコードを記述しなければならないという意味なのでしょうか?
- 11: 名前:yoda投稿日:2005/04/07(木) 17:21
- ExcelVBA上でも 04 がそのまま使えます。
- 12: 名前:名無しさん投稿日:2005/04/07(木) 17:25
- ご参考までに、私が試行したコードは以下の通りです。
Sub test()
Dim visApp As Visio.Application
Dim doc As Visio.Document
Dim shp As Visio.Shape
Dim N As Long, I As Long
Set visApp = New Visio.InvisibleApp
Set doc = visApp.Documents.OpenEx("D:\Documents and Settings\Owner\My Documents\Visio図面\カスタムプロパティのラベルを読み取る.vsd", visOpenRW)
Set shp = visApp.ActivePage.Shapes(2)
N = shp.RowCount(visSectionProp)
For I = 0 To N - 1
Debug.Print shp.CellsSRC(visSectionProp, I, visCustPropsLabel).ResultStr("")
Next
visApp.Quit
Set visApp = Nothing
End Sub
- 13: 名前:HIRO投稿日:2005/04/08(金) 10:39
- ご回答ありがとうございました。
レス04の記述がそのまま使えるとなると私はもっと基本的なところで間違っているのではないかと思えてきました。
以下は私のソースで余計な部分を省いたものです。
ステップインしながらウォッチウィンドウで見ると、
visShape.RowCount(visSectionProp)の値が0なのでこの記述では指定図形を見ていないのでしょうか?
ここに整数を入れて続行してみましたが、visShape.CellsSRC(visSectionProp, Indx, visCustPropsValue).Formulaに文字列が格納された様子はありませんでした。
Public Sub Visio指定図形に値をセット(thisPath As String, thisBook As String, thisSheet As String)
Dim CellValue As String
Dim visApp As Object
Dim visShape As Object
Dim visShapeCount As Long
visFileName = "Visioファイル名"
visPageName = "Visioシート名"
visShapeName = "目的の図形のID"
Set visApp = CreateObject("visio.application")
visApp.documents.Open visFileName
visApp.ActiveWindow.PageFromName = visPageName
'図形を検索
visShapeCount = visApp.ActivePage.Shapes.Count
For i = 1 To visShapeCount
Set visShape = visApp.ActivePage.Shapes(i)
If visShape.CellExists("Prop.Row_1", True) Then
If visShape.Cells("Prop.Row_1").ResultStr("") = visShapeName Then
visApp.ActiveWindow.Select visShape, 2
Exit For
End If
End If
Next i
'ここまでは予定通りの動きをしています。
'選択図形のカスタムプロパティに値を格納する
Row = 1
Col = 2
For Indx = 1 To visShape.RowCount(visSectionProp) - 1
visShape.CellsSRC(visSectionProp, Indx, visCustPropsValue).Formula = QW(Workbooks(thisBook).Worksheets(thisSheet).Cells(Row, Col).Formula)
Col = Col + 1
Next Indx
visApp.Quit
Set visApp = Nothing
Set visShape = Nothing
End Sub
Public Function QW(s As String) As String
QW = Chr(34) & s & Chr(34)
End Function
- 14: 名前:HIRO投稿日:2005/04/08(金) 10:41
- 12:名無しさんのサンプルコードを試してみようとしたのですが、
Dim visApp As Visio.Application
Dim doc As Visio.Document
Dim shp As Visio.Shape
について、「コンパイルエラー:ユーザ定義型は定義されていません。」と出ます。
すごい基本的なことが分かってないのかなと泣きたくなってきました・・・・
- 15: 名前:yoda投稿日:2005/04/08(金) 10:59
- Visio Type Libraly への参照設定はしましたか?
- 16: 名前:yoda投稿日:2005/04/08(金) 11:40
- 参照設定については、ここに詳しい説明があります。
http://counter.onamae.com/chubu/r6/visio/DVS_15_VBA_Programming_in_Visio763.htm [source] [check]
- 17: 名前:HIRO投稿日:2005/04/08(金) 13:36
- 仰るとおりでした。
Includeが無きゃ関数使えるわけ無いですよね・・・
やっぱり根本的なところでのミスでした。お恥ずかしい・・・
でも、前に進めたので気分は結構いいです。
眠気も醒めて続きに没頭できます。
どうもありがとうございました。
■トップに戻る リロード 全レスを表示
|