【问题标题】:get selected cell in table powerpoint 2007 vb.net在表格 powerpoint 2007 vb.net 中获取选定的单元格
【发布时间】:2013-07-18 07:04:07
【问题描述】:

我需要获取表格的选定单元格。

我尝试了以下代码

Set oTbl = .ShapeRange(1).Table
For x = 1 To oTbl.Rows.Count
    For y = 1 To oTbl.Columns.Count
        If oTbl.Cell(x, y).Selected Then
            With oTbl.Cell(x, y).Shape
                .Fill.ForeColor.RGB = RGB(255, 0, 0)
                .Fill.Visible = True
            End With
        End If
    Next
Next

如果您使用的是 vba,这可以正常工作,但是我使用 vb.net 创建了一个 vsto,它使用下面的代码为整个表格着色

Dim oShape As PowerPoint.Shape = Nothing
    Dim oTable As PowerPoint.Table

    With Globals.ThisAddIn.Application.ActiveWindow.Selection

        For Each oShape In .ShapeRange
            oShape.Select()
            Exit For
        Next

        oTable = oShape.Table

        Dim i As Integer = 0
        Dim j As Integer = 0

        For i = 1 To oTable.Rows.Count
            For j = 1 To oTable.Columns.Count
                If oTable.Cell(i, j).Selected = True Then
                    With oTable.Cell(i, j).Shape
                        .Fill.ForeColor.RGB = RGB(255, 0, 0)
                        .Fill.Visible = Microsoft.Office.Core.MsoTriState.msoTrue
                    End With
                End If
            Next
        Next

    End With

请帮忙

谢谢

乐华M

【问题讨论】:

  • 您可能想要描述您遇到的问题。你没有给我们任何关于出了什么问题的暗示。但对于初学者来说,看起来你的逻辑是错误的。 For/Next 循环选择幻灯片上的第一个形状并退出。它可能会或可能不会给您留下对所选形状的活动引用,如果当前所选形状不是表格,您的代码将在 oTable=oShape.Table 处失败
  • 您好史蒂夫,我将选择一张桌子,请您将 Dim i 和 j 中的代码作为整数。请注意,此代码只是从按钮运行演示。稍后会处理它是否是一张桌子。逻辑很好,运行良好,只需将 vba 中的初始代码用于 powerpoint,然后将 vb.net vsto 中的第二个代码用于 powerpoint,您会发现不同之处
  • 您的第一个代码块For Each oShape In .ShapeRange ... 更改了选择。您正在选择整个形状。之前选择了什么并不重要,因为你在代码中改变了选择,所以它当然会选择整个表格。

标签: vb.net macros powerpoint visual-studio-macros


【解决方案1】:

这适用于 VBA;我不使用 .Net,所以对此无能为力。

Sub TableTest()

    Dim oSh As Shape
    Dim oTbl As Table
    Dim lRow As Long ' your i
    Dim lCol As Long ' your j
    Set oSh = ActiveWindow.Selection.ShapeRange(1)
    Set oTbl = oSh.Table

    With oTbl
        For lRow = 1 To .Rows.Count
            For lCol = 1 To .Columns.Count
                If .Cell(lRow, lCol).Selected Then
                    With .Cell(lRow, lCol).Shape
                        .Fill.ForeColor.RGB = RGB(255, 0, 0)
                        .Fill.Visible = True
                    End With
                End If
            Next
        Next
    End With

End Sub

【讨论】:

  • 嗨,史蒂夫,是的,这是使用 VBA 工作的,前面提到过,但我想在 vb.net 中使用它
  • 它可能在 VB.NET 中被破坏了......我不知道。由于我不使用它,因此我无法为您提供帮助。对不起。还有其他人吗?
【解决方案2】:

您在 VB.NET 中的第一个代码块,更改了选择:

For Each oShape In .ShapeRange
    oShape.Select()
    Exit For
Next

包含整个表格并且是选择的一部分的形状正在被此块重新选择 -- 这会导致在代码开头选择整个形状和表格。

删除这块代码,其余的应该可以工作。

【讨论】:

    猜你喜欢
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多