【问题标题】:With another workbook sheet do this stuff this macro says to do用另一个工作表做这个宏说要做的事情
【发布时间】:2019-09-30 10:46:47
【问题描述】:

我打开了一个工作簿,我正在尝试对另一个工作簿执行操作,但在 With 语句中调用宏只会使其作用于我打开的工作簿,而不是我希望它执行的其他工作簿东西。

Sub Format_Another_Worksheet()

    Dim wb As Workbook

    Set wb = GetObject("C:\Users\john\Desktop\anotherworkbook.xls")

    With wb.Worksheets("Sheet1")
    .Cells.Font.Size = 14

    Call myfunction("A")

    End With

End Sub

Sub myfunction(col As String)
    Range(col & "1").Font.Size = 30
End Sub

我有数百个 myfunction 宏需要使用,但不想进入并开始向它们添加东西,事实上我无法触及这数百个其他 myfunction 宏

【问题讨论】:

    标签: excel with-statement


    【解决方案1】:

    将要在其上运行此代码的工作表对象作为函数参数的一部分发送:

    Sub Format_Another_Worksheet()
    
        Dim wb As Workbook
    
        Set wb = GetObject("C:\Users\john\Desktop\anotherworkbook.xls")
    
        With wb.Worksheets("Sheet1")
        .Cells.Font.Size = 14
    
        Call myfunction("A", wb.Worksheets("Sheet1"))
    
        End With
    
    End Sub
    
    Sub myfunction(col As String, ws as Worksheet)
        ws.Range(col & "1").Font.Size = 30
    End Sub
    

    显然这与With 无关,但您的With 仅在调用它的子/函数内具有上下文。它不会通过函数调用继续存在。

    【讨论】:

    • 但我有数百个长宏,我不想进入每个宏并附加这个 ws。到处都是
    • 你必须进入它们,因为它们目前不工作,我想。也许一个精心创建的find/replace 会在这里有所帮助?最后,您的 Range 对象必须使用它所属的 worksheet 对象进行限定。否则就是一蹶不振。
    • 最终你的错误是写Range.<whatever> 没有在它前面加上Someworksheet. 来正确限定它。 Range unqualified 将在 ActiveSheet 上工作,而上帝只知道这将在一个巨大的意大利面条宏中间。
    【解决方案2】:

    然后按名称寻址工作簿。

    我有一个在两个工作簿之间工作的宏,我有这个:

    Dim wbmaster As Workbook                     'name for master workbook
    Dim wbtarget As Workbook                      'name for student workbook
    
    wbmaster.Sheets("Answers_Source").Range("h1:z160").Copy
    wbtarget.Sheets("ANSWERS").Range("h1:z160").PasteSpecial
    

    所以它确切地知道要做什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 2010-12-17
      • 2015-12-15
      • 1970-01-01
      • 2011-01-24
      相关资源
      最近更新 更多