VBA InStr始终返回0

时间:2014-08-19 07:28:54

标签: excel vba excel-vba

我正在使用Excel 2010并尝试创建一个函数,该函数将替换工作表中的部分链接,具体取决于用户输入。更具体我试图替换链接以匹配用户Dropbox位置。

这是我到目前为止的代码

Private Sub CommandButton1_Click()

Dim DropboxFolder As String
Dim SearchFor As String
Dim SearchPos As Integer

SearchFor = "Dropbox"

With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Show
On Error Resume Next
DropboxFolder = .SelectedItems(1)
For Each theHyperLink In ActiveSheet.Hyperlinks
  SearchPos = InStr(0, SearchFor, theHyperLink.Address, vbBinaryCompare)
  theHyperLink.Address = DropboxFolder
  Next
Err.Clear
On Error GoTo 0
End With

End Sub

我已尝试调试代码,并在

添加了断点
SearchPos = InStr(0, SearchFor, theHyperLink.Address, vbBinaryCompare) 

SearchFor为"Dropbox",TheHyperLink.Address为"..\Dropbox\Salgdanmarks Salgsakademi\1\Ny Microsoft Word Document.docx"

但SearchPos设置为0

我做错了什么?

1 个答案:

答案 0 :(得分:6)

我意识到评论是暂时的,所以我把它作为答案。这对未来的访问者也有帮助。

Instr的语法是

InStr([start, ]string1, string2[, compare])

InStr函数语法包含以下参数:

  1. 开始(可选)。用于设置每个搜索的起始位置的数字表达式。如果省略,则从第一个字符位置开始搜索。如果start包含Null,则会发生错误。如果指定了compare,则需要start参数。
  2. string1 (必填)。字符串表达被搜索
  3. string2 (必填)。字符串表达寻求
  4. 比较(可选)。指定字符串比较的类型。如果compare为Null,则会发生错误。如果省略compare,则Option Compare设置确定比较类型。指定有效的LCID(LocaleID)以在比较中使用特定于语言环境的规则
  5. 因此,在您的情况下,您需要撤消变量。

    SearchPos = InStr(1, theHyperLink.Address, SearchFor, vbTextCompare)