Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据挖掘宏将值从多个工作簿复制并粘贴到单个工作簿_Database_Excel_Vba - Fatal编程技术网

Database 数据挖掘宏将值从多个工作簿复制并粘贴到单个工作簿

Database 数据挖掘宏将值从多个工作簿复制并粘贴到单个工作簿,database,excel,vba,Database,Excel,Vba,这就是我现在要处理的问题。我试图更改此宏以查找特定的值/文本,并将该数据复制到数据挖掘工作簿 当前,此宏复制特定单元格。我基本上想把它改成一个查找和复制函数 我想,如果我能找出如何使“从间隔摘要中查找并复制日期”工作,那么我可以使用该方法更改宏的所有其他部分。该部分有我当前的尝试,使这个宏工作,但我不断得到错误 Public Sub CommandButton1_Click() ' Record job, modular code, multiple customers. Dim c

这就是我现在要处理的问题。我试图更改此宏以查找特定的值/文本,并将该数据复制到数据挖掘工作簿

当前,此宏复制特定单元格。我基本上想把它改成一个查找和复制函数

我想,如果我能找出如何使“从间隔摘要中查找并复制日期”工作,那么我可以使用该方法更改宏的所有其他部分。该部分有我当前的尝试,使这个宏工作,但我不断得到错误

Public Sub CommandButton1_Click()

' Record job, modular code, multiple customers.

    Dim counter As Integer
    Dim PadPercentage As Single
    Dim Charactercounter As Integer
    Dim Date1 As String
    Dim Date2 As String
    Dim fd As FileDialog
    Dim vrtSelectedItem As Variant
    Dim Designcounter As Integer
    Dim Customer As String
    Dim Chemicals As String
    Dim Chemcounter As Integer
    Dim column As String
    Dim Sand As Integer




    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    Designcounter = -1


    With fd

        If .Show = -1 Then

            For Each vrtSelectedItem In .SelectedItems
                Designcounter = Designcounter + 1
                Workbooks.Open Filename:=vrtSelectedItem
                Sheets("Interval Summary").Select
                counter = 4
                Charactercounter = 1


'   Find and Copy date from Interval Summary.
                With Worksheets("Interval Summary")
                    Set FindRow = Range("B:B").Find(What:="Date:", LookIn:=xlPart).Select
                    ActiveCell.Offset(0, 3).Select
                    Selection.Copy
                End With
                Windows("2014 GJ PE Engineering Job Logs - Iteration 1.xls").Activate
                Range("A" & CStr(counter)).Select


'   Search for first blank cell in column A.
                Do While ActiveCell.Value <> ""
                    counter = counter + 1
                    Range("A" & CStr(counter)).PasteSpecial xlPasteValuesAndNumberFormats
                Loop

'   Paste date onto job recording sheet.
                Range("A" & CStr(counter)).Select
                    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False
                Selection.UnMerge
                Selection.NumberFormat = "m/d/yyyy"

' Record previous engineer name on job recording sheet.
                Range("B" & CStr(counter - 1)).Select
                Selection.Copy
                Range("B" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

'   Copy customer name onto reporting sheet.
                ActiveWindow.ActivatePrevious
                Worksheets("Actual Design").Range("C1").Select
                Customer = ActiveCell.Value
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("E" & CStr(counter)).Select
                ActiveSheet.Paste

'   Paste SO from design onto recording sheet.
                ActiveWindow.ActivateNext
                If Customer = "Noble Energy Inc." Then
                    Worksheets("Design").Range("O1").Select
                Else
                    Worksheets("Design").Range("Q1").Select
                End If
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("C" & CStr(counter)).Select
                ActiveSheet.Paste
                Selection.UnMerge


    Call Lease_Pad_Well_Copy(Customer, counter)



'   Find and Copy Interval # from Well Data
                With Worksheets("Well Data")
                    Set FindRow = .Range("B:B").Find(What:="Date", LookIn:=xlValues)
                Windows("2014 GJ PE Engineering Job Logs.xls").Activate
                Range("A" & CStr(counter)).Select
                End With


'   Copy mid perf depth to reporting sheet.

                Worksheets("Actual").Range("C40").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("I" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False


'   Copy mid perf depth TVD to reporting sheet.

                Worksheets("Actual").Range("C40").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("I" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False


'   Copy Top perf depth to reporting sheet.

                Worksheets("Actual").Range("C40").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("I" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False


'   Copy Bottom perf depth to reporting sheet.

                Worksheets("Actual").Range("C40").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("I" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False


'   Copy formation name to reporting sheet.
                ActiveWindow.ActivateNext
                Worksheets("Design").Range("C3").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("J" & CStr(counter)).Select
                ActiveSheet.Paste


'   Copy fluid system.
                Range("K" & CStr(counter - 1)).Select
                Selection.Copy
                Range("K" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

'   Copy crew from previous job.
                Range("L" & CStr(counter - 1)).Select
                Selection.Copy
                Range("L" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    If Customer = "x3" Or Customer = "Chevron" Then
        Call Copy_x3_Data(Customer, counter)
    End If

    If Customer = "x1." Then
        Call Copyx1_Data(Customer, counter)
    End If

    If Customer = "x2" Then
        Call Copy_x2(Customer, counter)
    End If

'   Copy slurry volume

                If Customer = "Williams Prod RMT" Then
                    ActiveWindow.ActivateNext
                    Sheets("Actuals").Select
                    Worksheets("Actuals").Range("H30").Select
                    Selection.Copy
                Else
                    ActiveWindow.ActivateNext
                    Sheets("Design").Select
                    Worksheets("Design").Range("H30").Select
                    Selection.Copy
                End If
                    ActiveWindow.ActivatePrevious
                    Range("S" & CStr(counter)).Select
                    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False



    '   Copy chemicals from design to Job recording sheet.
                ActiveWindow.ActivateNext
                Chemcounter = 78
                column = Chr(Chemcounter)
                Sheets("Well Data").Select
                Worksheets("Design").Range(column & "5").Select
                Do While ActiveCell.Value <> ""
                    If Chemcounter < 79 Then Chemicals = ActiveCell.Value
                    If Chemcounter > 78 Then Chemicals = Chemicals & ", " & ActiveCell.Value
                    Chemcounter = Chemcounter + 1
                    column = Chr(Chemcounter)
                    Worksheets("Well Data").Range(column & "5").Select
                Loop
                ActiveWindow.ActivatePrevious
                Range("P" & CStr(counter)).Select
                ActiveCell.Value = Chemicals



'   Switch back to and close design
                ActiveWindow.ActivateNext
                ActiveWorkbook.Save
                ActiveWindow.Close

            Next vrtSelectedItem
        End If
    End With

'   Format job log entries.
                ActiveWindow.ActivatePrevious
                Range("A" & CStr(counter - Designcounter) & ":AE" & CStr(counter)).Select
                Application.CutCopyMode = False
                With Selection.Font
                    .Name = "Arial"
                    .Size = 10
                    .Strikethrough = False
                    .Superscript = False
                    .Subscript = False
                    .OutlineFont = False
                    .Shadow = False
                    .Underline = xlUnderlineStyleNone
                    .ColorIndex = xlAutomatic
                End With
                Selection.Font.Bold = False
                Rows(CStr(counter) & ":" & CStr(counter)).Select
                Selection.RowHeight = 13.5



End Sub



Sub Lease_Pad_Well_Copy(Customer, counter)

    Dim Wellstrng As String
    Dim Pad As String
    Dim Wellpad As String
    Dim Lease As String
    Dim Well As String



    If Customer = "x5" Or Customer = "x6" Or Customer = "Noble Energy Inc." Or Customer = "x2" Then
    '   Sort lease, well, and pad number and copy to reporting sheet.
                ActiveWindow.ActivateNext
                Worksheets("Design").Range("C2").Select
                If ActiveCell.Value <> "" Then
                    Wellstrng = ActiveCell.Value
                    Lease = Left(Wellstrng, CLng(InStr(Wellstrng, " ")) - 1)
                    Pad = Right(Wellstrng, Len(Wellstrng) - CLng(InStrRev(Wellstrng, "-")))
                    Wellpad = Left(Wellstrng, CLng(InStr(Wellstrng, "-")) - 1)
                    Well = Right(Wellpad, Len(Wellpad) - CLng(InStrRev(Wellpad, " ")))



                    If Customer = "Noble Energy Inc." Then

                        Wellstrng = ActiveCell.Value
                        Lease = Left(Wellstrng, CLng(InStr(Wellstrng, " ")) - 1)
                        Wellpad = Right(Wellstrng, Len(Wellstrng) - CLng(InStr(Wellstrng, " ")))
                        Wellpad = Left(Wellpad, Len(Wellpad) - CLng(InStrRev(Wellpad, " -")))
                        Pad = Left(Wellpad, CLng(InStr(Wellpad, "-")) - 1)
                        Wellpad = Left(Wellstrng, CLng(InStr(Wellstrng, " -")) - 1)
                        Well = Right(Wellpad, Len(Wellpad) - CLng(InStrRev(Wellpad, "-")))

                    End If

                    If Customer = "x2." Then
                        Wellstrng = ActiveCell.Value
                        Lease = Left(Wellstrng, CLng(InStr(Wellstrng, " ")) - 1)
                        Pad = Right(Wellstrng, Len(Wellstrng) - CLng(InStr(Wellstrng, "-")))
                        Wellpad = Left(Wellstrng, CLng(InStr(Wellstrng, "-")) - 1)
                        Well = Right(Wellpad, Len(Wellpad) - CLng(InStrRev(Wellpad, " ")))
                    End If



                    ActiveWindow.ActivatePrevious



    '   Copy lease name onto reporting sheet.
                    Range("F" & CStr(counter)).Select
                    ActiveCell.Value = Lease

    '   Copy well number onto reporting sheet.
                    Range("G" & CStr(counter)).Select
                    ActiveCell.Value = Well

    '   Copy pad onto reporting sheet.
                    Range("H" & CStr(counter)).Select
                    ActiveCell.Value = Pad
                    ActiveWindow.ActivateNext
                End If

    End If


End Sub




Sub Copy_BBC(Customer, counter)

    Dim Twosands As String
    Dim Sandint As Integer

    '   Copy average rate
            ActiveWindow.ActivateNext
            Sheets("Database").Select
            Worksheets("Database").Range("B16").Select
            Selection.Copy
            ActiveWindow.ActivatePrevious
            Range("M" & CStr(counter)).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy average pressure
            ActiveWindow.ActivateNext
            Worksheets("Database").Range("B17").Select
            Selection.Copy
            ActiveWindow.ActivatePrevious
            Range("N" & CStr(counter)).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy perfs open.
            ActiveWindow.ActivateNext
            Worksheets("Database").Range("G18").Select
            Selection.Copy
            ActiveWindow.ActivatePrevious
            Range("W" & CStr(counter)).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy actual sand
            ActiveWindow.ActivateNext
            Worksheets("Database").Range("B26").Select
            Twosands = ActiveCell.Value
            Twosands = Twosands & " / "
            Worksheets("Database").Range("B28").Select
            Twosands = Twosands & ActiveCell.Value
            ActiveWindow.ActivatePrevious
            Range("Q" & CStr(counter)).Select
            ActiveCell.Value = Twosands


    '   Copy initial frac gradient
            ActiveWindow.ActivateNext
            Sheets("Database").Select
            Worksheets("Database").Range("B21").Select
            Selection.Copy
            ActiveWindow.ActivatePrevious
            Range("V" & CStr(counter)).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy final frac gradient
            ActiveWindow.ActivateNext
            Worksheets("Database").Range("B23").Select
            Selection.Copy
            ActiveWindow.ActivatePrevious
            Range("Y" & CStr(counter)).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy ISIP
            ActiveWindow.ActivateNext
            Worksheets("Database").Range("B20").Select
            Selection.Copy
            ActiveWindow.ActivatePrevious
            Range("U" & CStr(counter)).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy ISDP
            ActiveWindow.ActivateNext
            Worksheets("Database").Range("B22").Select
            Selection.Copy
            ActiveWindow.ActivatePrevious
            Range("X" & CStr(counter)).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False



End Sub

Sub Copy_Williams_Data(Customer, counter)


    '   Copy average rate to reporting sheet.
                ActiveWindow.ActivateNext
                Sheets("Actuals").Select
                Worksheets("Actuals").Range("G63").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("M" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy average pressure to reporting sheet.
                ActiveWindow.ActivateNext
                Worksheets("Actuals").Range("F63").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("N" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy perfs open.
                ActiveWindow.ActivateNext
                Worksheets("Actuals").Range("D64").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("W" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy actual sand
                ActiveWindow.ActivateNext
                Worksheets("Actuals").Range("D65").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("Q" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy initial frac gradient
                ActiveWindow.ActivateNext
                Sheets("Actuals").Select
                Worksheets("Design").Range("D61").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("V" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy final frac gradient
                ActiveWindow.ActivateNext
                Worksheets("Actuals").Range("D63").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("Y" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy ISIP
                ActiveWindow.ActivateNext
                Worksheets("Actuals").Range("D60").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("U" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy ISDP
                ActiveWindow.ActivateNext
                Worksheets("Actuals").Range("D62").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("X" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

End Sub

Sub Copy_x4_(Customer, counter)

    Dim SandColor As String
    Dim Sieve As String
    Dim Sandtemp As String
    Dim Sandtype As String

    '   Copy average rate to reporting sheet.
                ActiveWindow.ActivateNext
                Sheets("Actuals Design").Select
                Worksheets("Actual Design").Range("H63").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("M" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy average pressure to reporting sheet.
                ActiveWindow.ActivateNext
                Worksheets("Actual Design").Range("H62").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("N" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

   '   Copy Total perfs open.
                ActiveWindow.ActivateNext
                Worksheets("Actual Design").Range("E65").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("W" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

     '   Copy actual sand.
                ActiveWindow.ActivateNext
                Worksheets("Design").Range("M61").Select
                Greensand = ActiveCell.Value
                Worksheets("Design").Range("M60").Select
                Whitesand = ActiveCell.Value & " / "
                Combinedsand = Whitesand & Greensand
                ActiveWindow.ActivatePrevious
                Range("Q" & CStr(counter)).Select
                ActiveCell.Value = Combinedsand


      '   Copy initial frac gradient
                ActiveWindow.ActivateNext
                Sheets("Interval Summart").Select
                Worksheets("Design").Range("E64").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("V" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy final frac gradient
                ActiveWindow.ActivateNext
                Worksheets("Design").Range("H65").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("Y" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy ISIP
                ActiveWindow.ActivateNext
                Worksheets("Design").Range("E63").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("U" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False

    '   Copy ISDP
                ActiveWindow.ActivateNext
                Worksheets("Design").Range("H64").Select
                Selection.Copy
                ActiveWindow.ActivatePrevious
                Range("X" & CStr(counter)).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False


End Sub
使用.Find方法,您需要先设置范围,然后才能选择范围

在你正在谈论的部分中,你应该改变

Set FindRow = Range("B:B").Find(What:="Date:", LookIn:=xlPart).Select
为此:

Set FindRow = Range("B:B").Find(What:="Date:", LookAt:=xlPart)
FindRow.Select

我这样做了,但仍然得到运行时错误91。对象变量或With block Variable not SET单击“调试”时,它将转到哪一行代码?它是否转到Set FindRow行?是的,它转到FindRow.select.inet工作簿中我试图从中提取它们的单元格被合并。我试着去拼凑它们,但并没有什么不同。你们能试着把一个模糊的FindRow作为范围,和其他变量声明放在一起吗?