Excel Christmas tree

1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人投票)
Loading ... Loading ...

ChristmasTree2009
这是Debra Dalgleish在Excel工作表中为大家创建的一棵圣诞树,她希望:

Merry Christmas! I hope you’re relaxing today, and spending time with friends and family.

这棵圣诞树中的亮光使用Excel条件格式创建,并且当按下F9键时,亮光会变化。当然,只能在Excel 2007或更高版本的Excel中使用。
下载地址:

相关文章

细品RibbonX(58):示例—创建动态的Ribbon库

1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人投票)
Loading ... Loading ...

Sam Radakovitz曾在Excel团队博客中发表过一篇文章,介绍了如何创建动态的Ribbon库,即如何通过RibbonX和VBA放置动态的图形图像到功能区库中,在该文中,作者创建了两个库:一个是带有标签的小图表图像,一个是大的图像。如图1和图2所示。
CreateDynamicGallery1
图1:小图形库
CreateDynamicGallery2
图2:大图形库
带有完整的RibbonX和VBA代码的示例文档见:

下面对其进行简单的介绍。
RibbonX
先从RibbonX代码开始。RibbonX简单的解释就是定义Ribbon外观的XML。对于本例,RibbonX将定义所放置的两个库的位置、库按钮以及在库中的项目,RibbonX已存在于文档中,必须使用工具来获取文档中的RibbonX代码,您可以使用Office 2007 Custom UI Editor。打开“Office 2007 Custom UI Editor”,然后打开“Charts_In_Ribbon.xlsm”文档,其中的XML代码如下:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="ribbonLoaded">
	<ribbon>
	  <tabs>
		<tab idMso="TabHome">
	        <group id="grpChartsInRibbon" label="Charts">
 
                 <gallery id="galSmallCharts" 
                          label="Small Charts" 
                          size="large" 
                          showLabel="true" 
                          imageMso="ChartPlacement" 
                          columns="1" 
                          rows="5" 
                          itemHeight="90" 
                          itemWidth="150" 
                          supertip="Small pictures of your charts!" 
                          getItemCount="getItemCount" 
                          getItemID="getItemID" 
                          getItemImage="getItemImage"  
                          getItemSupertip="getItemSupertip" 
                          getItemLabel="getItemLabel" 
                          onAction="galRefreshAction"/>
 
                 <gallery id="galBigCharts" 
                          label="Big Charts" 
                          size="large" 
                          showLabel="true" 
                          imageMso="ChartPlacement" 
                          columns="2" 
                          rows="2" 
                          itemHeight="291" 
                          itemWidth="483" 
                          supertip="Large pictures of your charts!" 
                          getItemCount="getItemCount" 
                          getItemID="getItemID" 
                          getItemImage="getItemImage"  
                          getItemSupertip="getItemSupertip" 
                          onAction="galRefreshAction"/>
 
            </group>
	</tab>
    </tabs>
  </ribbon>
</customUI>

如果创建一个新文档并在Office 2007 Custom UI Edtior中打开该文档,则不会看到任何内容,因为该文档中没有RibbonX。下面,我们来介绍一个这个Ribbon XML的关键点:
回调
这里,告诉功能区调用VBA函数来获取:库中的项目数、项目的标签、悬浮在项目上时显示的工具提示。例如在RibbonX中:

getItemCount="getItemCount"

红色的getItemCount是RibbonX属性,告诉功能区去调用VBA函数来获取项目数,蓝色的getItemCount是要调用的VBA函数名称。如果想指定固定的项目数,则应使用:

ItemCount="4"

Ribbon对象
在customUI标签中添加

onLoad="ribbonLoaded"

将允许VBA代码获取ribbon对象的一个句柄,允许我们使ribbon无效。使该ribbon无效将强制ribbon在下次用户进入库时调用库程序(回调),为我们提供了更新库中项目和图像的一种方式。在下面的VBA部分将介绍如何使ribbon无效。
库的位置
在本示例中,我们在“开始”选项卡中创建了一个新组:

idMso="TabHome"

。因为我们没有指定“insertbefore”属性,因此将新按钮排在“开始”选项卡的右侧。
在库按钮中的图像
这里,为库按钮图像选取了一个已存在的ribbon图标:
CreateDynamicGallery4
这种结果是通过

imageMso="ChartPlacement"

来定义的。可以为每个按钮使用不同的图标,或者通过回调或定义图像属性装载自已的图标。
小库或大库
两个库对代码有相同的回调,因为它们的项目数和图表图片是相同的,它们在RibbonX里的不同是:

  • 对于小库,itemWidth和itemHeight属性被设置得比大库更小。
  • 小库有另一个回调,来定义库中每个图表的标签。由于在小库中的图表更小,所以添加标签能帮助识别图表。
  • 对小库有更少的列,但有更多的行。设置小库为单列来帮助创建小库和大库之间不同的视图。

VBA代码
本例中,oRibbon对象是Ribbon,将使用其来使Ribbon无效,以便可以强制更新库。

Public oRibbon As IRibbonUI

当ribbon装载RibbonX时,调用接下来的sub过程,传递Ribbon对象,这是获取Ribbon对象的唯一方式。该代码设置公共的ribbon对象为后面使用:

Public Sub ribbonLoaded(Ribbon As IRibbonUI)
    Set oRibbon = Ribbon
End Sub

当用户在库中单击时,调用“getItemCount”,ribbon需要清楚其显示什么。因为我们在RibbonX中定义了回调,指定在库中有多少项。
注意本例中的OnTime方法,如何使ribbon无效。默认情况下,ribbon将调用所有回调一次来获取项目和图像,并隐藏这些值直至使它们无效。这里,每次用户在库中单击时,使图像失效。处理这种操作有更顺畅的方法,但本示例将保持简单的方式。

Sub getItemCount(control As IRibbonControl, ByRef count)
        count = ActiveSheet.ChartObjects.count
        Application.OnTime DateAdd("s", 1, Now), "InvalidateRibbon"
End Sub

下一个程序为库中每个项目调用,将设置项目在库中显示的图像。本例中,想使所有的图像都在这里,因此Ribbon带有一个索引值,只是告诉索引的图表,然后告诉ribbon使用该图像。

Sub getItemImage(control As IRibbonControl, index As Integer, ByRef image)
    ActiveSheet.ChartObjects(index + 1).Chart.Export ThisWorkbook.Path & "\Chart_" & index + 1 & ".jpg", "jpg"
    Set image = LoadPicture(ThisWorkbook.Path & "\chart_" & index + 1 & ".jpg")
End Sub

“getItemID”程序在通过ribbon获取库项目的id时调用。在本示例中我们不使用。

Sub getItemID(control As IRibbonControl, index As Integer, ByRef id)
    id = "Chart_" & index
End Sub

下一个回调定义每个库项目的工具提示,或者超级工具提示。在本示例中,工具提示是series名称和公式,提供用户其原理或来源于哪里。这虽然不是特别有帮助的,但有趣。

Sub getItemSupertip(control As IRibbonControl, index As Integer, ByRef supertip)
    Dim oSeries As Series
    Dim sTooltip As String
    For Each oSeries In ActiveSheet.ChartObjects(index + 1).Chart.SeriesCollection
        sTooltip = sTooltip & vbCrLf & oSeries.Name & vbCrLf & oSeries.Formula & vbCrLf
    Next oSeries
    supertip = sTooltip
End Sub

“getItemLabel”回调仅被小库调用,通过RibbonX来定义,将设置库项目的标签。本例中,将使用图表标题作为标签,如果不存在则使用图表名称。

Sub getItemLabel(control As IRibbonControl, index As Integer, ByRef label)
    If ActiveSheet.ChartObjects(index + 1).Chart.HasTitle Then
        label = ActiveSheet.ChartObjects(index + 1).Chart.ChartTitle.Caption
    Else
        label = ActiveSheet.ChartObjects(index + 1).Name
    End If
End Sub

下一个程序当用户在库项目中单击后调用。例如,用户单击某图表,代码将滚动到该图表并激活该图表。

Sub galRefreshAction(control As IRibbonControl, selectedId As String, selectedIndex As Integer)
    ActiveWindow.ScrollIntoView ActiveSheet.ChartObjects(selectedIndex + 1).Left, ActiveSheet.ChartObjects(selectedIndex + 1).Top, ActiveSheet.ChartObjects(selectedIndex + 1).Width, ActiveSheet.ChartObjects(selectedIndex + 1).Height
    ActiveSheet.ChartObjects(selectedIndex + 1).Activate
End Sub

最终的结果
在定义了RibbonX和VBA代码之后,打开该文档将显示两个新库,点击每个库的下拉箭头后,将显示工作表中最近图表的图像,单击库中的某图表将到达该图表。
您可以修改本示例,以达到更丰富的效果。
如果将本示例作为一个加载项,将可以在所有工作簿中使用。
目前,本示例只是遍历活动工作表的图表,可以修改以显示整个工作簿中的图表,甚至是所有打开的工作簿中的图表。
参考资源:

http://msdn2.microsoft.com/en-us/office/aa905530.aspx

http://msdn2.microsoft.com/en-us/office/aa905356.aspx

http://msdn2.microsoft.com/en-us/library/aa338199.aspx

相关文章

First Look Microsoft Office 2010

1 颗星2 颗星3 颗星4 颗星5 颗星 (2 人投票, 平均: 5.00 out of 5)
Loading ... Loading ...

Merry Christmas.!Happy New Year!
预祝大家节日快乐!
Office 2010正式版还未发布,相关图书就来啦!这里,奉上一本关于Office 2010的新书,与大家共享。
Office2010book1
下载地址:

相关文章

细品RibbonX(57):示例—在Excel 2007的功能区中添加中文选项卡和控件

1 颗星2 颗星3 颗星4 颗星5 颗星 (目前还没有人投票)
Loading ... Loading ...

由于Office 2007 CustomUI Editor并不支持中文,因此不能使用这个方便的工具来定制Ribbon,只能使用修改Office 2007文件格式的方法来解决了。此外,还可以使用Visual Studio来自定义中文选项卡。
步骤1 在桌面上创建一个名为customUI的文件夹。
步骤2 打开记事本,并在其中输入下面的XML代码:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="rxtabCustom"
           label="我自已的选项卡"
           insertBeforeMso="TabHome">
          <group idMso="GroupFont"/>
          <group idMso="GroupZoom"/>
          <group id="myGroup" label="我的组">
              <button id="b1" 
                      imageMso="HyperlinkInsert" 
                      size="large" 
                      label="启动网站" 
                      onAction="surf"/>
              <button id="b2" 
                      imageMso="HappyFace" 
                      label="微笑图标" 
                      onAction="smile"/>
              <button id="b3" 
                      imageMso="FormatPainter" 
                      label="格式刷图标" 
                      onAction="paint"/>
              <button id="b4" 
                      imageMso="AutoFilterClassic" 
                      label="筛选图标" 
                      onAction="filter"/>
           </group>
     </tab>
   </tabs>
  </ribbon>
</customUI>

该XML文件在Excel的“开始”选项卡前创建了一个名为“我自已的选项卡”的选项卡,并添加了三个组,前两个为Excel内置的组“字体”和“显示比例”,第三个为名为“我的组”的自定义组,其中包括四个自定义的按钮“启动网站”、“微笑图标”、“格式刷图标”和“筛选图标”,并分别定义了onAction属性。
步骤3 将该文件命名为customUI并以.xml为扩展名保存在customUI文件夹中,并关闭该文件。在保存时注意选择“编码”下拉框中的编码为UTF-8,如下图所示。
SaveAsUTF8Format
步骤4 在桌面上新建一个启用宏的Excel文件,并命名为MyCustomUI.xlsm。因为在自定义的XML中,包含了产生回调的onAction属性,所以创建的Excel文件需要启用宏。
步骤5 在MyCustomUI.xlsm中,按Alt+F11组合键打开VBE,并插入一个标准模块,添加下面的代码供回调使用:

'Callback for b1 onAction
Sub surf(control As IRibbonControl)
    ActiveWorkbook.FollowHyperlink _
      Address:="http://www.excelperfect.com", _
      NewWindow:=True
End Sub
'Callback for b2 onAction
Sub smile(control As IRibbonControl)
    MsgBox "您单击了微笑图标!呵呵..."
End Sub
'Callback for b3 onAction
Sub paint(control As IRibbonControl)
    MsgBox "您单击了格式刷图标!"
End Sub
 
'Callback for b4 onAction
Sub filter(control As IRibbonControl)
    MsgBox "您单击了筛选图标!"
End Sub

步骤6 关闭工作簿MyCustomUI.xlsm。
步骤7 在MyCustomUI.xlsm图标上单击右键,选择“重命名”,在文件名后添加“.zip”扩展名,使其变为一个压缩文件。如下图所示。
changeextendnameforzip
步骤8 双击该压缩文件,打开压缩包,将customUI文件夹拖到该压缩包中,如下图所示。
customuitozip
步骤9 将压缩包中的_rels文件夹拖至桌面。
步骤10 打开桌面中的_rels文件夹,然后用记事本打开其中的.rels文件,如下图所示。
relsfile
步骤11 在.rels文件的最后一个之前,添加下面的XML:

<Relationship Id="customUIRelID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"/>

步骤12 保存该.rels文件并关闭。
步骤13 将修改后的_rels文件夹拖回MyCustomUI压缩包中。如果出现提示,则选择是,覆盖原文件。关闭压缩包。
步骤14 将MyCustomUI.xlsm.zip的.zip扩展名删除。
步骤15 双击MyCustomUI.xlsm文件,打开工作簿,此时在Excel内置选项卡“开始”的前面添加了一个自定义选项卡,在该选项卡中添加了两个内置组和一个自定义组,如下图所示。
MyCustomUIResult1
看看吧,都是中文的,成功!

相关文章

细品RibbonX(56):使用Visual Studio开发Excel商务应用程序(2)

1 颗星2 颗星3 颗星4 颗星5 颗星 (1 人投票, 平均: 5.00 out of 5)
Loading ... Loading ...

让我们接着上文介绍,继续丰富已开发的应用程序。
下面,让应用程序执行更丰富的计算。例如,可能想计算一定范围内的抵押值,而不是单个值,以便为客户提供多种选择。在上例中,我们能够指导用户输入不同的值,执行相同的计算多次,然而这种方式往往会花费很多时间。因此,需要使用不同的方法使应用程序更好的执行任务。
较好的解决方案是使用对话框来输入计算范围,而使用对话框启动器来访问对话框。添加了对话框启动器的新界面如下图。
RibbonXApplicationSample21
相应的XML代码如下:

          <dialogBoxLauncher>
            <button id="RedundantCalcsLaunch"
                    screentip="多重计算"
                    supertip="多次执行同一公式的计算."
                    onAction="DisplayRedundantCalc"/>
          </dialogBoxLauncher>

要实现本例的功能,需要:

  • 为每个等式创建不同的对话框,需要创建3个对话框。
  • 代码必须区分不同的等式。
  • 任何用于与用户交互的对话框需要与功能区中的信息相链接,功能区控件同样需要从对话框中更新。
  • 代码对所需的ThisAddIn方法作多次调用,填充单元格区域中的单元格。
  • 取决于你的需求,可以提供额外的信息,例如列标题和行标题,使输出更易理解。

设计对话框
本例限定用户选择两个范围,这样可以在表中显示输出。设计的“选择贷款范围”窗体如下图所示。
RibbonXApplicationSample22
“选择年金范围”窗体设计如下图所示。
RibbonXApplicationSample23
“选择有效利率范围”窗体设计如下图所示。
RibbonXApplicationSample24
注:设计功能区的目的是减少复杂性。如果由于一些多余的设计选择而增加了更多的复杂性,那么用户将不会感受到使用功能区的任何好处。
创建计算代码
执行一次或多次计算实质上是相同的,但稍有不同。代码如下:

    ' 计算贷款金额并包括位置数据
    Public Sub CalculatePMT(ByVal Rate As Double, ByVal NPer As Int32, ByVal PV As Int32, ByVal X As Int32, ByVal Y As Int32)
        ' 计算利率.
        Dim PeriodicRate As Double = (Rate / 100) / 12
 
        ' 计算期数.
        Dim Periods As Int32 = NPer * 12
 
        ' 执行计算.
        Application.ActiveWindow.ActiveCell.Cells(X, Y) = _
              "=PMT(" + PeriodicRate.ToString() + "," + _
              Periods.ToString() + "," + PV.ToString() + ",0,0)"
        Application.ActiveWindow.ActiveCell.Calculate()
    End Sub
 
    ' 计算年金金额并包括位置数据.
    Public Sub CalculateFV(ByVal Rate As Double, ByVal NPer As Int32, ByVal PMT As Int32, ByVal PV As Int32, ByVal X As Int32, ByVal Y As Int32)
        ' 计算利率.
        Dim PeriodicRate As Double = (Rate / 100) / 12
 
        ' 计算期数.
        Dim Periods As Int32 = NPer * 12
 
        ' 执行计算.
        Application.ActiveWindow.ActiveCell.Cells(X, Y) = _
           "=FV(" + PeriodicRate.ToString() + "," + _
           Periods.ToString() + "," + PMT.ToString() + "," + _
           PV.ToString() + ",0)"
        Application.ActiveWindow.ActiveCell.Calculate()
    End Sub
 
    ' 计算有效利率并包括数据位置.
    Public Sub CalculateEFFECT(ByVal Rate As Double, ByVal X As Int32, ByVal Y As Int32)
        ' 计算利率.
        Dim PeriodicRate As Double = (Rate / 100) / 12
 
        ' 执行计算.
        Application.ActiveWindow.ActiveCell.Cells(X, Y) = _
           "=EFFECT(" + PeriodicRate.ToString() + ",12)"
        Application.ActiveWindow.ActiveCell.Calculate()
 
        ' 格式单元格.
        Dim ThisRange As Excel.Range
        ThisRange = Application.Cells(X, Y)
        ThisRange.NumberFormat = "0.0000%"
    End Sub

可以将上述代码与前文中相应的示例代码比较。最大的不同在于,添加了两个额外的位置参数,使得可以在任何位置放置输出的值。
定义对现有数据的链接
为功能区应用程序创建对话框时,需要创建对话框与合适的功能区控件的链接,否则两个元素将不同步并且应用程序会显示错误的数据。要创建链接,需要:

  • 从功能区中获取信息
  • 在功能区中设置信息
  • 在XML中定义需要的回调

创建链接的XML代码如下:

          <editBox id="Rate"
                   label="有效利率"
                   onChange="GetRateText"
                   getText="SetRateText"/>
          <dropDown id="Term"
                    label="期数"
                    getVisible="TermVisible"
                    getItemCount="TermCount"
                    getItemID="TermItemID"
                    getItemLabel="TermItemLabel"
                    onAction="GetSelectedTerm"
                    getSelectedItemIndex="SetSelectedTerm"/>
          <editBox id="Payment"
                   label="期初支付"
                   getVisible="PaymentVisible"
                   onChange="GetPaymentText"
                   getText="SetPaymentText"/>
          <editBox id="Amount"
                   getLabel="AmountLabel"
                   getVisible="AmountVisible"
                   onChange="GetAmountText"
                   getText="SetAmountText"/>

用于实现链接的属性取决于控件类型。大多数控件使用getText属性,从应用程序中提取信息并在控件中显示(例如,本例中的文本框);一些控件需要使用其它属性,例如本例中的getSelectedItemIndex属性。回调代码如下:

    Public Function SetRateText(ByVal control As Office.IRibbonControl) As String
        ' 返回Rate变量的当前值.
        Return Rate.ToString()
    End Function
 
    Public Function SetSelectedTerm(ByVal control As Office.IRibbonControl) As Int32
        ' 设置贷款项.
        If CalcType = "Loan" Then
            Select Case Term
                Case 10
                    Return 0
                Case 15
                    Return 1
                Case 20
                    Return 2
                Case 30
                    Return 3
            End Select
        End If
 
        ' 设置年金项.
        If CalcType = "Annuity" Then
            Select Case Term
                Case 5
                    Return 0
                Case 7
                    Return 1
                Case 10
                    Return 2
                Case 15
                    Return 3
                Case 20
                    Return 4
            End Select
        End If
 
        ' 提供缺省的返回值.
        Return 0
    End Function
 
    Public Function SetPaymentText(ByVal control As Office.IRibbonControl) As String
        ' 返回Payment变量的当前值.
        Return Payment.ToString()
    End Function
 
    Public Function SetAmountText(ByVal control As Office.IRibbonControl) As String
        ' 返回Amount变量的当前值.
        Return Amount.ToString()
    End Function

执行更丰富的计算
对话框启动器dialogBoxLauncher仅有一个onAction属性,因此任何计算的开始点都是该属性指向的方法DisplayRedundantCalc。当然,由于每个等式都不相同,因此都需要采用某种方式单独实现调用。

    Public Sub DisplayRedundantCalc(ByVal control As Office.IRibbonControl)
        ' 选择正确的过程.
        Select Case CalcType
            Case "Loan"
                PerformLoanRangeCalc()
            Case "Annuity"
                PerformAnnuityRangeCalc()
            Case "Effective Rate"
                PerformEffectiveRateRangeCalc()
        End Select
    End Sub

代码根据所选择的项目不同,调用不同的对话框计算程序。

    Private Sub PerformLoanRangeCalc()
        ' 创建对话框.
        Dim ThisSelection As LoanRangeSelection = New LoanRangeSelection()
 
        ' 在对话框中添加已存在的变量.
        ThisSelection.txtIntBeg.Text = Rate.ToString()
        ThisSelection.txtIntEnd.Text = Rate.ToString()
        ThisSelection.txtIntInc.Text = "1"
        ThisSelection.cbTermBeg.Text = Term.ToString()
        ThisSelection.cbTermEnd.Text = Term.ToString()
        ThisSelection.txtLoanAmt.Text = Amount.ToString()
 
        ' 显示对话框并且如果用户单击确定则处理数据.
        If ThisSelection.ShowDialog() = DialogResult.OK Then
            ' 转换数据值为Int32egers.
            Rate = Int32.Parse(ThisSelection.txtIntBeg.Text)
            Term = Int32.Parse(ThisSelection.cbTermBeg.Text)
            Amount = Int32.Parse(ThisSelection.txtLoanAmt.Text)
 
            ' 创建本地变量,包括计算数据.
            Dim EndRate As Int32 = Int32.Parse(ThisSelection.txtIntEnd.Text)
            Dim IncRate As Int32 = Int32.Parse(ThisSelection.txtIntInc.Text)
            Dim EndTerm As Int32 = Int32.Parse(ThisSelection.cbTermEnd.Text)
 
            ' 更新功能区中的值.
            ribbon.InvalidateControl("Rate")
            ribbon.InvalidateControl("Term")
            ribbon.InvalidateControl("Amount")
 
            ' 添加初始标题.
            Globals.ThisAddIn.SetHeading("利息", 1, 1)
 
            ' 执行计算.
            Dim i As Int32
            For i = Rate To EndRate
 
                ' 计算X和Y的位置值.
                Dim X As Int32 = i + 2 - Rate
                Dim Y As Int32 = 2
 
                ' 打印Int32erest利率.
                Globals.ThisAddIn.SetHeading(i.ToString() + "%", X, 1)
 
                ' 使用一系列if语句确定年设置.
                If Term = 10 And EndTerm >= 10 Then
                    ' 执行计算.
                    Globals.ThisAddIn.CalculatePMT(i, 10, Amount, X, Y)
 
                    ' 打印标题.
                    Globals.ThisAddIn.SetHeading("10年", 1, Y)
 
                    ' 如果已经使用则增加Y.
                    Y = Y + 1
                End If
 
                If Term <= 15 And EndTerm >= 15 Then
                    ' 执行计算.
                    Globals.ThisAddIn.CalculatePMT(i, 15, Amount, X, Y)
 
                    ' 打印标题.
                    Globals.ThisAddIn.SetHeading("15年", 1, Y)
 
                    ' 如果已经使用则增加Y.
                    Y = Y + 1
                End If
 
                If Term <= 20 And EndTerm >= 20 Then
                    ' 执行计算.
                    Globals.ThisAddIn.CalculatePMT(i, 20, Amount, X, Y)
 
                    ' 打印标题.
                    Globals.ThisAddIn.SetHeading("20年", 1, Y)
 
                    ' 如果已经使用则增加Y.
                    Y = Y + 1
                End If
 
                If Term <= 30 And EndTerm >= 30 Then
                    ' 执行计算.
                    Globals.ThisAddIn.CalculatePMT(i, 30, Amount, X, Y)
 
                    ' 打印标题.
                    Globals.ThisAddIn.SetHeading("30年", 1, Y)
 
                    ' 如果已经使用则增加Y.
                    Y = Y + 1
                End If
            Next
        End If
    End Sub
 
    Private Sub PerformAnnuityRangeCalc()
        ' 创建对话框.
        Dim ThisSelection As AnnuityRangeSelection = New AnnuityRangeSelection()
 
        ' 在对话框中添加已存在的变量.
        ThisSelection.txtIntBeg.Text = Rate.ToString()
        ThisSelection.txtIntEnd.Text = Rate.ToString()
        ThisSelection.txtIntInc.Text = "1"
        ThisSelection.cbTermBeg.Text = Term.ToString()
        ThisSelection.cbTermEnd.Text = Term.ToString()
        ThisSelection.txtLoanAmt.Text = Amount.ToString()
        ThisSelection.txtPayment.Text = Payment.ToString()
 
        ' 显示对话框并且如果用户单击确定则处理数据.
        If ThisSelection.ShowDialog() = DialogResult.OK Then
 
            ' 转换数据值为Int32egers.
            Rate = Int32.Parse(ThisSelection.txtIntBeg.Text)
            Term = Int32.Parse(ThisSelection.cbTermBeg.Text)
            Amount = Int32.Parse(ThisSelection.txtLoanAmt.Text)
            Payment = Int32.Parse(ThisSelection.txtPayment.Text)
 
            ' 创建本地变量以包含计算数据.
            Dim EndRate As Int32 = Int32.Parse(ThisSelection.txtIntEnd.Text)
            Dim IncRate As Int32 = Int32.Parse(ThisSelection.txtIntInc.Text)
            Dim EndTerm As Int32 = Int32.Parse(ThisSelection.cbTermEnd.Text)
 
            ' 更新功能区中的值.
            ribbon.InvalidateControl("Rate")
            ribbon.InvalidateControl("Term")
            ribbon.InvalidateControl("Amount")
            ribbon.InvalidateControl("Payment")
 
            ' 添加初始标题.
            Globals.ThisAddIn.SetHeading("利息", 1, 1)
 
            ' 执行计算.
            Dim i As Int32
            For i = Rate To EndRate
 
                ' 计算X和Y的位置值.
                Dim X As Int32 = i + 2 - Rate
                Dim Y As Int32 = 2
 
                ' 打印Int32erest利率.
                Globals.ThisAddIn.SetHeading(i.ToString() + "%", X, 1)
 
                ' 使用一系列if语句决定年设置.
                If Term = 5 And EndTerm >= 5 Then
                    ' 执行计算.
                    Globals.ThisAddIn.CalculateFV(i, 5, Amount, Payment, X, Y)
 
                    ' 打印标题.
                    Globals.ThisAddIn.SetHeading("5年", 1, Y)
 
                    ' 如果已经使用则增加Y.
                    Y = Y + 1
                End If
 
                If Term <= 7 And EndTerm >= 7 Then
                    ' 执行计算.
                    Globals.ThisAddIn.CalculateFV(i, 7, Amount, Payment, X, Y)
 
                    ' 打印标题.
                    Globals.ThisAddIn.SetHeading("7年", 1, Y)
 
                    ' 如果已经使用则增加Y.
                    Y = Y + 1
                End If
 
                If Term <= 10 And EndTerm >= 10 Then
                    ' 执行计算.
                    Globals.ThisAddIn.CalculateFV(i, 10, Amount, Payment, X, Y)
 
                    ' 打印标题.
                    Globals.ThisAddIn.SetHeading("10年", 1, Y)
 
                    ' 如果已经使用则增加Y.
                    Y = Y + 1
                End If
 
                If Term <= 15 And EndTerm >= 15 Then
                    ' 执行计算.
                    Globals.ThisAddIn.CalculateFV(i, 15, Amount, Payment, X, Y)
 
                    ' 打印标题.
                    Globals.ThisAddIn.SetHeading("15年", 1, Y)
 
                    ' 如果已经使用则增加Y.
                    Y = Y + 1
                End If
 
                If Term <= 20 And EndTerm >= 20 Then
                    ' 执行计算.
                    Globals.ThisAddIn.CalculateFV(i, 20, Amount, Payment, X, Y)
 
                    ' 打印标题.
                    Globals.ThisAddIn.SetHeading("20年", 1, Y)
 
                    ' 如果已经使用则增加Y.
                    Y = Y + 1
                End If
            Next
        End If
    End Sub
 
    Private Sub PerformEffectiveRateRangeCalc()
        ' 创建对话框.
        Dim ThisSelection As EffectiveRateRangeSelection = New EffectiveRateRangeSelection()
 
        ' 在对话框中添加已存在的变量.
        ThisSelection.txtIntBeg.Text = Rate.ToString()
        ThisSelection.txtIntEnd.Text = Rate.ToString()
        ThisSelection.txtIntInc.Text = "1"
 
        ' 显示对话框并且如果用户单击确定则处理数据.
        If ThisSelection.ShowDialog() = DialogResult.OK Then
 
            ' 转换数据值为Int32egers.
            Rate = Int32.Parse(ThisSelection.txtIntBeg.Text)
 
            ' 创建本地变量以包含计算数据.
            Dim EndRate As Int32 = Int32.Parse(ThisSelection.txtIntEnd.Text)
            Dim IncRate As Int32 = Int32.Parse(ThisSelection.txtIntInc.Text)
 
            ' 更新功能区中的值.
            ribbon.InvalidateControl("Rate")
 
            ' 添加初始标题.
            Globals.ThisAddIn.SetHeading("利息", 1, 1)
            Globals.ThisAddIn.SetHeading("有效利率", 1, 2)
 
            ' 执行计算.
            Dim i As Int32
            For i = Rate To EndRate
                ' 计算X和Y位置值.
                Dim X As Int32 = i + 2 - Rate
 
                ' 打印Int32erest利率.
                Globals.ThisAddIn.SetHeading(i.ToString() + "%", X, 1)
 
                ' 执行计算.
                Globals.ThisAddIn.CalculateEFFECT(i, X, 2)
            Next
        End If
    End Sub

考虑数据识别需求
对输出结果添加有意义的标题。当执行多重计算时,为使数据意义明确,必须提供标题。代码如下:

    Public Sub SetHeading(ByVal Heading As String, ByVal X As Int32, ByVal Y As Int32)
        ' 添加所需要的标题.
        Application.ActiveWindow.ActiveCell.Cells(X, Y) = Heading
    End Sub

现在,一切准备就绪。运行代码,在窗体中选择区域,输入相应数据,得到的输出结果如下图所示。
RibbonXApplicationSample25

相关文章

Page 5 of 44« First...34567...Last »