我一直在使用此代码一段时间,偶尔出现一些错误:
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.
上面的代码,将字符串全部更改为!,但也不会更改括号内的部分。
有关如何循环该部分或任何更好的代码的任何建议?
提前致谢!
答案 0 :(得分:1)
初始字符串输入将是" c:/mydocuments/folder/Source1.xlsm!Sheet1 [Source1.xlsm] Chart1"新输出将是:" c:/mydocuments/folder/Source2.xlsm!Sheet1 [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
在您的情况下,您打算做什么并不完全清楚。但这应该是你的过程:
strNms
。strReplace
)。是总是" Source1"或是它"来源" &安培; n 其中 n 可能是任何整数值?这个整数的长度是一位数还是更长?这些会对您解决问题的方式产生影响。strReplacement
)。是始终"在之前的名称中加一个?"或者它可能是别的什么? 一旦确定了这些,那么您只需执行以下操作:
.SourceFullName = Replace(strNms, strReplace, strReplacement)