根据在B列中单独的单元格的InStr搜索中显示的值,显示列O中一个单元格的值

时间:2013-04-27 16:46:28

标签: excel vba

我已经使用这个网站和其他人来启动和运行这个项目,但我已经碰到了一堵砖墙。我正在做的是从特定工作簿(ImportConvert.xlsx)导入(复制)列c - h并将它们粘贴到ControlBook.xlsm的列a-f中。然后我复制第三个工作簿(Clients.xlsx)的行-c并将这些列粘贴到ControlBook.xlsm的列m -o中。两者都在同一个工作表上。我能够远离我到目前为止阅读的教程,并感谢所有人的信息。我要完成的下一件事是使用O列中的每个值搜索工作表B列中的每个值,以查看列O中的值是否包含在B列中的字符串值中。当找到匹配项时,我想要列O中的值显示在列g。

当我执行代码时,它从头到尾处理,但不会在列g。

中显示该值

以下是代码:

Sub StartProcess()

Dim wbk As Workbook

    strDataFile = "C:\Documents and Settings\Administrator\Desktop\ImportConvert.xlsx"
    strMasterFile = "C:\Documents and Settings\Administrator\Desktop\ControlBook.xlsm"
    strClientFile = "C:\Documents and Settings\Administrator\Desktop\Clients.xlsx"

    Set wbk = Workbooks.Open(strDataFile)

        With wbk.Sheets("Data")
            Range("c:h").Copy
        End With


    Set wbk = Workbooks.Open(strMasterFile)

        With wbk.Sheets("Deposits")
            Range("a:f").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End With

        wbk.Save
        wbk.Close

    Set wbk = Workbooks.Open(strClientFile)

        With wbk.Sheets("ActivePayee")
            Range("a:c").Copy
        End With

    Set wbk = Workbooks.Open(strMasterFile)

        With wbk.Sheets("Clients")
            Range("m:o").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End With

Dim rngSub As Range
Dim rngSrch As Range

For Each rngSub In Range("o2:o1000")
    For Each rngSrch In Range("b2:b1000")
        If InStr(rngSrch, rngSub) > 0 Then
            rngSrch.Offset(, 5) = rngSub.Value
        End If
    Next
Next

End Sub

这不是最优雅的解决方案,但我想帮助的人是不耐烦的,现在就想要它(不考虑建造得当)。在他平静下来并学习更优雅的方式来建立这个项目后,我会回去。我只是想给这个家伙一些东西,让他不要那么恐慌。

我在VBA曝光率很低的情况下来到这里,但我熟悉通过PhP,mySQL等进行编程。我在90年代末和21世纪初期对VBA进行了摸索,但很长一段时间没有接触过VBA。

提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

您的所有Range(...)引荐都可能引用错误的Sheet。没有限定符Range本身就是Activesheet.Range

更改

With wbk.Sheets("Data")
    Range("c:h").Copy
End With

With wbk.Sheets("Data")
    .Range("c:h").Copy
End With

同样适用于Range

的所有其他用途

For Each rngSub In Range(...)

For Each rngSub In wrk.Worksheets("YourName").Range(...)