gpt4 book ai didi

vba - Range 中的值未传递到 UDF 中的数组

转载 作者:行者123 更新时间:2023-12-04 21:57:24 24 4
gpt4 key购买 nike

每当我尝试在包含公式的范围上使用它时,我编写的以下函数都会返回“”。奇怪的是,当我测试 rngPhrase 返回的值时和 rngTextBlocks在即时窗口中,它返回正确的结果。

我可以通过附加 .Text 获得第一个范围的正确结果(而不是使用默认的 .value 甚至 .value2 )作为第一个范围,但这不适用于数组。

这里发生了什么,我该如何解决?

    Public Function SelectionReplacer(rngPhrase As Range, rngTextBlocks As Range) As String

Dim arr
Dim strTextBlocks As String
Dim strPhrase As String
Dim i As Integer, j As Integer

'set initial phrase (must be a single cell)
strPhrase = rngPhrase.Text

'Set text block array
arr = rngTextBlocks


For i = LBound(arr, 1) To UBound(arr, 1)
If InStr(1, strPhrase, arr(i, 1)) > 0 Then
SelectionReplacer = Replace(strPhrase, arr(i, 1), arr(i, 2))
End If
Next i

End Function

更新
输入示例
rngPhrase = Range("D34")此单元格中的值由返回字符串 "[Anrede] [FullName] verfügt über ein äußerst [Art1] und [Art2] Fachwissen, das [Gender1] stets effektiv und erfolgreich [Können1] konnte. [Können2]" 的 vlookup 函数计算
rngTextBlocks具有相似的函数,所有这些函数都具有由它们各自的 vlookup 函数返回的相似文本元素。

最佳答案

您只替换了一个文本,因此只替换了范围的最后一行。

您需要更改 strPhrase , 与 Replace然后将其分配给 SelectionReplacer .BTW,在 Replace 之前无需测试因为它只会在找到文本时发生! ;)

如果rngPhrase,我还添加了一个检查以正确退出该功能。不仅仅是一个单元格:

Public Function SelectionReplacer(rngPhrase As Range, rngTextBlocks As Range) As String
'(must be a single cell)
If rngPhrase.Cells.Count > 1 Then
SelectionReplacer = vbNullString
Exit Function
End If

Dim arr
Dim strTextBlocks As String
Dim strPhrase As String
Dim i As Integer, j As Integer

'set initial phrase
strPhrase = rngPhrase.Value

'Set text block array
arr = rngTextBlocks.Value

For i = LBound(arr, 1) To UBound(arr, 1)
strPhrase = Replace(strPhrase, arr(i, 1), arr(i, 2))
Next i
SelectionReplacer = strPhrase

End Function

关于vba - Range 中的值未传递到 UDF 中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41977066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com