【发布时间】:2020-03-16 14:27:28
【问题描述】:
我再次修改了 VBA。现在,当我运行它时,我什么也得不到。它不会“崩溃”,但不会给出预期的答案。
我从网上的一个VBA示例中复制了这个,在解释了函数之后它说:
现在可以使用自定义函数/公式,如下所示:
"=Nth_Occurrence($B$1:$B$22,"Harry",3,0,1)" (忽略“语音标记”)
它没有解释=Nth_Occurrence 等之前的代码中必须有什么。这应该是一个变量(变量还是字符串)?或者别的什么。
它也没有解释如何定义“Range_Look”,所以我猜测:set Range_Look = range($K$4:$K$41)(我的范围与示例相反)。
最后,如果我将 Set Range_Look = Range("K4:K34") 更改为 Range_Look = ActiveSheet.Range("K4:K31"),我会收到“运行时错误 91:对象变量或未设置块变量”,还是我需要两者?
众所周知,我知道自己真的很痛苦,但这让我发疯了。我也知道这不是实现最终结果的唯一方法,但它(我认为)非常优雅,或者如果我可以让它工作的话。
请某人(巫师?),让我摆脱痛苦。
Sub Macro2()
'
' Macro2 Macro
'
' Keyboard Shortcut: Ctrl+q
Dim bankacctA As String 'Finds the "Check Year" bankacct
Dim bankacctB As String 'This will be the "New" generated year
Input_Year = InputBox(Prompt:="What is the Year you wish to Add - Enter in format yyyy", _
Title:="ENTER THE YEAR", Default:="No Year Entered")
If IsNumeric(Input_Year) = False Then
Exit Sub
Else
End If
Short_Input_Year = Right(Input_Year, 2) 'The last 2 digits of the Input Year
Check_Year = Input_Year - 1
Short_Check_Year = Right(Check_Year, 2) 'The last 2 digits of the Check Year
Next_Year = (Input_Year + 1)
bankacctA = ("bankacct" & Short_Check_Year) & ".xlsx" 'Finds the "Check Year" bankacct
Dim Range_Look As Range
Dim a As Variant
Windows("Savings Details.xlsm").Activate
Sheets("Table Sort").Select
Set Range_Look = Range("K4:K34") 'The worksheet has already been selected
a = Nth_Occurrence(Range_Look, CStr(bankacctA), 2, 1, -1)
ActiveCell.Offset(0, -1).Value = a
End Sub
Function Nth_Occurrence(Range_Look As Range, Find_It As String, Occurrence As Long, Offset_Row As Long, Offset_Col As Long)
Dim lCount As Long
Dim rFound As Range
Set rFound = Range_Look.Cells(1, 1)
For lCount = 1 To Occurrence
Set rFound = Range_Look.Find(Find_It, rFound, xlValues, xlPart)
Next lCount
Nth_Occurrence = rFound.Offset(Offset_Row, Offset_Col)
End Function
【问题讨论】:
-
范围应该是
Nth_Occurrence的参数。 -
对不起,大本。正如我所说,我正在努力使用 vba,但不想放弃。您是否认为在代码中,Activecell.value = NthOccurrence("k4:k36", etc. 或者您是说在函数中“Range_Look”应该在 Nth_Occurrence(??
-
我也知道我在 Activecell.Value = etc 的末尾错过了一个“)”......
-
没有。现在
Nth_Occurrence有 3 个参数:Find_It As String, Occurrence As Long, Offset_Row As Long。它应该有一个额外的参数,这将是有问题的范围。 -
好的,试过了。现在在代码行上,我得到“通过 ref 参数类型不匹配”