0

我已经使用这个网站和其他网站来启动和运行这个项目,但我遇到了障碍。我正在做的是从特定工作簿 (ImportConvert.xlsx) 导入(复制)列 c - h 并将它们粘贴到 ControlBook.xlsm 的列 a - f 中。然后我复制第三个工作簿 (Clients.xlsx) 的 a -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 年代末和 2000 年代初摸索过 VBA,但很长时间没有接触过 VBA。

提前感谢您的任何帮助。

4

1 回答 1

0

您所有的Range(...)引用可能都引用了错误Sheet的 s。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(...)
于 2013-04-27T18:51:26.467 回答