Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
Excel VBA:使用变量调用宏_Excel_Vba - Fatal编程技术网

Excel VBA:使用变量调用宏

Excel VBA:使用变量调用宏,excel,vba,Excel,Vba,我是VBA的初学者,我编写了一个脚本,可以根据分配给变量SheetName的工作表名称调用不同的宏。我试图执行下面的代码,但我得到了一个编译错误。希望你们能帮助我 Sub ScrubeCareOutput() Dim SheetName, Header, PolicyNumber As String Dim CheckPoint As Integer StartTime = Now() Application.ScreenUpdating = False Application.Displa

我是VBA的初学者,我编写了一个脚本,可以根据分配给变量
SheetName
的工作表名称调用不同的宏。我试图执行下面的代码,但我得到了一个编译错误。希望你们能帮助我

Sub ScrubeCareOutput()

Dim SheetName, Header, PolicyNumber As String
Dim CheckPoint As Integer

StartTime = Now()
Application.ScreenUpdating = False
Application.DisplayAlerts = False

Sheets("ConsolidatedData").Select
Range("P:P").Cut
Range("A1").Select
ActiveCell.EntireColumn.Insert
Range("A1").Select

'Deleting old sheet
Application.StatusBar = "Calculating Loop .."
Sheets("Reference").Select
Range("L2").Select

ActiveCell.Offset(1, 0).Select
SheetName = ActiveCell.Value

'Scrubbing Output
Do Until SheetName = ""

Application.StatusBar = "Scrubbing " & SheetName & " Output.."
Sheets(SheetName).Select
Range("a1").Select

If IsEmpty(Range("A2")) = False Then
Range("A2").Select
Header = ActiveCell.Value
End If

'Deleting Headers

Selection.AutoFilter Field:=1, Criteria1:=Header
ActiveSheet.AutoFilter.Range.Offset(1, 0).Rows.SpecialCells(xlCellTypeVisible).Delete (xlShiftUp)
ActiveSheet.AutoFilterMode = False

Selection.AutoFilter Field:=1, Criteria1:=""
ActiveSheet.AutoFilter.Range.Offset(1, 0).Rows.SpecialCells(xlCellTypeVisible).Delete (xlShiftUp)
ActiveSheet.AutoFilterMode = False

Selection.AutoFilter Field:=1, Criteria1:="©Copyright Nebo Systems, Inc."
ActiveSheet.AutoFilter.Range.Offset(1, 0).Rows.SpecialCells(xlCellTypeVisible).Delete (xlShiftUp)
ActiveSheet.AutoFilterMode = False

Selection.AutoFilter Field:=1, Criteria1:="Powered by ECARE?"
ActiveSheet.AutoFilter.Range.Offset(1, 0).Rows.SpecialCells(xlCellTypeVisible).Delete (xlShiftUp)
ActiveSheet.AutoFilterMode = False

Range("1:1").Delete

'Scrubbing Data
Call SheetName

'Creating fields
For i = 1 To 4
ActiveCell.EntireColumn.Insert
Next

Range("A1").Select
ActiveCell.Value = "Account Number"
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "Mnemonic"
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "Begin Date"
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "End Date"

'Formulating data
ActiveCell.Offset(1, -3).Select
ActiveCell.Value = "=VLOOKUP(E2,ConsolidatedData!$A:$S,3,0)"
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "=VLOOKUP(E2,ConsolidatedData!$A:$S,16,0)"
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "=VLOOKUP(E2,ConsolidatedData!$A:$S,17,0)"
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "=VLOOKUP(E2,ConsolidatedData!$A:$S,18,0)"

ActiveCell.Offset(0, 1).Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, -4).Select
Range(Selection, Selection.End(xlUp)).Select
Range(Selection, Selection.Offset(0, 3)).Select
Selection.FillDown
Selection.Copy
Selection.PasteSpecial xlPasteValues
Range("a1").Select

'Formatting data
Application.StatusBar = "Formatting " & SheetName & " Output.."
With ActiveSheet
.Cells.Font.Name = "Calibri"
.Cells.Font.Size = "10"
End With
Range("1:1").Select
Selection.Font.Bold = True
Range("A1").Select

'Save data
ActiveWorkbook.Saved = True
Sheets("Reference").Select

ActiveCell.Offset(1, 0).Select
SheetName = ActiveCell.Value
Else

Sheets("Reference").Select

ActiveCell.Offset(1, 0).Select
SheetName = ActiveCell.Value

End If
Loop

Sheets("UB92Monitor").Select

'Confirmation message
ActiveWorkbook.Save

EndTime = Format((Now() - StartTime), "HH:MM:SS")
Application.StatusBar = False
MsgBox "Data scrubbed successfully in " & EndTime, vbOKOnly, "Data Scrubbing Status"

End Sub

你能用最少的代码重现错误吗?请阅读,在循环的底部还有一个零散的
Else
End If
,它们不是
If
语句的一部分。您的第一行(声明多个变量时用逗号分隔)将除PolicyNumber之外的所有变量声明为变量。我猜您可能是无意中将工作表(对象)指定给sheetname而不是sheet.Name属性.Nevermind。我看到了使用单元格值指定sheetname的位置。不要使用“Call SheetName”,而是尝试“Application.Run SheetName”。我保证最后一句话。阅读避免“选择”和“激活”的相关内容。VBA新手这样做是很常见的,但除非绝对必要,否则应该避免这样做。例如,您有“ActiveCell.Offset.Select”,然后是“ActiveCell.Value=“you can do”SheetName.Range(“A1”).Offset(0,1)。Value=Somevalue”并一次处理所有问题(更干净、更快)。