Excel VBA sheets.activate不会更改从中获取信息的工作表

Excel VBA sheets.activate不会更改从中获取信息的工作表,excel,vba,worksheet-function,Excel,Vba,Worksheet Function,我试图在运行时更改工作表,因此我在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

我试图在运行时更改工作表,因此我在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
Dim项作为变量
变光信息
作为整数的Dim Stat
统计=2
将线变暗为整数
直线=1
Item=“案例”
工作表(项目)。激活
做
直线=直线+1
循环而单元格(行“B”)为空
做
信息=单元格(1,统计)
Info=InputBox(“项目是什么”&Info&“?”)
单元格(行、状态)=信息
循环而单元格(1,Stat)为空
activate函数确实像我所希望的那样打开名为“Cases”的工作表,但是当这个部分运行“Info=Cells(1,Stat)”时,即使我看到了“Cases”工作表,它仍然会从上一个工作表中获取信息


我查看了我编写的另一个vba代码,我使用了相同的方法,它在那里工作,但我找不到我在那里做的任何不同的东西,可以使它在那里工作,但在这里丢失了。

将工作表拉入它自己的局部变量,你不需要
激活
任何东西(如果您有
工作簿
对象,请使用它代替
活动工作簿
来限定
工作表
调用)

现在,在不循环的情况下获取最后一行/下一行:

Dim line As Long
line = ws.Range("B" & ws.Rows.Count).End(xlUp).Row + 1
现在,您的循环条件不起作用了,因为Excel中的任何内容都不会是
Null
。相反,请查找
空的
单元格,并使用
ws
变量限定每个
单元格
成员调用:

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)

一般来说,您希望避免
激活
。尽管主要是关于避免
选择
,但请仔细阅读,尤其是关于明确工作表和工作簿的部分。我已经尝试过编写我所需的确切路径,这只是让代码崩溃。您不需要编写路径,除非在
打开
工作簿。例如,Excel中不会出现任何
Null
。查找最后一行不需要循环:您需要
Line=active工作簿.Worksheets(“Cases”).Range(“B”和Rows.Count)。End(xlUp).Row+1
。这正是我想要的,非常感谢。现在我只是想弄清楚,在另一个VBA cod上,它是如何按照我在这里尝试的方式工作的
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)