Vba 将公式给定的单元格值声明为字符串

Vba 将公式给定的单元格值声明为字符串,vba,excel,Vba,Excel,您好,我有一个在单元格中显示值的公式,但是我不能在VBA代码中将该单元格的值声明为字符串,因为它不是“真实”值,而是基于公式的动态值。如何将该值用作字符串?有没有办法通过VBA将公式给出的结果转换为字符串 这是单元格I1中的公式:=IFERROR(VLOOKUP(J3,REVIEWERS!A:C,3,0),“”) 我试图用以下代码将I1中的值声明为字符串: Public list As Worksheet Public bsawt as worksheet Sub BSAW_Export() D

您好,我有一个在单元格中显示值的公式,但是我不能在VBA代码中将该单元格的值声明为字符串,因为它不是“真实”值,而是基于公式的动态值。如何将该值用作字符串?有没有办法通过VBA将公式给出的结果转换为字符串

这是单元格I1中的公式:
=IFERROR(VLOOKUP(J3,REVIEWERS!A:C,3,0),“”)

我试图用以下代码将I1中的值声明为字符串:

Public list As Worksheet
Public bsawt as worksheet
Sub BSAW_Export()
Dim ReviewerID As String

    Set list = Sheets("LIST")
    Set bsawt = Sheets("BSAW_TABLE")
    ReviewerID = list.Range("I1").Value

    lastrow = list.Cells(Rows.Count, "E").End(xlUp).Row
    For x = 2 To lastrow

        If bsawt.Range("E" & x).Value <> " error" Then bsawt.Range("F" & x).Value = ReviewerID

    Next x

End Sub
作为工作表公开列表
公共工作表
副BSAW_出口()
将审阅者ID设置为字符串
设置列表=图纸(“列表”)
设置bsawt=板材(“BSAW_表”)
ReviewerID=列表范围(“I1”).值
lastrow=list.Cells(Rows.Count,“E”).End(xlUp).Row
对于x=2到最后一行
如果bsawt.Range(“E”&x).Value“error”,则bsawt.Range(“F”&x).Value=ReviewerID
下一个x
端接头

试试CStr功能

作为工作表公开列表
公共工作表
副BSAW_出口()
将审阅者ID设置为字符串
设置列表=图纸(“列表”)
设置bsawt=板材(“BSAW_表”)
ReviewerID=CStr(列表范围(“I1”).值)
lastrow=list.Cells(Rows.Count,“E”).End(xlUp).Row
对于x=2到最后一行
如果bsawt.Range(“E”&x).Value“error”,则bsawt.Range(“F”&x).Value=ReviewerID
下一个x
端接头

试试CStr功能

作为工作表公开列表
公共工作表
副BSAW_出口()
将审阅者ID设置为字符串
设置列表=图纸(“列表”)
设置bsawt=板材(“BSAW_表”)
ReviewerID=CStr(列表范围(“I1”).值)
lastrow=list.Cells(Rows.Count,“E”).End(xlUp).Row
对于x=2到最后一行
如果bsawt.Range(“E”&x).Value“error”,则bsawt.Range(“F”&x).Value=ReviewerID
下一个x
端接头

最简单的方法是使用
.Text
属性

ReviewerID = list.Range("I1").Text

最简单的方法是使用
.Text
属性

ReviewerID = list.Range("I1").Text

无VBA时

将公式输出转换为文本的常用方法是:

=TEXT(IFERROR(VLOOKUP(J3,REVIEWERS!A:C, 3, 0),""),"General")

如果您有特定的文本格式,如日期或货币,则只需在不使用VBA的情况下替换“常规”

将公式输出转换为文本的常用方法是:

=TEXT(IFERROR(VLOOKUP(J3,REVIEWERS!A:C, 3, 0),""),"General")

如果您有特定的文本格式,如日期或货币,则只需替换“常规”

我不确定是否理解。您的代码将
ReviewerID
设置为值,而不是单元格
I1
的公式。另外,您已经将变量声明为
字符串
,因此该变量中的任何值都将是
字符串
。那么问题在哪里?我不确定我是否理解。您的代码将
ReviewerID
设置为值,而不是单元格
I1
的公式。另外,您已经将变量声明为
字符串
,因此该变量中的任何值都将是
字符串
。那么问题出在哪里呢?不,代码运行正常,但它没有填充bsawt列中的单元格。您确定这个bsawt.Range(“E”&x).值“error”起作用了吗?As.Text从单元格中读取字符串。虽然我认为存在一些问题,因为即使建议的解决方案看起来正确,但都不起作用。我必须假设问题出在bsawt.Range(“E”&x).Value“error”或没有值可指定为。Text将读取字符串,据我所知,这是最简单的方法,因此存在.Text属性。您是否在行后放入Debug.Print以检查是否满足条件?好的,我算出了,lastrow=list.Cells(Rows.Count,“E”).End(xlUp)。Row指的是“list”表,而不是“BSAWT”表,因此循环没有任何单元格可循环。否则,您的建议使用。文本有效,谢谢!不,代码运行正常,但它没有填充bsawt列中的单元格。您确定这个bsawt.Range(“E”&x).值“error”正在工作吗?As.Text从单元格中读取字符串。虽然我认为存在一些问题,因为即使建议的解决方案看起来正确,但都不起作用。我必须假设问题出在bsawt.Range(“E”&x).Value“error”或没有值可指定为。Text将读取字符串,据我所知,这是最简单的方法,因此存在.Text属性。您是否在行后放入Debug.Print以检查是否满足条件?好的,我算出了,lastrow=list.Cells(Rows.Count,“E”).End(xlUp)。Row指的是“list”表,而不是“BSAWT”表,因此循环没有任何单元格可循环。否则,您的建议使用。文本有效,谢谢!谢谢,这一个也很有效,但我使用了@QHarr的解决方案,因为它更简单。我不想把公式弄乱,因为有些同事可能会吓坏呵呵。谢谢你,这一个也很有效,但我使用了@QHarr的解决方案,因为它更简单。我不想把公式弄乱,因为有些同事可能会吓坏呵呵。