如何将宏指定给Excel中的表列?

时间:2017-08-24 02:38:51

标签: excel vba excel-vba

目前我正在创建一个从表列中读取数据的宏,资产号。数据是通过下拉菜单通过另一个表格DieMaster中的另一个表格的数据验证获得的。

然后执行索引和匹配以从DieMaster中查找匹配的数据并将其插入到Description列中。

此外,在获取数据后,表格列将作为值进行复制和粘贴以仅获取数据。这样,公式不会减慢过滤搜索的速度。

这就是我的想法。

Sub convert()

Dim osh As Worksheet
Set osh = ActiveSheet
osh.Range("ProjectEntry[Description]").Formula = "=IF(ISNA(INDEX(DieMaster,MATCH(B4,DieMaster[Asset No],FALSE),2)),"""",INDEX(DieMaster,MATCH(B4,DieMaster[Asset No],FALSE),2))"
osh.Range("ProjectEntry[Description]").Copy
osh.Range("ProjectEntry[Description]").PasteSpecial xlPasteValues

End Sub

我测试了宏,它运行得很好。但是我现在遇到的问题是尝试将宏分配给Asset No列。我的计划是让它在通过前面提到的下拉菜单在Asset No列中的单元格中选择一个值时,它会自动显示数据以供描述。

由于我无法使用传统方法将宏分配给列,是否有替代方法?

1 个答案:

答案 0 :(得分:0)

您可以使用Worksheet_Change事件来完成此操作:

Private Sub Worksheet_Change(Target as Range)

If Not Intersect(Target, Me.ListObjects("ProjectEntry").ListColumns("AssetNo").DataBodyRange) Is Nothing Then 

     With Me.Range("ProjectEntry[Description]") 
        .Formula = "=IF(ISNA(INDEX(DieMaster,MATCH(B4,DieMaster[Asset No],FALSE),2)),"""",INDEX(DieMaster,MATCH(B4,DieMaster[Asset No],FALSE),2))"
        .Value = .Value
     End With

End If

End Sub

我的语法可能略有偏差(因为我不在我的普通电脑上),但它会让你足够近以自行调整。