Vba 将字符串转换为word宏中的双精度字符串

Vba 将字符串转换为word宏中的双精度字符串,vba,ms-word,Vba,Ms Word,我正在尝试为Word 2013创建一个宏,该宏执行以下操作:该宏应捕获Word表中某个单元格的值,然后添加另一个值并将结果粘贴到同一表的另一个单元格中 到目前为止,我的代码是: Sub prueba() Dim a As String, b As String, c As String Dim entero1 As Double, entero2 As Double Dim resultado As Double Dim tabla1 As Table Set tabla1 = Acti

我正在尝试为Word 2013创建一个宏,该宏执行以下操作:该宏应捕获Word表中某个单元格的值,然后添加另一个值并将结果粘贴到同一表的另一个单元格中

到目前为止,我的代码是:

Sub prueba()
Dim a As String, b As String, c As String

Dim entero1 As Double, entero2 As Double

Dim resultado As Double

Dim tabla1 As Table
Set tabla1 = ActiveDocument.Tables(1)

a = tabla1.Cell(Row:=1, Column:=3).Range
entero1 = CDbl(a)
End Sub
但是当我运行它时,我得到一个错误13

要评估错误,请添加以下两行以验证在“a”中获得的数据类型是否为字符串

MsgBox (TypeName(a))
MsgBox (a)
我得到了以下信息

我相信CDbl函数并没有完成字符串到double的转换,因为当他们看到链有一个小正方形时,不需要擦除它来实现转换


非常感谢您的帮助。

仅提取
范围的数字部分的一种方法是使用
Val
功能,例如

entero1 = Val(a)
例如,如果字符串
a
包含
123.23XYZ4567
,则
Val(a)
将返回数字
123.23


这将确保在
范围结束时获得的非数字字符被删除。

仅提取
范围的数字部分的一种方法是使用
Val
函数,例如

entero1 = Val(a)
例如,如果字符串
a
包含
123.23XYZ4567
,则
Val(a)
将返回数字
123.23


这将确保您在
范围结束时获得的非数字字符被删除。

YowE3K提供的答案很优雅,我投了赞成票。有关进一步资料:

“小正方形”是单元格结束标记,它是
cell.Range.Text
的一部分(
.Text
是返回范围对象不合适时返回的默认属性)

要实际删除单元格结束标记(
Chr(13)&Chr(7)
),可以使用以下方法:

CDbl(替换$(Selection.Range.Cells(1.Range.Text,Chr(13)和Chr(7),vbNullString))


这种方法的一个可能的优点是,如果您只需要数字字符,它可以提供更好的机会捕获错误

YowE3K提供的答案很优雅,我投了赞成票。有关进一步资料:

“小正方形”是单元格结束标记,它是
cell.Range.Text
的一部分(
.Text
是返回范围对象不合适时返回的默认属性)

要实际删除单元格结束标记(
Chr(13)&Chr(7)
),可以使用以下方法:

CDbl(替换$(Selection.Range.Cells(1.Range.Text,Chr(13)和Chr(7),vbNullString))


这种方法的一个可能的优点是,如果您只需要数字字符,它可以提供更好的机会捕获错误

尝试使用
Val(a)
-这将忽略字符串的非数字部分。而不是.Range尝试使用。Value@YowE3K谢谢你的选择,我使用val()函数,我做到了。请不要将你的答案移到一个答案上,以将问题标记为answered@DavidG. 单词
单元格
对象没有
属性。(在我愿意提交一个建议将
Val
作为解决方案的答案之前,我决定最好用谷歌看看是否有比
Range
更好的属性来获取数据,而且似乎没有)。试着使用
Val(a)
-应忽略字符串的非数字部分。而不是范围。请尝试使用。Value@YowE3K谢谢你的选择,我使用val()函数,我做到了。请不要将你的答案移到一个答案上,以将问题标记为answered@DavidG. 单词
单元格
对象没有
属性。(在我愿意提交一份建议将
Val
作为解决方案的答案之前,我决定最好用谷歌来看看是否有比
Range
更好的属性来获取数据,而且似乎没有。)