Vba 如何粘贴到表的第二列中?

Vba 如何粘贴到表的第二列中?,vba,ms-word,Vba,Ms Word,我正在为MicrosoftWord2007编写宏。宏应该创建一个nx2表,然后在每个单元格中插入一张选中的照片。相反,它会将每个单元格的两张照片放在第一列,而在第二列中一张也没有 With Application.ActiveDocument Dim myTable As Word.Table Set myRange = ActiveDocument.Content ActiveWindow.View.TableGridlines = True Set m

我正在为MicrosoftWord2007编写宏。宏应该创建一个nx2表,然后在每个单元格中插入一张选中的照片。相反,它会将每个单元格的两张照片放在第一列,而在第二列中一张也没有

With Application.ActiveDocument    
    Dim myTable As Word.Table
    Set myRange = ActiveDocument.Content
    ActiveWindow.View.TableGridlines = True
    Set myTable = .Tables.Add(Range:=myRange, NumRows:=Fix((Num / 2) + 0.5), NumColumns:=2)
        For I = 1 To Num
        oRow = Fix((I / 2) + 0.5) '
        If (I Mod 2) = 1 Then oCol = 1
        If (I Mod 2) = 0 Then oCol = 2
        myTable.Cell(oRow, oCol).Select
        Set pic = .InlineShapes.AddPicture(FileName:=sDir(I), LinkToFile:=False, SaveWithDocument:=True)
            With pic
            .LockAspectRatio = msoFalse
            .Height = InchesToPoints(2.25)
            .Width = InchesToPoints(3)
            End With
        Selection.Collapse
    Next
End With
这样做:

Dim tblCell as Word.Cell
因为为了可读性和智能感知,通常使用强类型变量更容易:

Set tblCell = myTable.Cell(oRow, oCol)
Set pic = tblCell.Range.InlineShapes.AddPicture(FileName:=sDir(I), LinkToFile:=False, SaveWithDocument:=True)
        With pic
        .LockAspectRatio = msoFalse
        .Height = InchesToPoints(2.25)
        .Width = InchesToPoints(3)
        End With
解释:

在调试过程中,您执行了以下操作:

我尝试将“Set pic
.InlineShapes.AddPicture…”替换为
Selection.TypeText(“HI”)

这应该是可行的,因为您直接使用
选项插入文本。但是,由于您仅对
ActiveDocument
进行了限定(您的代码以
和ActiveDocument
开头)


你最初使用的方法不起作用,这似乎很奇怪。当我在2010年这样做时,它只将所有图片放在第一个单元格中。

你做了什么来调试这个?逐行检查,特别是变量
I
Num
oCol
的值。我怀疑你会发现一个问题根据您的逻辑,这是一个不错的方法/etc。要调试此功能,我尝试在添加照片(正确为1和2)之前使用消息框确定oCol的值。我尝试将“Set pic.InlineShapes.AddPicture…结尾替换为”“Selection.TypeText(“HI”)。每行和每列中的每个单元格都有一个“HI”除此之外,我尝试将其更改为“Selection.TypeText(sDir(I)),并且它具有指向先前在sub中选择的照片的适当路径。这很有效。杰出的非常感谢你。我还没有接受过任何关于这方面的正式培训或教育,所以我必须做一些关于“强类型价值观”的研究。啊,不用担心。我的意思是使用更多的变量,而不是更少的变量——特别是用来表示要在代码中使用的对象/文件/等的部分。除了易于阅读之外,您还可以在VBE的“局部变量”窗口中检查它们,该窗口将在列表/树视图中向您公开它们的所有属性。因此,在调试时它非常有用。在我开始调试自己的问题之前,我不知道你的问题的答案,这可能会让你大吃一惊:如果这已经回答了这个问题,那就考虑“接受”这个答案吧。
.InlineShapes.AddPicture(...