Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Excel VBA中编写原始字符串?_Vba_Excel - Fatal编程技术网

如何在Excel VBA中编写原始字符串?

如何在Excel VBA中编写原始字符串?,vba,excel,Vba,Excel,我需要通过VBA在Excel工作表中编写一个公式,所以我通过“选择范围”并应用公式,但我的公式太长,并且包含很多双引号(“),因此要忽略双引号(“),我添加了两个双引号(“) 一些时间字符串按照我的意愿编写,或者一些时间由于双引号不匹配(“)字符串被更改,应用的公式不正确 在python中,我们在字符串之前编写r,其工作方式如下: print(r'hello\'s Sam.') hello\'s Sam 但是在Excel VBA中有没有办法编写这样一个原始字符串 公式如下 =IF(NO

我需要通过VBA在Excel工作表中编写一个公式,所以我通过“选择范围”并应用公式,但我的公式太长,并且包含很多双引号(“),因此要忽略双引号(“),我添加了两个双引号(“)

一些时间字符串按照我的意愿编写,或者一些时间由于双引号不匹配(“)字符串被更改,应用的公式不正确

在python中,我们在字符串之前编写r,其工作方式如下:

print(r'hello\'s Sam.')   

hello\'s Sam
但是在Excel VBA中有没有办法编写这样一个原始字符串

公式如下

=IF(NOT($E24=""),IF($Q24="0-10V(AI)","Direct (0-10V) = (0-100%)",IF($Q24="2-10V(AI)","Direct (2-10V) = (0-100%)",IF(OR($Q24="PT 1000",$Q24="NTC 20K"),"-50 to 150 Deg C","N/A"))),"")
我通过VBA应用它,如下所示

Sheet4.Range("R2:R50000").Formula = "=IF(NOT($E2=""" + """),IF($Q2=""" + "0-10V(AI)""" + ",""" + "Direct (0-10V) = (0-100%)""" + ",IF($Q2=""" + "2-10V(AI)""" + ",""" + "Direct (2-10V) = (0-100%)""" + ",IF(OR($Q2=""" + "PT 1000""" + ",$Q2=""" + "NTC 20K""" + "),""" + "-50 to 150 Deg C""" + ",""" + "N/A""" + "))),""" + """)"
只需添加一个引号(“),如下例所示: 公式:

VBA:


VBA中没有原始字符串的概念,但您可以使用单引号而不是双引号来编写公式,然后替换它们。您甚至可以制作一个简单的实用函数来完成此操作:

Function r(s As String, Optional QuoteSymbol As String = "'") As String
    r = Replace(s, QuoteSymbol, """")
End Function
然后,您的公式可以简单地插入为:

Sheet4.Range("R2:R50000").Formula = r("=IF(NOT($E2=''),IF($Q2='0-10V(AI)','Direct (0-10V) = (0-100%)',IF($Q2='2-10V(AI)','Direct (2-10V) = (0-100%)',IF(OR($Q2='PT 1000',$Q2='NTC 20K'),'-50 to 150 Deg C','N/A'))),'')")
如果您需要在最终公式中使用单引号,那么您可以向可选参数
QuoteSymbol


话虽如此,您似乎做了比需要更多的工作,因为在一个字符串中,任何两个连续的双引号都被一个双引号所取代。您不需要所有的连接来构建最终的字符串。

因为VBA中没有原始字符串的概念,所以将saw字符串放入可以解决此问题excel单元格,然后在公式中使用它,如

表4.范围(“R2:R50000”).公式=“=”和Cstr(表10.单元格(1,2).值)


下一次只更改单元格中的值,公式得到更新

以写入-而不是“wright”…@John Coleman I将此公式应用于R列中的sheet4(R2:R50000)公式是=如果(不是($E24=“”),如果($Q24=“0-10V(AI)”,“直接(0-10V)=(0-100%)”,如果($Q24=“2-10V(AI)”,“直接(2-10V)=(0-100%),“如果(或($Q24=“PT 1000)”,$Q24=“NTC 20K”),”-我和约翰·科尔曼用Excel VBA表格4.Range(“R2:R50000”)。公式=“=IF(非($E2=“”+”)、IF($Q2=“”)”+“0-10V(AI)”、“+”、“+”直接(0-10V)=(0-100%)、“+”、IF($Q2=“”+“2-10V(AI)”、“+”直接(2-10V)=(0-100%)、“+”、“+”、IF($Q2=“”、“+”直接(0-10V)”、“+”、“+”、“+”、“$NTC”)-50至150摄氏度(“+”,“+”不适用“+”,“+”)“有什么问题?代码似乎成功地将公式放在单元格中,并在需要的地方加上引号。插入的公式与要插入的公式有什么不同?请阅读。@John Coleman感谢您的回复我的formla在VBA中获得了成功,但这是我想在我的整个代码70-80类型中键入类似公式的一个示例,因此很难处理双引号,这就是我在excel VBA中寻找原始字符串函数的原因。@我感谢您的帮助和对函数的想法,它也很有用,但对于上述情况,单引号符号(')无法在excel@DineshPawar什么意思?我给出的代码没有尝试在Excel的公式中使用单引号。函数
r()
的整个要点是允许您在VBA中使用单引号(或您选择的任何其他符号)代替双引号
r()
用正确转义的双引号替换这些符号。我给出的将公式放入R列的代码在功能上与您的代码等效。
Function r(s As String, Optional QuoteSymbol As String = "'") As String
    r = Replace(s, QuoteSymbol, """")
End Function
Sheet4.Range("R2:R50000").Formula = r("=IF(NOT($E2=''),IF($Q2='0-10V(AI)','Direct (0-10V) = (0-100%)',IF($Q2='2-10V(AI)','Direct (2-10V) = (0-100%)',IF(OR($Q2='PT 1000',$Q2='NTC 20K'),'-50 to 150 Deg C','N/A'))),'')")