提问人:sunotherman 提问时间:9/26/2013 最后编辑:pnutssunotherman 更新时间:9/11/2015 访问量:1102
从word调用VBA excel宏以粘贴基于word中下拉列表更新的表格
Call VBA excel macro from word to paste a table that updates based on drop-down list in word
问:
这是一个很好的例子。首先,我今天开始学习 VBA,所以要温柔。因此,我在 EXCEL 2007 中使用了这个 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
答:
0赞
sam092
9/26/2013
#1
您的意思是要从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。
评论
0赞
sunotherman
9/26/2013
非常感谢您的回答。这是我尝试做的一部分但是,我仍然需要能够从 WORD 中的下拉菜单中进行选择。根据从 WORD 下拉列表中选择的值,EXCEL 将识别该选择,Excel 中的表格将更新,然后复制到 Word 文档。谢谢!
0赞
sam092
9/26/2013
如果要将参数传递给 Excel,可以使用 Excel 中的子例程 should take an argumentexcel.Run "test2", arg
评论