获取文本框的值到单元格

kev*_*ada 1 excel vba excel-vba

我有一个名为TextBox 1包含段落的文本框.我用名称(Insert > Name > Define...)调用它来定义它profile_reference.

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

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

小智 6

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

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

Worksheets("Sheet1").Shapes("TextBox 1")
Run Code Online (Sandbox Code Playgroud)

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

Worksheets("Sheet1").Shapes("TextBox 1").TextFrame.Characters.Text
Run Code Online (Sandbox Code Playgroud)

它将文本框的内容作为String传递.

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

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

ActiveWorkbook.Names("profile_reference")
Run Code Online (Sandbox Code Playgroud)

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

ActiveWorkbook.Names("profile_reference").Value
Run Code Online (Sandbox Code Playgroud)

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

'="TextBox 1"'
Run Code Online (Sandbox Code Playgroud)

即单引号内的位.这几乎是你想要的'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
Run Code Online (Sandbox Code Playgroud)

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