excel - 如何解决此“编译错误:无效或不合格的参考”
问题描述
我对 vba 宏完全陌生,似乎无法找到解决我的错误的方法。我有以下代码:
Sub BuilderUpdate()
Range("B2").Copy Worksheets("Pack").Range("B2")
.PasteSpecial xlPasteValues
Range("D2").Copy Worksheets("Pack").Range("C2")
.PasteSpecial xlPasteValues
Range("F2").Copy Worksheets("Pack").Range("D2")
.PasteSpecial xlPasteValues
Range("H2").Copy Worksheets("Pack").Range("E2")
.PasteSpecial xlPasteValues
Range("B3").Copy Worksheets("Pack").Range("F2")
.PasteSpecial xlPasteValues
Range("D3").Copy Worksheets("Pack").Range("G2")
.PasteSpecial xlPasteValues
Range("F3").Copy Worksheets("Pack").Range("H2")
.PasteSpecial xlPasteValues
Range("H3").Copy Worksheets("Pack").Range("I2")
.PasteSpecial xlPasteValues
Range("B4").Copy Worksheets("Pack").Range("J2")
.PasteSpecial xlPasteValues
Range("D4").Copy Worksheets("Pack").Range("K2")
.PasteSpecial xlPasteValues
Range("F4").Copy Worksheets("Pack").Range("L2")
.PasteSpecial xlPasteValues
Range("H4").Copy Worksheets("Pack").Range("M2")
.PasteSpecial xlPasteValues
Range("B5").Copy Worksheets("Pack").Range("N2")
.PasteSpecial xlPasteValues
Range("D5").Copy Worksheets("Pack").Range("O2")
.PasteSpecial xlPasteValues
Range("F5").Copy Worksheets("Pack").Range("P2")
.PasteSpecial xlPasteValues
Range("H5").Copy Worksheets("Pack").Range("Q2")
.PasteSpecial xlPasteValues
Range("B6").Copy Worksheets("Pack").Range("R2")
.PasteSpecial xlPasteValues
Range("D6").Copy Worksheets("Pack").Range("S2")
.PasteSpecial xlPasteValues
Range("F6").Copy Worksheets("Pack").Range("T2")
.PasteSpecial xlPasteValues
Range("H6").Copy Worksheets("Pack").Range("U2")
.PasteSpecial xlPasteValues
Range("B7").Copy Worksheets("Pack").Range("V2")
.PasteSpecial xlPasteValues
Range("D7").Copy Worksheets("Pack").Range("W2")
.PasteSpecial xlPasteValues
Range("F7").Copy Worksheets("Pack").Range("X2")
.PasteSpecial xlPasteValues
Range("H7").Copy Worksheets("Pack").Range("Y2")
.PasteSpecial xlPasteValues
Range("B8").Copy Worksheets("Pack").Range("Z2")
.PasteSpecial xlPasteValues
Range("D8").Copy Worksheets("Pack").Range("AA2")
.PasteSpecial xlPasteValues
Range("F8").Copy Worksheets("Pack").Range("AB2")
.PasteSpecial xlPasteValues
Range("H8").Copy Worksheets("Pack").Range("AC2")
.PasteSpecial xlPasteValues
Range("B9").Copy Worksheets("Pack").Range("AD2")
.PasteSpecial xlPasteValues
Range("D9").Copy Worksheets("Pack").Range("AE2")
.PasteSpecial xlPasteValues
Range("F9").Copy Worksheets("Pack").Range("AF2")
.PasteSpecial xlPasteValues
Range("H9").Copy Worksheets("Pack").Range("AG2")
.PasteSpecial xlPasteValues
Range("B10").Copy Worksheets("Pack").Range("AH2")
.PasteSpecial xlPasteValues
Range("D10").Copy Worksheets("Pack").Range("AI2")
.PasteSpecial xlPasteValues
Range("F10").Copy Worksheets("Pack").Range("AJ2")
.PasteSpecial xlPasteValues
Range("H10").Copy Worksheets("Pack").Range("AK2")
.PasteSpecial xlPasteValues
Range("B11").Copy Worksheets("Pack").Range("AL2")
.PasteSpecial xlPasteValues
Range("D11").Copy Worksheets("Pack").Range("AM2")
.PasteSpecial xlPasteValues
Range("F11").Copy Worksheets("Pack").Range("AN2")
.PasteSpecial xlPasteValues
Range("H11").Copy Worksheets("Pack").Range("AO2")
.PasteSpecial xlPasteValues
Range("B12").Copy Worksheets("Pack").Range("AP2")
.PasteSpecial xlPasteValues
Range("D12").Copy Worksheets("Pack").Range("AQ2")
.PasteSpecial xlPasteValues
Range("F12").Copy Worksheets("Pack").Range("AR2")
.PasteSpecial xlPasteValues
Range("H12").Copy Worksheets("Pack").Range("AS2")
.PasteSpecial xlPasteValues
Range("B13").Copy Worksheets("Pack").Range("AT2")
.PasteSpecial xlPasteValues
Range("D13").Copy Worksheets("Pack").Range("AU2")
.PasteSpecial xlPasteValues
Range("F13").Copy Worksheets("Pack").Range("AV2")
.PasteSpecial xlPasteValues
Range("H13").Copy Worksheets("Pack").Range("AW2")
.PasteSpecial xlPasteValues
Range("B14").Copy Worksheets("Pack").Range("AX2")
.PasteSpecial xlPasteValues
Range("D14").Copy Worksheets("Pack").Range("AY2")
.PasteSpecial xlPasteValues
Range("F14").Copy Worksheets("Pack").Range("AZ2")
.PasteSpecial xlPasteValues
Range("H14").Copy Worksheets("Pack").Range("BA2")
.PasteSpecial xlPasteValues
Range("B15").Copy Worksheets("Pack").Range("BB2")
.PasteSpecial xlPasteValues
Range("D15").Copy Worksheets("Pack").Range("BC2")
.PasteSpecial xlPasteValues
Range("F15").Copy Worksheets("Pack").Range("BD2")
.PasteSpecial xlPasteValues
Range("H15").Copy Worksheets("Pack").Range("BE2")
.PasteSpecial xlPasteValues
Range("B16").Copy Worksheets("Pack").Range("BF2")
.PasteSpecial xlPasteValues
Range("D16").Copy Worksheets("Pack").Range("BG2")
.PasteSpecial xlPasteValues
Range("F16").Copy Worksheets("Pack").Range("BH2")
.PasteSpecial xlPasteValues
Range("H16").Copy Worksheets("Pack").Range("BI2")
.PasteSpecial xlPasteValues
End Sub
但是,当尝试运行代码时,我收到一条错误消息“编译错误:无效或不合格的引用”,它指向宏的第一行,例如https://puu.sh/GHfuN/45afb283fd.png
我觉得有一个简单的解决方案,但我完全没有看到它。
解决方案
重构
编码
Option Explicit
Sub BuilderUpdate()
Dim Target As Variant
Target = Array("B2", "C2", "D2", "E2", "F2", "G2", "H2", "I2", "J2", "K2", _
"L2", "M2", "N2", "O2", "P2", "Q2", "R2", "S2", "T2", "U2", _
"V2", "W2", "X2", "Y2", "Z2", "AA2", "AB2", "AC2", "AD2", _
"AE2", "AF2", "AG2", "AH2", "AI2", "AJ2", "AK2", "AL2", _
"AM2", "AN2", "AO2", "AP2", "AQ2", "AR2", "AS2", "AT2", _
"AU2", "AV2", "AW2", "AX2", "AY2", "AZ2", "BA2", "BB2", _
"BC2", "BD2", "BE2", "BF2", "BG2", "BH2", "BI2")
Dim Source As Variant
Source = Array("B2", "D2", "F2", "H2", "B3", "D3", "F3", "H3", "B4", "D4", _
"F4", "H4", "B5", "D5", "F5", "H5", "B6", "D6", "F6", "H6", _
"B7", "D7", "F7", "H7", "B8", "D8", "F8", "H8", "B9", "D9", _
"F9", "H9", "B10", "D10", "F10", "H10", "B11", "D11", _
"F11", "H11", "B12", "D12", "F12", "H12", "B13", "D13", _
"F13", "H13", "B14", "D14", "F14", "H14", "B15", "D15", _
"F15", "H15", "B16", "D16", "F16", "H16")
Dim ws As Worksheet
Set ws = Worksheets("Pack")
Dim n As Long
For n = LBound(Source) To UBound(Source)
ws.Range(Target(n)).Value = Range(Source(n)).Value
Next n
MsgBox "Data copied.", vbInformation, "Success"
End Sub
在 Excel 中,您可以在两列中记下单元格地址,然后使用公式在工作表引用下方获取以下字符串:
=" ws.Range("""&A1&""").Value = Range("""&B1&""").Value"
快速修复
Sub BuilderUpdateQF()
Dim ws As Worksheet
Set ws = Worksheets("Pack")
ws.Range("B2").Value = Range("B2").Value
ws.Range("C2").Value = Range("D2").Value
ws.Range("D2").Value = Range("F2").Value
ws.Range("E2").Value = Range("H2").Value
ws.Range("F2").Value = Range("B3").Value
ws.Range("G2").Value = Range("D3").Value
ws.Range("H2").Value = Range("F3").Value
ws.Range("I2").Value = Range("H3").Value
ws.Range("J2").Value = Range("B4").Value
ws.Range("K2").Value = Range("D4").Value
ws.Range("L2").Value = Range("F4").Value
ws.Range("M2").Value = Range("H4").Value
ws.Range("N2").Value = Range("B5").Value
ws.Range("O2").Value = Range("D5").Value
ws.Range("P2").Value = Range("F5").Value
ws.Range("Q2").Value = Range("H5").Value
ws.Range("R2").Value = Range("B6").Value
ws.Range("S2").Value = Range("D6").Value
ws.Range("T2").Value = Range("F6").Value
ws.Range("U2").Value = Range("H6").Value
ws.Range("V2").Value = Range("B7").Value
ws.Range("W2").Value = Range("D7").Value
ws.Range("X2").Value = Range("F7").Value
ws.Range("Y2").Value = Range("H7").Value
ws.Range("Z2").Value = Range("B8").Value
ws.Range("AA2").Value = Range("D8").Value
ws.Range("AB2").Value = Range("F8").Value
ws.Range("AC2").Value = Range("H8").Value
ws.Range("AD2").Value = Range("B9").Value
ws.Range("AE2").Value = Range("D9").Value
ws.Range("AF2").Value = Range("F9").Value
ws.Range("AG2").Value = Range("H9").Value
ws.Range("AH2").Value = Range("B10").Value
ws.Range("AI2").Value = Range("D10").Value
ws.Range("AJ2").Value = Range("F10").Value
ws.Range("AK2").Value = Range("H10").Value
ws.Range("AL2").Value = Range("B11").Value
ws.Range("AM2").Value = Range("D11").Value
ws.Range("AN2").Value = Range("F11").Value
ws.Range("AO2").Value = Range("H11").Value
ws.Range("AP2").Value = Range("B12").Value
ws.Range("AQ2").Value = Range("D12").Value
ws.Range("AR2").Value = Range("F12").Value
ws.Range("AS2").Value = Range("H12").Value
ws.Range("AT2").Value = Range("B13").Value
ws.Range("AU2").Value = Range("D13").Value
ws.Range("AV2").Value = Range("F13").Value
ws.Range("AW2").Value = Range("H13").Value
ws.Range("AX2").Value = Range("B14").Value
ws.Range("AY2").Value = Range("D14").Value
ws.Range("AZ2").Value = Range("F14").Value
ws.Range("BA2").Value = Range("H14").Value
ws.Range("BB2").Value = Range("B15").Value
ws.Range("BC2").Value = Range("D15").Value
ws.Range("BD2").Value = Range("F15").Value
ws.Range("BE2").Value = Range("H15").Value
ws.Range("BF2").Value = Range("B16").Value
ws.Range("BG2").Value = Range("D16").Value
ws.Range("BH2").Value = Range("F16").Value
ws.Range("BI2").Value = Range("H16").Value
End Sub
推荐阅读
- django - Django Postman 错误此字段是必需的
- sql - sql,大查询:聚合变量中两个字符串之间的所有条目
- laravel - 使用 Laravel 中的数组验证另一个字段值
- php - 过滤日期时记录错误
- javascript - 用户输入文本后,如何使用 AJAX 更新我的数据库?
- c# - 如何检测触发器何时触发?
- python - Python:如何在前 10 个值的列表中找到最大值?
- c# - 使用 Activator 创建实例
- gobblin - KafkaHDFS 示例出错:java.lang.NoSuchMethodError
- if-statement - 在 Cypress 中,如何检查按钮是否具有属性?