【问题标题】:The following code returns error 1004以下代码返回错误 1004
【发布时间】:2015-07-22 20:36:30
【问题描述】:

我正在尝试使用代码上的工作表名称来选择范围。我有37张,我不想写代码37次。

Sub relatorio()
    Dim ws As Worksheet, GI As Integer, J As Integer
    J = 0
    For Each ws In ActiveWorkbook.Worksheets
        J = J + 1
        If ws.Name = "Brasil" Then
            i = (8 * 0) + 4 And GI = (13 * 0) + 271
        End If
        If ws.Name <> "Dados" Then

            'the error occur in the next line.
            Worksheets(ws.Name).Shapes.Range(Array("TRI")).Select
            Selection.Formula = "=Dados!a2"
            Selection.ShapeRange.TextFrame2.TextRange.Font.Name = "Calibri"
            Selection.ShapeRange.TextFrame2.TextRange.Font.Size = 9

        End If
    Next

End Sub

我不知道该怎么办

【问题讨论】:

    标签: excel vba selection worksheet


    【解决方案1】:

    Worksheets(ws.Name). 可以替换为ws.
    留给你:

    ws.Shapes.Range(Array("TRI")).Select
    

    工作表上是否有一个名为“TRI”的形状出错,或者工作表本身是否隐藏?

    为了避免表格被隐藏时出错,并避免选择每个形状,我建议这样做:

    with ws.Shapes.Range(Array("TRI")).Select
        .Formula = "=Dados!a2"
        .ShapeRange.TextFrame2.TextRange.Font.Name = "Calibri"
        .ShapeRange.TextFrame2.TextRange.Font.Size = 9
    end with
    

    【讨论】:

    • 是的,形状被命名为 TRI
    【解决方案2】:

    你的颂歌中发生了一些事情。

    首先,一行:

    i = (8 * 0) + 4 And GI = (13 * 0) + 271
    

    ...很可能没有按照您的意愿行事。它就像现在一样作为孤立的布尔标准工作。如果您尝试将值分配给 iGI,最好将其保留在两行。

    i = (8 * 0) + 4
    GI = (13 * 0) + 271
    

    接下来就是使用ws。一旦你将它从Worksheets collectionFor Each...Next Statement 分配给Worksheet object,你就可以直接使用它。您不需要使用它的名称作为参考点。

    Sub relatorio()
        Dim ws As Worksheet, GI As Integer, J As Integer
        J = 0
        For Each ws In ActiveWorkbook.Worksheets
            with ws
                J = J + 1
                If .Name = "Brasil" Then
                    i = (8 * 0) + 4        'not at all clear what you are trying to do here
                    GI = (13 * 0) + 271    'not at all clear what you are trying to do here
                End If
                If .Name <> "Dados" Then
    
                    'the error occur in the next line.
                    'the recorded code for selecting a shape object goes overboard; this is all you should require
                    with .Shapes("TRI")
                        .Formula = "=Dados!a2"
                        .ShapeRange.TextFrame2.TextRange.Font.Name = "Calibri"
                        .ShapeRange.TextFrame2.TextRange.Font.Size = 9
                    end with
                End If
            end with
        Next ws
    
    End Sub
    

    【讨论】:

    • 谢谢。如何让每个ws中的公式变化。
    • J = 0 For Each ws In ActiveWorkbook.Worksheets with ws J = J + 1 If .Name = "Brasil" Then i = (8 * 0) + 4 GI = (13 * 0) + 271 End If If .Name "Dados" Then with .Shapes("TRI") .Formula = "=Dados!a(i)" '我希望 i 在每个 ws 中改变 .ShapeRange.TextFrame2.TextRange.Font .Name = "Calibri" .ShapeRange.TextFrame2.TextRange.Font.Size = 9
    猜你喜欢
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2011-12-04
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    相关资源
    最近更新 更多