Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
将三个宏堆栈到一个VBA命令中_Vba_Excel - Fatal编程技术网

将三个宏堆栈到一个VBA命令中

将三个宏堆栈到一个VBA命令中,vba,excel,Vba,Excel,我有三个单独工作的宏(如下),但当我将它们夹在一起时,只有第一个宏正确执行。我没有得到一个错误;另外两个宏似乎无法运行。有没有关于如何将它们链接在一起以便我可以一次执行的建议 宏1 Sub Update_Workbook() Dim QryStr As String, cell As String Dim a As Integer, b As Integer Dim cellv As Variant 'Pause spreadsheet calculations until end of s

我有三个单独工作的宏(如下),但当我将它们夹在一起时,只有第一个宏正确执行。我没有得到一个错误;另外两个宏似乎无法运行。有没有关于如何将它们链接在一起以便我可以一次执行的建议


宏1

Sub Update_Workbook()
Dim QryStr As String, cell As String
Dim a As Integer, b As Integer
Dim cellv As Variant

'Pause spreadsheet calculations until end of sub
Application.Calculation = xlManual

ActiveWorkbook.Sheets("Raw Data").Select

'Clear cells to import query
With Range("A1:O1").EntireColumn
    .ClearContents
    .NumberFormat = "General"
    .Validation.Delete
End With

'Process SQL query string
QryStr = ActiveSheet.TextBox1.Value
Do While InStr(QryStr, "{&")
    a = InStr(QryStr, "{&")
    b = InStr(a, QryStr, "}")
    cell = Mid(QryStr, a + 2, b - a - 2)
    cellv = Range(cell).Value
    If IsDate(cellv) Then
        cellv = Format(cellv, "dd-mmm-yy")
    End If
    QryStr = Replace(QryStr, "{&" & cell & "}", cellv)
Loop

'Import data from query
    With ActiveSheet.QueryTables.Add(Connection:="ODBC;DRIVER={Oracle in OraClient11g_home1};UID=xx;PWD=xx;SERVER=xx;DBQ=xx", _
  Destination:=Range("A1"), Sql:=QryStr)
    .MaintainConnection = False
    .BackgroundQuery = False
    .RefreshStyle = xlOverwriteCells
    .Refresh
    .Delete
End With
Finish_Sub:
Call ClearUnneededNames
Application.Calculation = xlCalculationAutomatic
End Sub
Sub ClearUnneededNames()
Dim savedNames As Integer
savedNames = 0
Do While ActiveSheet.Names.Count > savedNames
    If InStr(ActiveSheet.Names(savedNames + 1).Name, "ExternalData") = 0     Then
        savedNames = savedNames + 1
    Else
        ActiveSheet.Names(savedNames + 1).Delete
    End If
Loop
End Sub
宏2

Sub Five_Felicia_for_MFG()
'
' Macro3 Macro
'

'
Range("A3:M3").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlUp)).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWindow.SmallScroll Down:=-18
Range(Selection, Selection.End(xlUp)).Select
Range("A3:M1010").Select
Selection.Delete Shift:=xlUp
Sheets("5Felicia").Select
Range("A3:M34").Select
Selection.Copy
Sheets("5Felicia for MFG").Select
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
Sheets("5Felicia").Select
Range("A37:M37").Select
Range(Selection, Selection.End(xlDown)).Select
Range("A37:M692").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("5Felicia for MFG").Select
ActiveWindow.SmallScroll Down:=18
Range("A36").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=-48
Columns("A:M").Select
Application.CutCopyMode = False
ActiveSheet.Range("$A$1:$M$691").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, _
    7, 8, 9, 10, 11, 12, 13), Header:=xlNo
End Sub
宏3

Sub DUMMY_ITEMS()
'
' DUMMY_ITEMS Macro
Dim LastRow As Long

Sheets("Operations").Range("H2:V73").Copy

With Sheets("Raw Data")
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
.Range("A" & LastRow + 1).PasteSpecial xlPasteValues
End With

End Sub

在VBA中,模块中可以有多个宏(更准确地说,是子程序)

但是,当您调用其中一个宏时,执行会在
End Sub
语句处停止。无论您如何在模块中“夹心”它们,模块中的任何其他内容都不会运行

但是子例程可以调用其他子例程。这样的代码将运行所有三个宏:

Sub RunAllThree()
    Update_Workbook
    Five_Felicia_for_MFG
    DUMMY_ITEMS
End Sub

你没有表现出将它们联系在一起的努力(不管这意味着什么)。你是说按顺序执行吗?创建一个新宏,逐个调用现有的三个宏。如果您有未向我们展示的代码试图执行此操作但未调用它们,请使用调试器逐步检查代码以找出原因。宏1出现复制粘贴错误(或语法错误)。请放置断点并运行,然后查看发生了什么。“三明治在一起”或“似乎没有运行”都没有给我们提供任何开始疑难解答的线索。当我删除数据库凭据以便在此处发布时,宏1中的语法错误可能已经出现@使用占位符文本替换它们。