在worksheet_change中选择目标表

时间:2016-08-30 13:10:16

标签: excel-vba macros vba excel

我正在尝试编写一个vba宏,它在一组单元格中插入一个Vlookup公式(应该在另一个图纸中查找值并将其粘贴在 C列中)制作成纸。这是我到目前为止的代码:

select * from at_table_temp t cross join table(as_read_xlsx.read(t.bb));

问题是,如何告诉宏它应该在特定的工作表中运行?

任何帮助将不胜感激。 提前谢谢!

3 个答案:

答案 0 :(得分:2)

与@ShaiRado一样,您的事件代码应该在Worksheet模块中运行。如果要检索对工作表的引用或该工作表的属性(例如名称),则可以使用Parent范围的Target属性。例如,在您的代码中,它将如下所示:

Private Sub worksheet_change(ByVal target As Range)

Dim thisRow As Integer

target.Range = Hoja4.Columns("C")

Dim wsTarget As Worksheet

Set wsTarget = Range.Parent
...

如果您使用Workbook级事件处理程序检查Workbook任何工作表的更改,则目标工作表将被烘焙到事件签名中:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    'Sh is the worksheet that has Target i.e the range that was changed
End Sub

答案 1 :(得分:0)

嗨,有很多方法可以做到这一点。

以下是列出的几种方式=)

    Sheets("Sheet1").Select
  ' Your Code Goes Here

    Sub test1()
    sheetlist = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5")
    For i = LBound(sheetlist) To UBound(sheetlist)
    Worksheets(sheetlist(i)).Activate
    ' Your Code Goes Here
Next
End Sub

        Sub test1() 

            With Worksheets("Sheet1") 
 ' Your Code Goes Here
                End With 


        End Sub 

我希望这有助于一些:)

此致

丹尼尔

答案 2 :(得分:0)

考虑更改代码以使其正常工作:

Private Sub worksheet_change(ByVal Target As Range)

    'Was a value in column A changed?
    If Target.Column = 1 Then

        'Enter the formula in column C (Offset from column A by 2 columns) of Target sheet.
        'Use R1C1 notation as I find it easier to write in VBA.
        'RC[2] - this Row, Column 2.
        'R1C1:R500C8 - Row 1, Column 1 to Row 500, Column 8 ($A$1:$H$500).
        Target.Offset(, 2).FormulaR1C1 = "=VLOOKUP(RC2,Personal!R1C1:R500C8,2,FALSE)"
    End If

End Sub

如果在A栏中输入值,则会将公式添加到C列。
A4中的值将在C4中给出该公式:=VLOOKUP($B4,Personal!$A$1:$H$500,2,FALSE)

原始代码的一些指示:
target.Range = Hoja4.Columns("C") - 将Target.Range设置为您刚输入文本的单元格。我很确定你无法将其改为别的东西。

Range("B" & thisRow).Formula - 由于您未指定工作表,因此这将始终作用于活动工作表。尽管如此,由于代码是从Worksheet_Change事件触发的,因此您可以非常确定自己是否在正确的工作表上。

Else: Exit Do - IF...ELSE...END IF块必须始终以END IF结尾。 Exit Do用于退出DO...LOOP,但您未在代码中启动或结束,因此如果代码尚未查找End If,则代码会出错

我认为原始代码中的VLOOKUP公式应写为:
"=VLOOKUP(B" & ThisRow & ",Personal!$A$1:$H$500,2,FALSE)"

您的代码会粘贴=vlookup(B & thisRow,Personal!$A$1:$H$500,2,false)而不是=VLOOKUP(B1,Personal!$A$1:$H$500,2,FALSE)(@Shai在评论中指出这一点。)