VBAsheets.activate将不会更改它从中获取信息的图纸

问题描述 投票:0回答:1

我正在尝试在运行时更改工作表,所以我在VBA中编写了此代码:

 Dim Item As Variant
 Dim Info As Variant
 Dim Stat As Integer
 Stat = 2
 Dim Line As Integer
 Line = 1
 Item = "Cases"
 Sheets(Item).Activate
 Do
        Line = Line + 1
 Loop While Cells(Line, "B") <> Null
 Do
     Info = Cells(1, Stat)
     Info = InputBox("what is the item " & Info & "?")
     Cells(Line, Stat) = Info
 Loop While Cells(1, Stat) <> Null

激活功能确实像我想要的那样打开了名为“案例”的工作表,但是当该部分运行“ Info = Cells(1,Stat)”时,即使我看到“案例”,它仍会从上一个工作表中获取信息。工作表。

[我查看了我编写的另一个vba代码,该代码使用相同的方法,该代码在那儿工作,但是我找不到在那里做的任何其他事情可以使它在那儿工作,而在这里丢失了。

excel vba worksheet-function
1个回答
1
投票

将工作表放到其自己的局部变量中,您不需要Activate任何东西(如果您有Workbook对象,请使用它代替ActiveWorkbook来限定Worksheets的调用权限。

Dim ws As Worksheet
Set ws = ActiveWorkbook.Worksheets("Cases")

现在无需循环就获得最后/下一行:

Dim line As Long
line = ws.Range("B" & ws.Rows.Count).End(xlUp).Row + 1

现在,您的循环条件将不起作用,因为Excel中的任何内容都不会是Null。而是查找Empty单元格,然后使用ws变量限定每个单个Cells成员调用:

Do
    Info = ws.Cells(1, Stat).Value
    Info = InputBox("what is the item " & Info & "?")
    ws.Cells(Line, Stat).Value = Info
Loop While Not IsEmpty(ws.Cells(1, Stat).Value)
© www.soinside.com 2019 - 2024. All rights reserved.