2012-09-25 18 views
6

にブロックタイムライン上にマイルストーンをドロップします。私のコードは、私がこれを行う方法で見つけることができました唯一の半完全な例であるクリス・カスティーヨの2パーツブログ投稿(Part 1Part 2)、のオフに基づいています。しかし、彼のブログ(2004年)は正しく機能していないようだ。マイルストーンはタイムラインに実際には結びついておらず、日付を更新しても適切な場所に移動することはできません。は、どのように私はプログラム的に私は、プログラムのVisio 2010 COM Interopsを使用してタイムラインマーカーを作成しようとしているVisioの

任意の提案や修正?

enter image description here

Imports Microsoft.Office.Interop.Visio 
Imports System.Diagnostics.CodeAnalysis 
Imports System.Runtime.InteropServices 

...

ステンシル( "TIMELN_M.VSS")に建ておよびVisio 2010のテンプレートに対するクリスのコードを実行する
Dim VisioApp As New Application 

Dim myDoc As Document = VisioApp.Documents.Add("") 
Dim myPage As Page = myDoc.Pages.Item(1) 

Dim TimelineStencils As Document = 
    VisioApp.Documents.Add("Timeline Shapes.vss") 

Dim theTimeline As Shape 
Dim theMilestone As Shape 

VisioApp.AlertResponse = 1 

theTimeline = myPage.Drop(
    TimelineStencils.Masters.ItemU("Block timeline"), 5.610236, 5.511811) 

theTimeline.CellsU("User.visBeginDate").FormulaU = _ 
     VisioApp.ConvertResult(
      "1/1/2004", VisUnitCodes.visDate, VisUnitCodes.visInches) 

theTimeline.CellsU("User.visEndDate").FormulaU = _ 
    VisioApp.ConvertResult(
     "12/31/2004", VisUnitCodes.visDate, VisUnitCodes.visInches) 

VisioApp.Addons("ts").Run("/cmd=3") 

theMilestone = myPage.Drop(_ 
    TimelineStencils.Masters.ItemU("Line milestone"), _ 
    5.610236, 5.511811) 

theMilestone.CellsU("User.visMilestoneDate").FormulaU = _ 
    VisioApp.ConvertResult(
     "7/1/2004", VisUnitCodes.visDate, VisUnitCodes.visInches) 

VisioApp.AlertResponse = 0 

答えて

2

私は、@ JohnGoldsmithがsome of his other answersにリンクしているvisioオブジェクトをプログラムで追加して、関連する質問を見つけて、ステンシルとページを作成する優れた方法を見つけました。あなたの助けジョン

Dim VisioApp As New Application 

Dim myDoc As Document = VisioApp.Documents.Add("Timeline.vst") 
Dim myPage As Page = myDoc.Pages.Item(1) 

Dim TimelineStencilName As String = "TIMELN_M.VSS" 
Dim TimelineStencilDoc As Document 

For Each Doc As Document In VisioApp.Documents 
    If Doc.Name = TimelineStencilName Then 
     TimelineStencilDoc = Doc 
     Exit For 
    End If 
Next 

Dim TimelineMaster As Master = 
    TimelineStencilDoc.Masters.ItemU("Block timeline") 

Dim MilestoneMaster As Master = 
    TimelineStencilDoc.Masters.ItemU("Line milestone") 

Dim theTimeline As Shape 
Dim theMilestone As Shape 

theTimeline = myPage.Drop(TimelineMaster, 5.610236, 5.511811) 

theTimeline.CellsU("User.visBeginDate").FormulaU = _ 
    VisioApp.ConvertResult(
      "1/1/2004", VisUnitCodes.visDate, VisUnitCodes.visInches) 

theTimeline.CellsU("User.visEndDate").FormulaU = _ 
    VisioApp.ConvertResult(
     "12/31/2004", VisUnitCodes.visDate, VisUnitCodes.visInches) 

theMilestone = myPage.Drop(_ 
    MilestoneMaster, _ 
    5.610236, 5.511811) 

theMilestone.CellsU("User.visMilestoneDate").FormulaU = _ 
    VisioApp.ConvertResult(
     "10/1/2004", VisUnitCodes.visDate, VisUnitCodes.visInches) 
+0

また、このすべてに苦労している人には、シェイプシートを有効にするデベロッパーモードを有効にする手順があります。http://www.visguy.com/2008/08/04/top-9-reasons-for-turning非現像液モード –

2

私はそれが完全に働きました。ただし、空白の文書を含む組み込みのステンシルに対して実行すると、説明および日付の形状データフィールドは表示されません。これら二つのフィールドの可視性は、アドオンによって追加される、またはマスターのいずれかが削除されたときに追加されるかDocument ShapeSheetにおけるユーザセル(「User.visTLShowProps」)に依存します。

標準テンプレートには、DocumentCreatedおよびDocumentOpenedのアドオンで機能を呼び出す2つのpersistent eventsが含まれています。これらのどちらかは、上記の値を切り替えるために使用されるいくつかのユーザーセルを追加するか、または存在しますテンプレート内のいずれにしても、元のテンプレートを使用していない場合は、ドキュメントシェイプシートに追加されません。

これは、あなたが値を自分でトグルする必要があることを意味します。例えば(クイックVBAの例):

Private Sub SetTlShowProps(ByRef vDoc As Visio.Document) 
If (Not vDoc Is Nothing) Then 
    Dim docShp As Visio.Shape 
    Set docShp = vDoc.DocumentSheet 
    If (docShp.CellExistsU("User.visTLShowProps", 0)) Then 
     docShp.CellsU("User.visTLShowProps").FormulaU = 1 
    End If 
End If 
End Sub 

それとも、あなたがシェイプシートで自分のドキュメントテンプレートいるにもちろん、あなたがそれらの「プッシュ」のセルを追加することができます。

User.visTLShowPropsOn = SETF(GetRef(User.visTLShowProps),1) 

User.visTLShowPropsOff = SETF(GetRef(User.visTLShowProps),0) 

最終点であればこれはあなたの問題を解決しません、別のまたは派生したステンシル( "タイムラインShapes.vss")を使用していますか?

+0

感謝。あなたがChrisのコードを実行し、それが機能したとき、それはスタンドアロンのアプリケーションか、VisioのVBAコンソールの中からでしたか?タイムラインのステンシルを「TIMELN_M.VSS」に変更しましたが、同じ結果が得られています。私は彼らが同じだったという印象の下にいました。 –

+0

また、Dim myDoc As Document = VisioApp.Documents.Add( "")を空白のドキュメントの代わりにタイムラインドキュメントをロードするように変更することはできますか? –

関連する問題