【发布时间】:2018-11-19 20:44:55
【问题描述】:
我在空闲时间一直在做一些工作。我已经走了这么远,现在卡住了。基本上我有六组数据(学校、假期、银行假期、周六、周日和节礼日),每周都会被复制到一本新的工作簿上。例如
Sunday = choice of Sunday or Boxing day
Monday = choice of school or holiday or bank holiday or boxing day
Tuesday = choice of school or holiday or boxing day
Wednesday = choice of school or holiday or boxing day
Thursday = choice of school or holiday or boxing day
Friday = choice of school or holiday or boxing day
Saturday = choice of Saturday or boxing day
这个想法是,每个星期六晚上,主管选择下周每一天所需的数据(通过数据验证单元格),然后单击一个按钮并运行宏。见图:View of drop-down lists
我已经设置了 6 个宏来复制数据,我正在尝试设置一个在单击“创建 VAS”按钮时运行的主宏。到目前为止,当我使用 Application.run 进行测试时(请参阅周日代码),我可以让它工作,但是一旦我使用 If 或 If Else,它就会运行,但只运行列表中的第一个宏。例如,周日工作正常并将数据复制到新工作簿,但周一重命名工作表,然后总是复制学校数据(列表中的第一个选项),然后跳到下一步。我想我的星期一下拉选择有问题。我需要运行 Create VAS 宏,然后运行选择的宏,然后回到它自己所在的位置,如果可能的话继续运行它自己?
我一直在使用本网站和互联网上的论坛和帖子自学 VBA,并且慢慢变得更好,但这真的让我陷入困境,任何帮助将不胜感激!
Sub CreateVAS()
'Step 1 - Create VAS Workbook
Workbooks.Add
ActiveWorkbook.SaveAs filename:= _
"C:\Users\Tom\Desktop\VAS.xlsm", FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
'Step 2 - Create Sunday
Sheets("Sheet1").Select
Sheets("Sheet1").name = "Sunday"
Application.Run "CreateSunday"
'Step 3 - Create Monday
Sheets("Sheet2").Select
Sheets("Sheet2").name = "Monday"
Dim macroNameMon As String
macroName = Range("C6").Value
If macroNameMon = School Then
Application.Run "CreateSchool"
ElseIf macroNameMon = Holiday Then
Application.Run "CreateHoliday"
ElseIf macroNameMon = BankHoliday Then
Application.Run "CreateBH"
ElseIf macroNameMon = Boxing Then
Application.Run "CreateBoxing"
End If
Windows("VAS.xlsm").Activate
Sheets("Monday").Paste Destination:=Range("A1")
'Step 4 - Create Tuesday
Sheets("Sheet3").Select
Sheets("Sheet3").name = "Tuesday"
Dim macroNameTue As String
macroName = Range("C8").Value
If macroNameTue = School Then
Application.Run "CreateSchool"
ElseIf macroNameTue = Holiday Then
Application.Run "CreateHoliday"
ElseIf macroNameTue = BankHoliday Then
Application.Run "CreateBH"
ElseIf macroNameTue = Boxing Then
Application.Run "CreateBoxing"
End If
Windows("VAS.xlsm").Activate
Sheets("Tuesday").Paste Destination:=Range("A1")
'Step 5 - Create Wednesday
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("Sheet4").Select
Sheets("Sheet4").name = "Wednesday"
'Step 6 - Create Thursday
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("Sheet5").Select
Sheets("Sheet5").name = "Thursday"
'Step 7 - Create Friday
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("Sheet6").Select
Sheets("Sheet6").name = "Friday"
'Step 7 - Create Saturday
Sheets.Add After:=Sheets(Sheets.Count)
Sheets("Sheet7").Select
Sheets("Sheet7").name = "Saturday"
Application.Run "CreateSaturday"
'Step 10 - Save all changes
Windows("VAS.xlsm").Activate
ActiveWorkbook.Save
MsgBox "VAS Sheet created. Please rename and place in correct folder."
ActiveWindow.Close
【问题讨论】:
-
请....避免使用
SELECT。 How to avoid using Select。一旦摆脱了这些,编码就会变得容易得多。 -
School是变量名吗?您将其用作If macroNameMon = School Then中的一个。整个If..ElseIf块可以替换为Select Case -
我还认为您的六个宏可能是一个,但传递给它的参数不同 - 这六个宏是否相似?