获取文本框的值到单元格

时间:2014-02-10 09:18:40

标签: excel excel-vba vba

我有一个名为TextBox 1的文本框,其中包含段落。我使用名为Insert > Name > Define...的名称profile_reference来定义它。

在单元格上,我输入了公式=profile_reference,但我得到了值TextBox 1。我想要做的是获得该文本框的实际价值。这可能吗?

我正在使用PHP解析器从此excel文件中获取值,但它无法获取文本框的值,它只能获取单元格值。所以我试图将该文本框的值复制到一个单元格然后解析它。

1 个答案:

答案 0 :(得分:6)

您可以检索文本框的内容,但这不仅仅需要标准的Excel用户界面。

文本框是一个Shape对象,是Worksheet的Shapes集合的成员。将文本框插入工作表时,Excel会为其指定名称,例如“TextBox 1”。因此,您可以在VBA中引用包含文本框的Shape对象(例如)

Worksheets("Sheet1").Shapes("TextBox 1")

因为Shape对象可以包含各种不同的东西(例如图片或自选图形),所以在检索文本时会涉及​​更多的对象,属性和方法。所需的完整短语是

Worksheets("Sheet1").Shapes("TextBox 1").TextFrame.Characters.Text

以字符串形式传递文本框的内容。

但是,这要求您使用Excel指定的文本框的名称(即“TextBox 1”)。您添加了一个名为“profile_reference”的名称,该名称引用TextBox 1,那么如何使用您的名称而不是Excel创建的名称来获取文本框的内容?

名称是Name对象,它是Workbook Names集合的一部分。因此,您可以将您的特定Name对象称为(例如)

ActiveWorkbook.Names("profile_reference")

和“引用”对象的一部分(使用用户界面指定的位)是

ActiveWorkbook.Names("profile_reference").Value

Name对象的Value属性是Excel公式语法中的字符串,因此在您的情况下,此字符串为

'="TextBox 1"'

即。单引号内的位。这几乎是你想要的'TextBox 1'字符串。因此,使用您的名称获取文本框的内容需要一点VBA,例如:

Dim strTB As String
strTB = ActiveWorkbook.Names("profile_reference").Value
strTB = Mid(strTB, 3, Len(strTB) - 3) 'Strips unwanted  =" and  " chars from start/end
MsgBox Worksheets("Sheet1").Shapes(strTB).TextFrame.Characters.Text

我使用了一个消息框来显示文本框的内容。内容可以同样分配给工作表单元格。如果需要,您可以将其包装在一个简短的用户定义函数中(可能将您的名称作为其输入参数),为您提供一种方便的机制,将文本框的内容放入工作表单元格中。