2012-06-28 25 views
0

我现在有这样的代码:如何将两个私人Worksheet_Change子集合到一个VBA中?

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim lastrow As Long 
    Dim rngList As Range 

    lastrow = Cells(Rows.Count, "A").End(xlUp).Row 

    Set rngList = Range("AB3").CurrentRegion 

    If Target.Cells.Count > 1 Then Exit Sub 

    On Error Resume Next 

    If Not Intersect(Target, Range("B18:B19")) Is Nothing Then ' user is in column-A 
     Target.Value = Application.WorksheetFunction.VLookup(Target.Value, rngList, 2, False) 
    End If 

    Set rngList = Nothing 
End Sub 

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim lastrow As Long 
Dim rngList As Range 

lastrow = Cells(Rows.Count, "A").End(xlUp).Row 

Set rngList = Range("AC3").CurrentRegion 

If Target.Cells.Count > 1 Then Exit Sub 

On Error Resume Next 

If Not Intersect(Target, Range("B10:B11")) Is Nothing Then ' user is in column-A 
    Target.Value = Application.WorksheetFunction.VLookup(Target.Value, rngList, 2, False) 
End If 

Set rngList = Nothing 

末次

我想将它们结合起来,这样我可以同时使用,但我不知道该怎么这样做没有冲突,任何帮助将不胜感激,谢谢。

+0

你的问题不是很清楚 - 你的意思是“我可以同时使用”?你希望这两者都在变化事件上运行?您希望能够在变更事件中选择其中的任何一项?在那种情况下,你如何选择一个或另一个? – assylias

+0

基本上,我有下拉目标的范围,然后将其右移(类别名称 - 类别值),我有大约8个不同的下拉列表,上面的代码只适用于一个。它通过点击一个单元格来工作,该单元格启动下拉菜单,然后当单元格中的值被选中时,代码将值右移到相应的值。 对不起,如果这是不明确的,我仍然试图抓住VBA一般 – UsmanBPD

+0

'目标'是触发变化的单元格。因此,您可以测试“目标=范围(”XXX“)”并采取相应措施,例如使用“选择案例”语句。 – assylias

回答

0

如果我理解正确,这应该做你试图做的伎俩:

 
Private Sub Worksheet_Change(ByVal Target As Range) 

    WorksheetChanged Target, Range("AC3").CurrentRegion, Range("B10:B11") 
    WorksheetChanged Target, Range("AB3").CurrentRegion, Range("B18:B19") 

End Sub 

Private Sub WorksheetChanged(ByVal Target As Range, ByVal rngList As Range, ByVal intersectRng As Range) 

    Dim lastrow As Long 

    lastrow = Cells(Rows.Count, "A").End(xlUp).Row 

    If Target.Cells.Count > 1 Then Exit Sub 

    On Error Resume Next 

    If Not Intersect(Target, intersectRng) Is Nothing Then ' user is in column-A 
     Target.Value = Application.WorksheetFunction.VLookup(Target.Value, rngList, 2, False) 
    End If 

    Set rngList = Nothing 
End Sub 

这里有一个私人函数获取范围作为参数。您可以随意调用此函数(尽管如果您在Worksheed_Change Sub中调用它太多,Excel可能会变得有点慢)。

+0

谢谢你,这是沿着正确的轨道!唯一的问题是第一个子程序给了我两个WorkSheetChanged()函数的错误(是那个正确的名称?),它会抛出一个错误,其内容如下:编译错误:预期= 我曾经看过,但没有任何东西普通的,任何想法?谢谢 – UsmanBPD

+0

看起来好像需要以=的形式在WorksheetChanged()之后,这就是我能辨别的所有 – UsmanBPD

+0

也许我们应该将函数更改为不返回任何内容的子函数。 – JackDMF

相关问题