Excel VBA sheets.activate不会更改从中获取信息的工作表
我试图在运行时更改工作表,因此我在VBA中编写了以下代码: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
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)