문제

Excel 2007 통합 문서 파일에서 사용자 지정 문서 속성을 만들고 채우는 프로그램을 만들었습니다.그러나 워크시트 셀에 이 속성의 값을 표시할 수 없었습니다.Word 2007에서는 "삽입 -> 빠른 부품 -> 필드..."를 선택하고 DocProperty 필드를 사용하여 문서의 사용자 정의 필드 값을 표시할 수 있습니다.그러나 Excel 2007에서는 유사한 기능을 찾지 못했습니다.

Excel 워크시트 셀에 사용자 정의 문서 속성 값을 표시하는 방법을 아는 사람이 있습니까?위에서 언급한 Word 2007 솔루션과 유사한 솔루션을 선호합니다.나는 이를 위해 매크로/사용자 정의 코드를 사용하지 않습니다.

도움이 되었습니까?

해결책

불행히도 사용자 정의 기능을 사용해야한다고 생각합니다. 통합 문서에 새 VBA 모듈을 추가 하고이 기능을 추가하십시오.

Function DocumentProperty(Property As String)
  Application.Volatile
  On Error GoTo NoDocumentPropertyDefined
  DocumentProperty = ActiveWorkbook.BuiltinDocumentProperties(Property)
  Exit Function
NoDocumentPropertyDefined:
  DocumentProperty = CVErr(xlErrValue)
End Function

전화 Application.Volatile 셀이 각 재 계산에 대해 업데이트되도록하여 문서 속성의 변경 사항을 선택할 수 있습니다.

다른 팁

Excel에서 이에 상응하는 작업은 수식을 통해 수행되며 코드 없이 문서 속성을 추출하는 것은 불가능하다고 생각합니다.문서 속성을 선택하는 기본 기능은 없습니다.(대안은 수식을 통해 액세스할 수 있는 통합 문서/워크시트 이름에 정보를 저장하는 것일 수 있습니다.)

VBA에서는 다음과 같은 함수를 만들어야 합니다.

Public Function CustomProperty(ByVal prop As String)

    CustomProperty = ActiveWorkbook.CustomDocumentProperties(prop)

End Function

그런 다음 다음을 사용하여 수식으로 호출합니다. =CustomProperties("PropertyName").

또 다른 미묘한 점이 있습니다.수식 종속성은 다른 셀에만 관련됩니다.이 수식은 사용자 정의 속성에 따라 달라집니다.다음과 관련된 기존 수식을 사용자 정의 속성으로 업데이트하는 경우 CustomProperty 자동으로 업데이트되지 않습니다.셀을 수동으로 다시 평가하거나 전체 통합 문서를 강제로 재계산해야 합니다.가장 좋은 방법은 함수를 일시적으로 만드는 것입니다. 즉, 셀이 변경될 때마다 수식이 다시 계산된다는 의미입니다. 하지만 이는 여전히 셀이 변경된 경우에만 업데이트를 받는다는 의미입니다.

셀 이름 이름 변경을 유용한 것으로 추출하려는 셀을 선택하십시오. "b1"에서 "project_number"까지. "고급 속성"열기 "사용자 정의"탭을 클릭하십시오. 새 속성의 이름을 입력하십시오. "내용 링크"를 클릭하십시오. "값"풀 다운 목록에서 셀 이름을 선택하십시오.

CERDIT를 가져갈 수 있으면 좋겠지 만 온라인에서 답을 찾았습니다.http://pdmadmin.com/2012/03/displaying-custom-property-values-in-excel-using-a-named-range/

명명 범위를 사용자 정의 속성에 연결할 수 있지만 사용자 정의 속성은 [첫 번째 셀의] 범위의 값을 반영합니다. 효과적으로 읽기 전용입니다. 셀 내용을 변경하여 속성을 업데이트 할 수는 있지만 다른 방법은 아닙니다.

나는 당신이 그것을 피하고 싶다는 것을 알고 있지만, 공식에서 속성 값을 사용하려면 사용자 정의 워크 시트 기능을 만듭니다 그렇게하려면.

나는 다른 사람들이 가진 것과 같은 문제를 경험했습니다. 그래서 나는 내가 어떻게 해결했는지 포괄적으로 다루려고 노력할 것입니다.

우선, 당신은 사용자 정의 또는 내장 속성에 넣은 모든 것을 얻고 "문제"셀을 이런 식으로 가리키는 기능을 작성하는 것 외에 다른 옵션이 없습니다.

=yourPropertyGettingFunctionName(PropertyName)

PropertyName은 셀에 값을 표시하려는 사용자 정의/내장 속성의 이름을 참조하는 문자열입니다.

기능은 다음과 같이 (이전에 제안 된대로) 작성할 수 있습니다.

Public Function StdProp(ByVal sPropName As String) As String
    Application.Volatile
    StdProp = ActiveWorkbook.BuiltinDocumentProperties(sPropName).Value
End Function

내장 재산의 경우 또는 다음과 같은 경우

Public Function UsrProp(ByVal sPropName As String) As String
    Application.Volatile
    On Error GoTo UndefinedProp
    UsrProp = ActiveWorkbook.CustomDocumentProperties(sPropName)
    GoTo Exit
UndefinedProp:
    UsrProp  = "n/a"
Exit:
End Function

이미 언급했듯이 Application.Volatile은 반자동 셀 내용물 업데이트를 허용합니다.

그러나 이것은 자체적으로 문제가됩니다. Excel 파일을 열 때마다 그러한 관계를 사용하는 모든 셀이 업데이트되고 파일을 종료 할 때 Excel은 업데이트 허가를 요청합니다. Excel 자체가했기 때문에 변경 사항을 소개했는지 여부를 도입했다면.

개발 그룹에서는 전복을 버전 제어 시스템으로 사용합니다. EXIT에서 실수로 "업데이트"를 누르면 SVN이이를 알아 차리고 다음에 변경 사항을 커밋하려면 Excel 파일이 팩에 포함됩니다.

그래서 나는 내가 필요로하는 모든 일을하기 위해 모든 것을 사용하고 동시에 내가 원하지 않는이 자기 업데이트 효과를 피하기로 결정했습니다.

즉, 특성 액세스 함수와 함께 명명 된 범위를 사용하는 것을 의미합니다. 오래된 파일이 새로운 요구에 대한 조항을 기대할 수 없다는 사실을 감안할 때이 기능을 썼습니다.

Private Function RangeAssign(sRange As String, sValue As String) As Integer
Dim rDest As Range
    If RangeCheck(sRange) Then
        Set rDest = Range(sRange)
    Else
        Set rDest = Application.InputBox(sMsg + vbCrLf + vbCrLf + _
            "Please, select a cell to get" + vbCrLf + _
            "the name " + sRange + " assigned", sCopyRight, Type:=8)
        rDest.Name = sRange
    End If

    rDest.Cells(1, 1).NumberFormat = "@"
    rDest.Cells(1, 1).Value = sValue

    RangeAssign = True

End Function

대상 셀을 올바르게 선택할 수 있습니다. 속성에 값을 할당 할 때 (내장 된 "저장된"저자 "라고 말하면) 명명 된 범위에 저장된 값을 업데이트하고 셀에 쓸 수 있습니다.

=Author

"저자"라는 범위를 정의하고 "A1"셀을 내장 속성 "저자"값으로 채우는 경우 자체 외부 추적 목적으로 업데이트해야합니다.

이 모든 것이 밤새 일어나지 않았습니다. 도움이 될 수 있기를 바랍니다.

나는 이것을 SharePoint 속성을 추출하는 데 사용했습니다 (Martin의 답변에 따라) :

Public Function DocumentProperty(Property As String)
    Application.Volatile
    On Error GoTo NoDocumentPropertyDefined

    DocumentProperty = ActiveWorkbook.ContentTypeProperties(Property).Value
Exit Function

NoDocumentPropertyDefined:
    DocumentProperty = CVErr(xlErrValue)
End Function
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top