我正在尝试编写一个vba宏,它在一组单元格中插入一个Vlookup公式(应该在另一个图纸中查找值并将其粘贴在 C列中)制作成纸。这是我到目前为止的代码:
select * from at_table_temp t cross join table(as_read_xlsx.read(t.bb));
问题是,如何告诉宏它应该在特定的工作表中运行?
任何帮助将不胜感激。 提前谢谢!
答案 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在评论中指出这一点。)