我有一本工作簿,其中有三个选项卡用于项目预算模板。在第一个选项卡(第一个选项卡称为SOW)中有一个下拉菜单,该菜单根据从下拉菜单中选择的内容来调用不同的宏。所述宏之一和我需要修复的宏会根据从下拉框中选择的模板类型来更改第二个选项卡(此选项卡称为“服务”)的G列中的单位费率公式。
这是我需要给公司A的公式:
=SUMIF(K368:411,C29, L368:L411)
这是我为公司B所需的公式:
=IF(C429="Managing Director",295,IF(C429="Director of Production",239.5,IF(C429="Deputy Director of Production",225,IF(C429="Executive Producer",215,IF(C429="Senior Producer",185,IF(C429="Producer",149.5,IF(C429="Associate Producer",129.5,IF(C429="Senior Project Coordinator",119.5,IF(C429="Project Coordinator",95,IF(C429="Production Assistant",75,IF(C429="Head of Technical Services",239.5,IF(C429="Technical Director",195,IF(C429="Senior Production Manager",185,IF(C429="Production Manager",149.5,IF(C429="Executive Creative Director",335,IF(C429="Group Creative Director",315,IF(C429="Creative Director",285,IF(C429="Associate Creative Director",185,IF(C429="Design Director",185,IF(C429="Senior 3D Director",179.5,IF(C429="3D Designer",115,IF(C429="Senior 2D Designer",179.5,IF(C429="2D Designer / Production Designer",115,IF(C429="Animator",179.5,IF(C429="Strategy Director",315,IF(C429="Senior Strategist",185,IF(C429="Strategist",165,IF(C429="Group Account Director",265,IF(C429="Account Director",235,IF(C429="Senior Account Manager",195,IF(C429="Account Manager",145,IF(C429="Account Executive",115,IF(C429="Content Designer / Presentation Graphics",175,IF(C429="Lighting Designer",195,IF(C429="Sound Designer",195,IF(C429="Video Designer",195,IF(C429="Showcaller",195,IF(C429="Assistant Stage Manager",175,IF(C429="Makeup Artist",175,IF(C429="Prompt Operator",175,0))))))))))))))))))))))))))))))))))))))))
当我测试这些宏以分别来回更改单位费率时,它们似乎可以正常工作。但是,当它们包含在下拉宏中时,由于某种原因,它们会使事情变得混乱。在“服务”选项卡的G列的每一行(第二个选项卡的G列)中始终输入一种角色。该宏不应在G列中输入任何值,而应仅更改此列中用于计算单位费率的公式。对于SUMIF公式,第二个选项卡底部的表格隐藏了角色和费率。对于嵌套的IF公式,我还将其隐藏在第二个选项卡底部的一个单元格中(宏复制了该单元格,然后在第二个选项卡的G列中选择了所有必要的行,并粘贴了嵌套的if公式。因为G列似乎也发生了变化,因此在删除宏错误输入的角色后,我必须为该列中的每个单元格重新输入所有边框。此外,如果情况有所不同,则大约有16个合并的单元格行在所说的G列中,这就是为什么在G列中选择了多个范围的原因。我能够通过记录一个宏来获取下面的代码,所以我对到底出了什么问题感到困惑。也许我只需要在宏中添加更多内容即可更改了单位费率,但是想要在此处检查以防万一我遗漏了一些东西。
```UnitRatesForRolesInServicesTab()
Sheets("SERVICES").Select
Range("G29").Select
ActiveCell.FormulaR1C1 = _
"=SUMIF(R[339]C[4]:R[382]C[4], RC[-4],R[339]C[5]:R[382]C[5])"
Range("G29").Select
Selection.Copy
Range( _
"G30:G48,G50:G69,G71:G90,G92:G111,G113:G132,G134:G153,G155:G174,G176:G195,G197:G216,G218:G237,G239:G258,G260:G279,G281:G300,G302:G321,G323:G342,G344:G363" _
).Select
Range("G344").Activate
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
Sheets("SOW").Select
End Sub```
以下是撤消上述操作的宏:
```Sub UndoUnitRatesForRolesInServicesTab()
'
' UndoUnitRatesForRolesInServicesTab Macro
'
'
Sheets("SERVICES").Select
Range("G423").Select
Selection.Copy
Range("G29").Select
ActiveSheet.Paste
Range( _
"G30:G48,G50:G69,G71:G90,G92:G111,G113:G132,G134:G153,G155:G174,G176:G195,G197:G216,G218:G237,G239:G258,G260:G279,G281:G300,G302:G321,G323:G342,G344:G363" _
).Select
Range("G344").Activate
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.NumberFormat = "0;-0;-;@"
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndSha```
答案 0 :(得分:0)
这不是您问题的直接答案,但我希望它可以简化您的宏和数据(然后也许也可以简化您的问题)。
如此冗长且深层嵌套的IF
陈述,我建议对您如何确定一个人的角色率进行更改。使用VLOOKUP
公式是实现所需目标的快速方法。
因此,创建另一个工作表。我的示例调用为SupportingInfo
。您可以将其设为隐藏的工作表,也可以不使其成为隐藏的工作表。输入您的角色和费率,然后将数据转换为表并将其命名为RolesAndRates
:
现在在您的主工作表上,您列出了所有角色并需要费率,这是一个简单的查找语句:
还请注意,您可以添加或删除角色或更改任何费率,由于您的VLOOKUP
公式,该费率将自动反映出来。
虽然这不是您问题的直接答案,但我认为这将使您如何更轻松地构建工作表。