我查看了整个 stack exchange,但没有找到我正在寻找的东西。我有一个详细的清单,上面列出了一些需要在不同的日期和间隔进行持续校准的项目,我想做的是制作一个 VBA/宏,这样我就可以更新任何一个特定项目的校准日期,而不必查看每个单独的条目或使用 =VLOOKUP()。到目前为止,我还没有可以调用程序的可靠方法,但我设想的是在一个单元格中写入项目的 ID#,在另一个单元格中写入新的校准到期日期,并在它们旁边有一个按钮,以便搜索 ID#,向右移动一列,并用新日期替换单元格上的文本。解释起来很简单,但考虑到我四个小时前才开始学习 VBA,这被证明是一个挑战。到目前为止,我玩弄了一些代码,但无济于事:
range("a1").Formula = "=CELL("address", INDEX(H:J, MATCH(L11,H:H, 0),2))"
ActiveCell.FormulaR1C1 = "=INDEX(R[-5]C[-9], 3, 2, )"
如果有人需要,我会提供更多信息或背景!
答案1
在公式中使用引号时,应该将其加倍:
Range("A1").Formula = "=CELL(""address"", INDEX(H:J, MATCH(L11,H:H, 0),2))"
ActiveCell.FormulaR1C1 = "=INDEX(R[-5]C[-9], 3, 2, )"
答案2
这样就非常接近了。您可以调整它以适合您的数据。注释掉的 MsgBox 命令可以删除,但对于调试来说很方便。
Sub SetCalDate()
'Set up variables
Dim ID, RowNum As Integer
Dim NewCalDate As Date
Dim IDNums As Range
'Initialize variables
ID = Range("A1").Value 'Assumes the ID to Find is in A1,
NewCalDate = Range("B1").Value 'and the NewCalDate is in B1.
'MsgBox NewCalDate
Set IDNums = Range("C1:C10") 'This is the range of ID's to be searched.
'You might need something like Set IDNums = Worksheets("Sheet3").Range("C1:C10")
'if the ID numbers are on a different sheet.
'Find the ID in IDNums
RowNum = Application.WorksheetFunction.Match(ID, IDNums, 0)
'MsgBox RowNum
Range("D" & RowNum) = NewCalDate 'Assumes the CalDates are in column D.
End Sub
如果要将宏分配给按钮,请先将代码放入新模块,然后创建一个按钮并按照说明将 SetCalDate() 宏分配给它在此帮助页面上。 祝你好运。