默认替换链接对象源 - Excel / PPT VBA

时间:2014-09-18 17:07:44

标签: excel vba excel-vba powerpoint powerpoint-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] Chart 1.

上面的代码,将字符串全部更改为!,但也不会更改括号内的部分。

有关如何循环该部分或任何更好的代码的任何建议?

提前致谢!

1 个答案:

答案 0 :(得分:1)

  

初始字符串输入将是" c:/mydocuments/folder/Source1.xlsm!Sheet1 [Source1.xlsm] Chart1"新输出将是:" c:/mydocuments/folder/Source2.xlsm!Sheet1 [Source2.xlsm] Chart1"

我认为您应该只能使用Replace函数:

enter image description here

以下是示例代码:

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)。是总是" Source1"或是它"来源" &安培; n 其中 n 可能是任何整数值?这个整数的长度是一位数还是更长?这些会对您解决问题的方式产生影响。
  3. 确定替换内容strReplacement)。是始终"在之前的名称中加一个?"或者它可能是别的什么?
  4. 一旦确定了这些,那么您只需执行以下操作:

    .SourceFullName = Replace(strNms, strReplace, strReplacement)