首页 > 解决方案 > VBA 从 Shapes("Textbox 1") 复制所有文本并将其放在一个范围内

问题描述

我有一个“形状”文本框(TextBox 1),其中包含如下所示的 SQL 查询。

Select
*
From
Table1
Union
Select
*
From
Table2

可以编辑此查询,这意味着文本框中的值可以更改。如果我录制一个宏,在其中选择文本框和全选,然后将文本粘贴到Range("A1")中,它看起来如下所示。

Sub Test_1()

    ActiveSheet.Shapes.Range(Array("TextBox 1")).Select
    Application.CutCopyMode = False
    Range("A1").Select
    ActiveSheet.Paste

End Sub

这将输出以下内容

> Row_Column    Text
>     A1           Select
>     A2           *
>     A3          From
>     A4          Table1
>     A5          Union
>     A6          Select
>     A7          *
>     A8          From
>     A9          Table2

但是,如果我将文本更改为以下内容。

Select
    *
    From
    Table1
    Union
    Select
    *
    From
    Table2
Union
Select
    *
    From
    Table3

宏不会复制在文本框中添加的额外代码行。

如何从形状文本框中选择所有内容并将复制的文本放入 A 列?我不希望所有文本都放在一个单元格中,因为我需要将文本分开,如输出示例中所示。

标签: sqlexcelvbatextbox

解决方案


这是一种替代方法,它拆分形状内的文本,将其分配给一个数组,然后将其传输到您的工作表...

Sub test()

    Dim arrText() As String

    arrText() = Split(ActiveSheet.Shapes("TextBox 1").TextFrame.Characters.Text, vbLf)

    Range("A1").Resize(UBound(arrText) + 1).Value = Application.Transpose(arrText)

End Sub

推荐阅读