2014-09-18 1 views
-1

지금은 모든 이제 다음 몇 가지 버그와 함께 잠시 동안이 코드를 사용하고 :기본 교체 링크 된 오브젝트 소스 - 엑셀/PPT VBA

Sub UpdateSheet() Dim sld As Slide 
     Dim sh As Shape 
     Dim strNms As String 
     Dim intI As Integer 
     Dim strNewPath 
     Dim ExcelFile 
     Dim exl As Object 
     Set exl = CreateObject("Excel.Application") 

     'Open a dialog box to promt for the new source file. 
     ExcelFile = exl.Application.GetOpenFilename(, , "Select Excel File") 
     For Each sld In ActivePresentation.Slides 
      For Each sh In sld.Shapes 
       If sh.Type = msoLinkedOLEObject Then 
        With sh.LinkFormat 
         strNms = .SourceFullName 
         intI = InStr(1, strNms, "!") 
         strNewPath = ExcelFile & Mid(strNms, intI, Len(strNms) - intI + 1) 
         .SourceFullName = strNewPath 
        End With 
       End If 
      Next sh 
     Next sld 
     ActivePresentation.UpdateLinks 
    End Sub 

문제는, 연결된 개체도 내에서 섹션을 포함한다 [MyDocument.xlsm] 차트 1.

위의 코드는!까지 문자열을 모두 변경하지만 대괄호 안에있는 섹션도 변경하지 않습니다.

해당 섹션이나 더 나은 코드를 루프하는 방법에 대한 권장 사항은 무엇입니까?

미리 감사드립니다.

+1

당신은 * 마지막 * 출력 * 초기 * 문자열 입력의 예를 제공하고 원하는 수 있습니까? –

+1

초기 문자열 입력은 "c : /mydocuments/folder/Source1.xlsm! Sheet1 [Source1.xlsm] Chart1" 새 출력은 다음과 같습니다. "c : /mydocuments/folder/Source2.xlsm! Sheet1 [Source2.xlsm ] Chart1 " 그게 당신이 묻는거야? – GregdeLima

+0

"Source1"을 "Source2"로 '바꾸기'할 수 없습니까? –

답변

1

초기 문자열 입력이 될 것 "C :! /mydocuments/folder/Source1.xlsm 시트 1은 [Source1.xlsm] Chart1의"새 출력은 다음과 같습니다 "C :! /mydocuments/folder/Source2.xlsm Sheet1의 [

:

여기 enter image description here

는 예제 코드입니다 : Source2.xlsm] Chart1의 "

나는 그냥 Replace 기능을 사용할 수 있어야한다고 생각합니다

Dim initialName as String 
Dim newName as String 
Dim strReplace as String 
Dim strReplacement as String 

initialName = "c:/mydocuments/folder/Source1.xlsm!Sheet1[Source1.xlsm]Chart1" 
strReplace = "Source1" 
strReplacement = "Source2" 
newName = Replace(initialName, strReplace, strReplacement) 

MsgBox newName 

귀하가하려는 의도가 무엇인지 분명하지 않습니다. 그러나 이것은 당신의 과정이 될해야합니다.

  1. 내가이 코드에서 strNms 생각 (원래 문자열을 결정
  2. )을 (를 교체 할는 것입니다 해당 문자열의 어떤 부분 strReplace결정이 입니다. 항상 "소스 1"또는 "소스"& n 여기서 n은 정수 값일 수 있습니다. 정수는 항상 한 자릿수가 될 수 있습니까? 아니면 더 길 수 있습니까? 문제를 해결하는 방법에 차이가 있습니다.
  3. 대체품은 (strReplacement)입니다. 항상 "이전 이름에 하나 추가 하시겠습니까?" 아니면 뭔가 다른 것일까? 당신이이를 결정하면
  4. , 당신은 단순히 수행

    .SourceFullName = Replace(strNms, strReplace, strReplacement)

+0

Gotcha, 나는 네가하는 것을보고있다. 그러나 이것은 파일 이름을 변경하는 것일뿐, 선택 항목을 기반으로 한 전체 경로가 아닙니다.이 코드를 기존 코드로 빌드하는 방법을 찾을 수는 있지만, 100 % 긍정적이지는 않습니다. – GregdeLima

+0

무엇? 당신은 예제 입력과 원하는 출력을 나타 냈습니다. 이 함수는 여러분이 요청한 ** 정확히 ** 입력을 출력으로 변환합니다. 이것이 올바르지 않으면 무엇을하려고하는지 명확히하십시오. –

+0

어떻게해야 할 지 모르겠습니까? –

관련 문제