2

我正在尝试将工作表函数“left”与“find”结合使用来确定 VBA 中的字符串变量。但是,excel 将 find 函数解释为 VBA 函数,这会在解析时产生错误消息。

在我的代码下面:

...
Else
    MSa = MSa & Left(Range("D22"), Find(".", Range("D22")) - 1) & " " & Range("D25").Value & "."
    Range("Q7").Value = MSa
End If
...

其中 MSa 是一个字符串。你能告诉我如何最好地解决这个问题吗?

提前谢谢了。

4

3 回答 3

5

简短的回答是使用Application.WorksheetFunction.Find. 但是我不会使用那个。参见下文。

所以在Sheet1上我进入abc.def单元格A1。
在另一个单元格中,我输入=LEFT(A1,FIND(".",A1)-1)并获取值abc

要在 VBA 中调用相同的函数,我会写

variable = Left(Sheet1.[A1],Application.WorksheetFunction.Find(".",Sheet1.[A1])-1)

不过,从 VBA 调用 Excel 工作表函数确实有一些缺点(调试起来更困难,速度也更慢)。最好使用本机 VBA 函数 InStr,它的工作原理与工作表函数 Find 非常相似。参数的顺序不同,但结果是一样的。所以我会写

variable = Left(Sheet1.[A1],InStr(Sheet1.[A1],".")-1)
于 2013-08-20T16:56:31.937 回答
1

为了使用工作表功能Find,您需要完全限定它,如下所示;

Application.WorksheetFunction.Find

使用Findon 它的 on 和 VBA 将假定它是一个 VBA 函数。也一样match

于 2013-08-20T16:46:00.147 回答
1

InStr 方法等效于工作表函数 Find,使用它:

MSa = MSa & Left(Range("D22"), InStr(Range("D22"), ".") - 1) & " " & Range("D25").Value & "."
于 2013-08-20T17:01:42.527 回答