Excel 试图更新现有的文本框,但得到一个“";“所需对象”;错误

Excel 试图更新现有的文本框,但得到一个“";“所需对象”;错误,excel,vba,Excel,Vba,我录制了一个宏,以开始更新文本框。不幸的是,正如您所知,录制宏不会设置变量 录制的宏显示: ActiveSheet.shapes.Range(Array("TextBox 8")).Select Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _ "Kroger Market 6 " & Chr(13) & "W/E P8 Week 4"

我录制了一个宏,以开始更新文本框。不幸的是,正如您所知,录制宏不会设置变量

录制的宏显示:

ActiveSheet.shapes.Range(Array("TextBox 8")).Select
Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _
  "Kroger Market 6 " & Chr(13) & "W/E P8 Week 4" & Chr(13) & "9/23/2020"
我尝试将其调整为:

With wsWeeklyDivision
    Dim EndDate As String
    EndDate = Left(Right(.Range("A4"), 24), 23)
End With

With wsFront
    Dim shapes As Variant
    shapes = shapes.Range(Array("TextBox 8"))
    With shapes
        .ShapeRange(1).TextFrame2.TextRange.Characters.Text = _
        "Kroger Market 6 " & Chr(13) & "Date Range" & Chr(13) & Format(Now(), "MM.DD.YY")
    End With
End With
我甚至将
shapes=shapes.Range(数组(“TextBox 8”))
更改为
Set shapes=shapes.Range(数组(“TextBox 8”))
,但我仍然得到一个对象所需的错误


我需要更改什么?

在进行对象指定时使用
设置

形状从未被限定

shapes=shapes.Range(数组(“文本框8”))

shapes.Range(数组(“文本框8”))
返回一个ShapeRange

With wsFront
    Dim ShapeRange As ShapeRange
    Set ShapeRange = .Shapes.Range(Array("TextBox 8"))
    
    Dim TextBox8 As Shape
    Set TextBox8 = ShapeRange.Item(1)
    
    With TextBox8.TextFrame2.TextRange.Characters
        .Text = "Kroger Market 6 " & Chr(13) & "Date Range" & Chr(13) & Format(Now(), "MM.DD.YY")
    End With
End With
仅当形状分组时,才需要使用形状标记

With wsFront
    Dim TextBox8 As Shape
    Set TextBox8 = .Shapes("TextBox 8")
    
    With TextBox8.TextFrame2.TextRange.Characters
        .Text = "Kroger Market 6 " & Chr(13) & "Date Range" & Chr(13) & Format(Now(), "MM.DD.YY")
    End With
End With
使用正确的类型声明变量可以更容易地编写代码。可以使用TypeName返回对象类型

使用类名或标准属性名时,请确保大小写匹配。T


将形状变暗为变体

在进行对象指定时使用
设置

形状从未被限定

shapes=shapes.Range(数组(“文本框8”))

shapes.Range(数组(“文本框8”))
返回一个ShapeRange

With wsFront
    Dim ShapeRange As ShapeRange
    Set ShapeRange = .Shapes.Range(Array("TextBox 8"))
    
    Dim TextBox8 As Shape
    Set TextBox8 = ShapeRange.Item(1)
    
    With TextBox8.TextFrame2.TextRange.Characters
        .Text = "Kroger Market 6 " & Chr(13) & "Date Range" & Chr(13) & Format(Now(), "MM.DD.YY")
    End With
End With
仅当形状分组时,才需要使用形状标记

With wsFront
    Dim TextBox8 As Shape
    Set TextBox8 = .Shapes("TextBox 8")
    
    With TextBox8.TextFrame2.TextRange.Characters
        .Text = "Kroger Market 6 " & Chr(13) & "Date Range" & Chr(13) & Format(Now(), "MM.DD.YY")
    End With
End With
使用正确的类型声明变量可以更容易地编写代码。可以使用TypeName返回对象类型

使用类名或标准属性名时,请确保大小写匹配。T


将形状变暗为变量

设置形状=activesheet.Shapes(“文本框8”)
?和
将形状变暗为形状
。使用名为
形状
的变量可能会导致问题,因为
形状
已经是内置集合。
设置形状=活动表。形状(“文本框8”)
?和
将形状变暗为形状
。使用名为
形状
的变量可能会导致问题,因为
形状
已经是一个内置集合。在第二个示例中,分配
TextBox8
时缺少
。除此之外,很好的回答指出了
形状
形状
@FunThomas谢谢@铁皮人谢谢!我确实尝试过使用
Set
,但你是对的,我将
形状
声明为
形状
,而不是
形状
。感谢您提供有关使用
TypeName
返回对象类型的提示。我以后肯定会用这个!但是,您是如何知道使用
项目(1)
来塑形的?我想我对如何确定形状是否分组感到困惑,特别是因为录制的宏声明
TextBox 8
是一个数组..@CDay血汗岁月
.Range()
表示它将返回一个很可能是一组值的值范围。将
Array()
传递到
Shapes.Range()
对象中,意味着您将获得这些命名形状的集合。项目也是任何收集的标准方法。类似地,
工作表(Array())
将返回
工作表的集合
@CDay您还可以通过名称引用ShapeRange集合中的特定形状。Fo示例:
wsFront.Shapes.Range(数组(“文本框8”、“文本框9”))).Item(“文本框8”)
在分配
TextBox8
时,您在第二个示例中缺少一个
集。除此之外,很好的回答指出了
形状
形状
@FunThomas谢谢@铁皮人谢谢!我确实尝试过使用
Set
,但你是对的,我将
形状
声明为
形状
,而不是
形状
。感谢您提供有关使用
TypeName
返回对象类型的提示。我以后肯定会用这个!但是,您是如何知道使用
项目(1)
来塑形的?我想我对如何确定形状是否分组感到困惑,特别是因为录制的宏声明
TextBox 8
是一个数组..@CDay血汗岁月
.Range()
表示它将返回一个很可能是一组值的值范围。将
Array()
传递到
Shapes.Range()
对象中,意味着您将获得这些命名形状的集合。项目也是任何收集的标准方法。类似地,
工作表(Array())
将返回
工作表的集合
@CDay您还可以通过名称引用ShapeRange集合中的特定形状。Fo示例:
wsFront.Shapes.Range(数组(“文本框8”、“文本框9”))).Item(“文本框8”)