【问题标题】:VBA Code to Search closed workbook for a match based off an Input Box and pull entire row to Active WorkbookVBA 代码基于输入框搜索已关闭工作簿的匹配项并将整行拉到活动工作簿
【发布时间】:2016-11-18 15:40:30
【问题描述】:

四处搜索并发现一些关于 VBA 导入已关闭工作簿的第一张工作表的线程,我正在尝试在已关闭工作簿的工作表中搜索已使用输入框键入的设置单词。一旦找到该值,就可以拉出整行并粘贴到第二个处于活动状态的工作簿中。

以下是我一直在努力的代码,任何帮助将不胜感激。

    Dim srcWorkbook As Workbook
    Dim destWorkbook As Workbook
    Dim srcWorksheet As Worksheet
    Dim destWorksheet As Worksheet
    Dim SearchRange As Range
    Dim destPath As String
    Dim destname As String
    Dim destsheet As String
    Set srcWorkbook = ActiveWorkbook
    Set srcWorksheet = ActiveSheet
    Dim vnt_Input As String

    vnt_Input = Application.InputBox("Please Enter Client Name", "Client Name")

    destPath = "C:\test\"
    destname = "Test2.xlsm"
    destsheet = "Sheet1"

    On Error Resume Next
    Set destWorkbook = Workbooks(destname)
    If Err.Number <> 0 Then
    Err.Clear
    Set wbTarget = Workbooks.Open(destPath & destname)
    CloseIt = True
    End If

    For Each c In Range("A2:W100").Cells

    If InStr(c, "vnt_Input") > 0 Then

    c.EntireRow.Copy
    destWorkbook.Activate
    destWorkbook.Sheets(1).Range("A" & Rows.Count).End(xlUp).Offset     (1)     .EntireRow.Select

    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,SkipBlanks:= _
    False, Transpose:=False
srcWorkbook.Activate

亲切的问候,

【问题讨论】:

    标签: excel macros vba


    【解决方案1】:

    您需要进行一些更改。请参阅下面的完整代码。我将评论更改:

    Dim srcWorkbook As Workbook
        Dim destWorkbook As Workbook
        Dim srcWorksheet As Worksheet
        Dim destWorksheet As Worksheet
        Dim SearchRange As Range
        Dim destPath As String
        Dim destname As String
        Dim destsheet As String
        Set srcWorkbook = ActiveWorkbook
        Set srcWorksheet = ActiveSheet
        Dim vnt_Input As String
    
        vnt_Input = Application.InputBox("Please Enter Client Name", "Client Name")
    
        destPath = "C:\test\"
        destname = "Quick Test.xlsm"
        destsheet = "Sheet1"
    
        On Error Resume Next
        Set destWorkbook = ThisWorkbook
        If Err.Number <> 0 Then
        Err.Clear
        Set wbTarget = Workbooks.Open(destPath & destname)
        CloseIt = True
        End If
    
        For Each c In wbTarget.Sheets("Companies").Range("A2:W100") 'No need for the .Cells here
    
           If InStr(c, vnt_Input) > 0 Then 'vnt_Input is a variable that holds a string, so you can't put quotes around it, or it will search the string for "vnt_Input"
    
              c.EntireRow.Copy
              destWorkbook.Sheets("Master").Range("A" & Rows.Count).End(xlUp).Offset(1,0).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,SkipBlanks:= _
        False, Transpose:=False 'Please don't use Select and Activate. There is almost never a need for it.
           End if
        Next c
    

    【讨论】:

    • Kyle 感谢您的快速回复!,我已经做出了您突出显示的更改,宏运行但不会在工作簿上产生任何结果。结果需要从“主”表(表 1)的第 5 行开始复制
    • 你应该拿出On Error Resume Next再试一次。该行将掩盖任何错误并使调试更加困难。上面的代码应该可以工作。
    • 我已删除 On Error Resume Next 仍会循环但未产生任何结果,以澄清我希望从中提取结果的工作簿称为 Quick Test.xlsm 和将结果复制到的工作簿测试2.xlsm。两者都位于同一个文件夹中。
    • 我在你的代码中没有看到“Quick Test.xlsm”,所以我认为工作簿根本没有被打开。
    • 这是问题所在,我是否将目标路径、目标名称和目标表中的 Test2.xlsm 替换为与 Quick Test.xlsm 工作簿相对应?但我假设我需要输入一些代码将数据粘贴到 Test2.xlsm 工作簿中。再次感谢您的帮助,并坚持我
    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 2018-01-16
    相关资源
    最近更新 更多