从word调用VBA excel宏以粘贴根据word中的下拉列表更新的表

从word调用VBA excel宏以粘贴根据word中的下拉列表更新的表,excel,vba,ms-word,ms-office,Excel,Vba,Ms Word,Ms Office,这是一个好的。首先,我今天开始学习VBA,所以要温柔。因此,我在Excel2007中有一个vba宏,它根据用户从3个下拉菜单中的选择自动隐藏/显示表中的行。仅供参考,该表会根据用户的选择隐藏不需要的行,从而从包含所有可能选择的主表自动更新现在我想把这个问题提升到另一个层次。我希望能够从WORD 2007调用宏,以便将表复制到所需位置的WORD文档中。为了实现这一点,下拉菜单必须位于word文档中,EXCEL宏必须从word文档中“读取”所选值以构建表格。换句话说,用户将永远看不到EXCEL部分,

这是一个好的。首先,我今天开始学习VBA,所以要温柔。因此,我在Excel2007中有一个vba宏,它根据用户从3个下拉菜单中的选择自动隐藏/显示表中的行。仅供参考,该表会根据用户的选择隐藏不需要的行,从而从包含所有可能选择的主表自动更新

现在我想把这个问题提升到另一个层次。我希望能够从WORD 2007调用宏,以便将表复制到所需位置的WORD文档中。为了实现这一点,下拉菜单必须位于word文档中,EXCEL宏必须从word文档中“读取”所选值以构建表格。换句话说,用户将永远看不到EXCEL部分,并将根据下拉菜单中的选择在word文档中获取一个表。

我插入了构建表的excel宏。最终结果是,驱动IF语句的变量C1、C2和C3将是WORD下拉菜单中的变量

  Sub Sequence()

    Application.ScreenUpdating = False

    ActiveSheet.Cells.EntireRow.Hidden = False

    If Range("C2").Value = 2 Then
        Rows("48:67").Hidden = True
    Else
        Rows("48:67").Hidden = False
    End If

    If Range("C3").Value = 2 Then
        Rows("6:7").Hidden = True
    Else
        Rows("6:7").Hidden = False
    End If

    If Range("C1").Value = 1 Then

        Rows("9:12").Hidden = True
        Rows("14:17").Hidden = True
        Rows("19:22").Hidden = True
        Rows("24:27").Hidden = True
        Rows("29:47").Hidden = True
        Rows("48:51").Hidden = True
        Rows("53:56").Hidden = True
        Rows("58:61").Hidden = True
        Rows("63:66").Hidden = True

        j = 1
        k = -2

        For i = 6 To 67
            If Rows(i).Hidden = False Then

                Range("A" & i) = j
                j = j + 1
                Range("B" & i) = k
                k = k + 1
            End If

        Next i

    End If

    If Range("C1").Value = 2 Then

        Rows("9").Hidden = True
        Rows("11").Hidden = True
        Rows("13").Hidden = True
        Rows("15").Hidden = True
        Rows("17").Hidden = True
        Rows("19").Hidden = True
        Rows("21").Hidden = True
        Rows("23").Hidden = True
        Rows("25").Hidden = True
        Rows("27").Hidden = True
        Rows("29:31").Hidden = True
        Rows("33:35").Hidden = True
        Rows("37:39").Hidden = True
        Rows("41:43").Hidden = True
        Rows("45:47").Hidden = True
        Rows("48:51").Hidden = True
        Rows("53:56").Hidden = True
        Rows("58:61").Hidden = True
        Rows("63:66").Hidden = True

        j = 1
        k = -2

        For i = 6 To 67
            If Rows(i).Hidden = False Then

                Range("A" & i) = j
                j = j + 1
                Range("B" & i) = k
                k = k + 1
            End If

        Next i

    End If

    If Range("C1").Value = 3 Then

        Rows("9").Hidden = True
        Rows("11").Hidden = True
        Rows("13").Hidden = True
        Rows("15").Hidden = True
        Rows("17").Hidden = True
        Rows("19").Hidden = True
        Rows("21").Hidden = True
        Rows("23").Hidden = True
        Rows("25").Hidden = True
        Rows("27").Hidden = True
        Rows("29").Hidden = True
        Rows("31").Hidden = True
        Rows("33").Hidden = True
        Rows("35").Hidden = True
        Rows("37").Hidden = True
        Rows("39").Hidden = True
        Rows("41").Hidden = True
        Rows("43").Hidden = True
        Rows("45").Hidden = True
        Rows("47").Hidden = True
        Rows("48:50").Hidden = True
        Rows("52:54").Hidden = True
        Rows("56:58").Hidden = True
        Rows("60:62").Hidden = True
        Rows("64:66").Hidden = True

        j = 1
        k = -2

        For i = 6 To 67
            If Rows(i).Hidden = False Then

                Range("A" & i) = j
                j = j + 1
                Range("B" & i) = k
                k = k + 1
            End If

        Next i

    End If

    If Range("C1").Value = 4 Then

        j = 1
        k = -2

        For i = 6 To 67
            If Rows(i).Hidden = False Then

                Range("A" & i) = j
                j = j + 1
                Range("B" & i) = k
                k = k + 1
            End If

        Next i

    End If

    Range("A5:D67").Copy

    Application.ScreenUpdating = True

   End Sub

您的意思是要从Word调用Excel中的宏吗? 在这种情况下,您可以在Word中执行此操作:

Sub excel()
    Dim excel As Object
    Dim wb As Object
    Dim str As String
    Set excel = CreateObject("Excel.Application")
    Set wb = excel.workbooks.Open("D:\Profiles\scklam\Desktop\Book2.xls")
    'Run the macro you want
    excel.Run "test2"
    str = wb.sheets(1).Range("A1")
    Selection.TypeText (str)
    wb.Save
    wb.Close
    Set wb = Nothing
    Set excel = Nothing
End Sub

在本例中,我在excel中执行一些操作,然后将单元格的值复制回Word。

两条建议。首先,这里没有人介意读你的代码。第二,把你的问题分成几段——我不太清楚你在问什么。非常感谢你的回答。这是我尝试做的一部分,但是,我仍然需要能够从WORD中的下拉菜单中进行选择。根据从WORD中的下拉列表中选择的值,EXCEL将识别该选择,EXCEL中的表格将被更新,然后复制到WORD文档中。谢谢如果要将参数传递给excel,可以使用
excel.Run“test2”,arg
excel中的子例程应采用参数