【问题标题】:Understanding sheet/cell referencing in VBA excel了解 VBA excel 中的工作表/单元格引用
【发布时间】:2018-04-19 00:20:25
【问题描述】:

所以我移动了一个带有一些相当广泛编码的宏按钮,这样用户就不会意外点击它。基本上,宏将第一页上的信息发送到摘要工作簿。我认为我可以移动按钮,因为查找所需变量的代码的第一部分选择了我真正想要从中获取信息的工作表。然而,宏仍然查看活动工作表以获取变量。我可以通过简单地将工作表引用与范围引用一起获取必要的信息来解决此问题,但我认为我不需要这样做。有没有办法只引用一次工作表,以便代码在工作表上查找我需要信息的所有信息?

第一个代码——从它所附加的任何工作表中获取信息,在本例中为 sheet2:

 Worksheets("Sheet1").Select
    AgentName = Range("C2")
    'Set IncidentReport = Range("d1:f1")
    County = Range("d1")
    Idate = Format(Range("e1"), "yyyymmdd")
    LogNum = Format(Range("f1"), "000")
    IncidentReport = County & Idate & LogNum

此代码从正确的工作表中提取信息,但我有很多变量我希望得到,而且肯定有更好的方法:

Worksheets("Sheet1").Select
    AgentName = Worksheets("Sheet1").Range("C2")
    'Set IncidentReport = Range("d1:f1")
    County = Worksheets("Sheet1").Range("d1")
    Idate = Format(Worksheets("Sheet1").Range("e1"), "yyyymmdd")
    LogNum = Format(Worksheets("Sheet1").Range("f1"), "000")
    IncidentReport = County & Idate & LogNum

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可以使用 With 语句 - 注意范围前面的点。但是,我认为您的第一个代码应该可以工作 - 您是否有多个工作簿在运行?

    With Worksheets("Sheet1")
        AgentName = .Range("C2")
        County = .Range("d1")
        Idate = Format(.Range("e1"), "yyyymmdd")
        LogNum = Format(.Range("f1"), "000")
        IncidentReport = County & Idate & LogNum
    end with
    

    【讨论】:

    • 我想是的。当我单击按钮时,代码会查看一个工作簿以获取信息,然后打开另一个工作簿以在下一个空行中插入信息。
    • 您需要以与工作表引用相同的方式添加工作簿引用。如果回答了您的问题,请接受/an answer。
    • 引用工作簿不起作用。唯一有效的是将工作表引用与每个单元格引用一起添加。我确定我缺少一些简单的东西,但是您建议的上述更改不允许代码运行。
    • 我们都回答了您提出的问题。工作簿问题是一个单独的问题,您没有提供足够的信息来回答这个问题。 With的要点是不需要每次都指定工作表。
    • 我理解 with 的意义,但那没有用。当我按照您指示的方式添加它时,我收到一条错误消息,指出该对象是必需的。我认为我在工作簿引用方面没有问题,并且在这方面没有收到错误。我只是在回答你关于它的问题。我的理解是我接受有效的答案,这不正确吗?
    【解决方案2】:

    是的,使用with 块:

    With Worksheets("Sheet1")
        AgentName = .Range("C2")
        'Set IncidentReport = Range("d1:f1")
        County = .Range("d1")
        Idate = Format(.Range("e1"), "yyyymmdd")
        LogNum = Format(.Range("f1"), "000")
        IncidentReport = County & Idate & LogNum
    End With
    

    with 块内,您可以使用. 引用您的对象,因此object.a 变为.

    【讨论】:

    • 当我尝试这样做并使用 ".Range("C2") 时,我收到一条错误消息,指出需要一个对象。我也尝试使用 ThisWorkbook 引用工作簿。如果我删除了 '.'然后代码工作,但引用 sheet2 而不是 sheet1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多