VBA에서 Pictures 클래스의 Formula 속성을 변수로 설정할 수없는 문제 (아마도 Excel 버그)

3774 단어 VBA
shape로 설정된 수식을 VBA로 변경하고 싶을 때가 있어 시행착오한 결과를 메모로 남깁니다.

자신으로서의 결론



shape의 Formula 프로퍼티를 설정하는 경우는 하드 코딩(내용을 코드내에 직접 기술하는 것)으로 기술한다. 변수로의 설정은 불가.
확실히 Excel 버그입니다.
※2020/07/04 추기:코멘트란에서의 지적에 의해, 변수에 Formula를 대입할 때, 말미에 반각 스페이스가 들어 버리는 버그가 원인이었습니다. 대입 후 trim 함수로 반각 스페이스를 제거하는 것으로 해결했습니다.

환경



OS:Windows 10 Home
제품:Microsoft 365
※상기는 자택 PC로, 직장 PC(Office 2016)에서도 같은 증상이었기 때문에 환경 기인이 아닐 것입니다.

시도한 코드



일의 소재는 직접 낼 수 없기 때문에, 상황을 재현한 것으로 설명합니다.
아래 그림과 같이 Sheet1에 있는 오렌지색 이미지에 수식(=Sheet3!A1:B2)이 설정되어 있습니다.


코드를 나타냅니다.
10~12행째로 Shape의 Formula를 설정하고 있습니다.
코드내 코멘트와 같이, 수식을 하드 코딩한 부분은 문제 없었습니다만, 변수 fml에 대입해 설정하면(자) 에러 1004가 발생했습니다.

testShapeFormula.bas
Sub testShapeFormula()
    Dim shp As Shape
    Dim fml As Variant
    Set ash = ActiveSheet
    'For Each shp In ash.Shapes
        'shpNm = shp.Name
        fml = ash.Shapes(1).DrawingObject.Formula       ' shapeの数式取得
        fml = "=" & Replace(fml, "Sheet2", "Sheet1")    ' 数式の編集
        With ash.Shapes(1).DrawingObject
            .Formula = "=Sheet3!A1:B2"   ' shapeに数式を設定(1) OK!
            .Formula = "=Sheet1!A1:B2"   ' shapeに数式を設定(2) OK!
            .Formula = fml               ' shapeに数式を設定(3) NG... エラー1004
        End With
    'Next

End Sub



실제 작업 소재에는 여러 shape가 있으므로 for each도 시도하고 있습니다. 어쩌면 for each가 나쁘다? ! 라고 하는 관점에서도 디버그 했으므로, 코드내에서는 for each가 코멘트 아웃 되고 있습니다.

다행히 이번 개수에서는 수식의 참조 범위는 변하지 않기 때문에 하드 코딩에서도 빠듯하게 대응 가능한 내용입니다만, 범위가 가변적인 것이라면 꽤 엄격한 것은 아닐까 생각합니다.
Shape의 Formula를 VBA로 편집은 보통으로 사용하고 있으면 거의 조우하지 않는 사건이기 때문에 버그가 방치되고 있는 것일까? 제발 YO MS 씨!
그래, 이걸 할 수 있어? ? 등 츳코미 있으면 부탁드립니다 m (__) m

좋은 웹페이지 즐겨찾기