ExcelVBAでオートシェイプを扱う

VBAでオートシェイプを扱ったことがないのでやってみた。

テキストボックスをコネクタでつないで作成した遷移図からstruts-config.xmlを生成するサンプルを紹介する。

サンプルは、Excel2003で動作確認し、参照設定でMicrosoft Scripting Runtime、Microsoft ActiveX Data Object 2.8 Libraryを追加した。
また、ExcelVBAでテンプレートを使うで紹介したMiniTemplatorを使用しテンプレートファイルを作成、struts-config.xmlはStruts1.3向けに作成している。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>

    <!-- ========== Form Bean Definitions ================================== -->
    <form-beans><!-- $BeginBlock ForeachFormBeanTag -->
    	<form-bean name="${ScreenName}Form" type="${RootPackage}.form.${SubPackage}.${ScreenName}Form" /><!-- $EndBlock ForeachFormBeanTag -->
    </form-beans>

    <!-- ========== Action Mapping Definitions ============================= -->
    <action-mappings><!-- $BeginBlock ForeachActionTag -->
    	<action path="/${SubPackage}/${ScreenName}"
                type="${RootPackage}.action.${SubPackage}.${ScreenName}Action"
                name="${ScreenName}Form"
                input="/WEB-INF/jsp/${SubPackage}/${ScreenName}.jsp"
                scope="request"
                validate="false"><!-- $BeginBlock ForeachForwardTag -->
                <forward name="${ScreenName}" path="${ForwardPath}"/><!-- $EndBlock ForeachForwardTag -->
        </action><!-- $EndBlock ForeachActionTag -->
	</action-mappings>

</struts-config>
  • 画面遷移図イメージ

f:id:kgu:20100401230157j:image

Option Explicit
Sub CreateStrutsConfig()
'------------------------------------------------------------------------------
' 画面遷移図からstruts-config.xmlを生成する。
'------------------------------------------------------------------------------
On Error GoTo Err_Lbl
    
    Dim RootPackage As String 'ルートパッケージ
    
    Dim Shp As Shape 'シェーブ
    Dim ActionAndForwardsMap As New Scripting.Dictionary 'ActionとForwardのマップ
    Dim Forwards As String 'Forward先
    
    Dim FileObject As New ADODB.Stream 'ファイルオブジェクト
    Dim Templator As New MiniTemplator 'テンプレートエンジン
    
    'テンプレートファイル読み込み
    Templator.ReadTemplateFromFile ThisWorkbook.Path & "\" & "struts-config.xml.txt"
    
    RootPackage = ActiveSheet.Cells(1, 2)
    'ルートパッケージのテンプレート埋め込み
    Templator.SetVariable "RootPackage", RootPackage
    
    For Each Shp In ActiveSheet.Shapes 'アクティブシートのシェープを一つずつ処理
        If Shp.Connector Then
            'シェープがコネクタであるとき
            With Shp.ConnectorFormat
                If Shp.Line.BeginArrowheadStyle <> msoArrowheadNone _
                        Or Shp.Line.EndArrowheadStyle <> msoArrowheadTriangle _
                        Or Not .BeginConnected _
                        Or Not .EndConnected Then
                    'コネクタの開始ヘッドが"―"でない、コネクタの終了ヘッドが"->"でない
                    'コネクタの開始や終了がシェープに接続されていない
                    'といった条件に当てはまるときは不正とする
                    MsgBox "コネクタが不正です。", vbExclamation
                    GoTo Exit_Lbl
                End If
                Dim BeginText As String '開始シェープのテキスト
                Dim EndText As String '終了シェープのテキスト
                BeginText = .BeginConnectedShape.TextFrame.Characters.text
                EndText = .EndConnectedShape.TextFrame.Characters.text
                
                Forwards = ActionAndForwardsMap.Item(BeginText)
                If Forwards = "" Then
                    Forwards = EndText
                Else
                    'Forward先が複数あるときはタブで区切る
                    Forwards = Forwards & vbTab & EndText
                End If
                
                If ActionAndForwardsMap.Exists(BeginText) Then
                    ActionAndForwardsMap.Remove BeginText
                End If
                'ActionとForward先の紐付け
                ActionAndForwardsMap.Add BeginText, Forwards
            End With
        End If
    Next
    
    Dim Action As Variant 'Action
    Dim ActionSplit() As String 'Action分割
    Dim ForwardSplit() As String 'Actionに対応するForward先
    Dim SubPackage As String 'サブパッケージ
    Dim ScreenName As String '画面名
    Dim i As Integer 'カウンタ
    
    For Each Action In ActionAndForwardsMap.Keys 'Actionタグを一つずつ作成
        ActionSplit = Split(Action, ".")
        If UBound(ActionSplit) <> 1 Then
            MsgBox "サブパッケージとActionクラスの分割に失敗しました。", vbExclamation
            GoTo Exit_Lbl
        End If
        
        SubPackage = ActionSplit(0)
        ScreenName = ActionSplit(1)
        'Actionに対応するForward先取得
        ForwardSplit = Split(ActionAndForwardsMap.Item(Action), vbTab)
        For i = 0 To UBound(ForwardSplit)
            If ForwardSplit(i) <> Action Then
                ' 画面名のテンプレート埋め込み
                Templator.SetVariable "ScreenName", ForwardSplit(i)
                'Forward先テンプレート埋め込み
                Templator.SetVariable "ForwardPath", "/" & Replace(ForwardSplit(i), ".", "/") & ".do"
                'Forwardブロックに追加
                Templator.AddBlock "ForeachForwardTag"
            End If
        Next
        '自画面へのForward先を必ず記述
        Templator.SetVariable "ScreenName", "MySelf"
        Templator.SetVariable "ForwardPath", "/WEB-INF/jsp/" & Replace(Action, ".", "/") & ".jsp"
        Templator.AddBlock "ForeachForwardTag"
        'サブパッケージのテンプレート埋め込み
        Templator.SetVariable "SubPackage", SubPackage
        '画面名のテンプレート埋め込み
        Templator.SetVariable "ScreenName", ScreenName
        'Actionタグブロックに追加
        Templator.AddBlock "ForeachActionTag"
        'Formタブブロックに追加
        Templator.AddBlock "ForeachFormBeanTag"
    Next
    
    Dim BytData() As Byte
    Dim JavaFileName As String
    ' ファイル名を作成
    JavaFileName = ThisWorkbook.Path & "\" & "struts-config.xml"
    With FileObject
        .Open
        .Charset = "UTF-8" ' 文字コード指定
        .Type = adTypeText
        .WriteText Templator.GenerateOutputToString '作成したデータをファイルに出力
        
        ' UTF-8で書き出すとBOM付きになるので解除する処理
        .Position = 0
        .Type = adTypeBinary
        .Position = 3
        BytData = .Read
        .Close
        
        .Open
        .Type = adTypeBinary
        .Write BytData
        .SaveToFile (JavaFileName), adSaveCreateOverWrite
        .Close
    End With

Exit_Lbl:
    Set Templator = Nothing
    Set FileObject = Nothing
    Exit Sub

Err_Lbl:
    MsgBox Err.Number & ":" & Err.Description, vbExclamation
    Resume Exit_Lbl
    
End Sub
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>

    <!-- ========== Form Bean Definitions ================================== -->
    <form-beans>
    	<form-bean name="MenuForm" type="root.form.menu.MenuForm" />
    	<form-bean name="EmpRegForm" type="root.form.emp.EmpRegForm" />
    	<form-bean name="EmpDelForm" type="root.form.emp.EmpDelForm" />
    	<form-bean name="EmpModForm" type="root.form.emp.EmpModForm" />
    	<form-bean name="EmpListForm" type="root.form.emp.EmpListForm" />
    </form-beans>

    <!-- ========== Action Mapping Definitions ============================= -->
    <action-mappings>
    	<action path="/menu/Menu"
                type="root.action.menu.MenuAction"
                name="MenuForm"
                input="/WEB-INF/jsp/menu/Menu.jsp"
                scope="request"
                validate="false">
                <forward name="emp.EmpList" path="/emp/EmpList.do"/>
                <forward name="MySelf" path="/WEB-INF/jsp/menu/Menu.jsp"/>
        </action>
    	<action path="/emp/EmpReg"
                type="root.action.emp.EmpRegAction"
                name="EmpRegForm"
                input="/WEB-INF/jsp/emp/EmpReg.jsp"
                scope="request"
                validate="false">
                <forward name="emp.EmpList" path="/emp/EmpList.do"/>
                <forward name="MySelf" path="/WEB-INF/jsp/emp/EmpReg.jsp"/>
        </action>
    	<action path="/emp/EmpDel"
                type="root.action.emp.EmpDelAction"
                name="EmpDelForm"
                input="/WEB-INF/jsp/emp/EmpDel.jsp"
                scope="request"
                validate="false">
                <forward name="emp.EmpList" path="/emp/EmpList.do"/>
                <forward name="MySelf" path="/WEB-INF/jsp/emp/EmpDel.jsp"/>
        </action>
    	<action path="/emp/EmpMod"
                type="root.action.emp.EmpModAction"
                name="EmpModForm"
                input="/WEB-INF/jsp/emp/EmpMod.jsp"
                scope="request"
                validate="false">
                <forward name="emp.EmpList" path="/emp/EmpList.do"/>
                <forward name="MySelf" path="/WEB-INF/jsp/emp/EmpMod.jsp"/>
        </action>
    	<action path="/emp/EmpList"
                type="root.action.emp.EmpListAction"
                name="EmpListForm"
                input="/WEB-INF/jsp/emp/EmpList.jsp"
                scope="request"
                validate="false">
                <forward name="emp.EmpReg" path="/emp/EmpReg.do"/>
                <forward name="emp.EmpMod" path="/emp/EmpMod.do"/>
                <forward name="emp.EmpDel" path="/emp/EmpDel.do"/>
                <forward name="menu.Menu" path="/menu/Menu.do"/>
                <forward name="MySelf" path="/WEB-INF/jsp/emp/EmpList.jsp"/>
        </action>
	</action-mappings>

</struts-config>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值