Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 要在特定工作表上运行的VBA宏_Excel_Vba - Fatal编程技术网

Excel 要在特定工作表上运行的VBA宏

Excel 要在特定工作表上运行的VBA宏,excel,vba,Excel,Vba,我希望有一个宏运行一个特定的工作表只。宏的目的是查找指定的范围并查找负值,如果有,则将整行提取到新工作表中,同时将这些负值转换为正值。我想出了一些,但我确信这是完全错误的…错过了很多东西。仍在努力学习,这是vba的新东西。提前感谢您提供的任何帮助。fyi ntp代表消极和积极。我不确定这是否有用,只是想我可以把所有的细节写进我的小“代码” 子ntp() 将ws设置为工作表 如果ws.Name为“originalNeg”,那么 对于范围内的每个单元格(“I2:I1048576”) 如果单元格值

我希望有一个宏运行一个特定的工作表只。宏的目的是查找指定的范围并查找负值,如果有,则将整行提取到新工作表中,同时将这些负值转换为正值。我想出了一些,但我确信这是完全错误的…错过了很多东西。仍在努力学习,这是vba的新东西。提前感谢您提供的任何帮助。fyi ntp代表消极和积极。我不确定这是否有用,只是想我可以把所有的细节写进我的小“代码”

子ntp()
将ws设置为工作表
如果ws.Name为“originalNeg”,那么
对于范围内的每个单元格(“I2:I1048576”)
如果单元格值<0,则
Cell.Value=Abs(Cell.Value)
如果结束
下一个细胞
端接头
而不是名称上的if。

子ntp()
Sub ntp()
Dim ws      As Worksheet
Dim cel     As Range
With Activeworkbook.Worksheets("originalNeg")
    For Each cel In .Range("I2:I" & .Range("I" & Rows.Count).End(xlUp).row)
        If cel.Value < 0 Then cel.Value = Abs(cel.Value)
    Next cel
End With
End Sub
将ws设置为工作表 暗淡的cel As范围 使用Activeworkbook.Worksheets(“originalNeg”) 对于.Range中的每个cel(“I2:I”和.Range(“I”和Rows.Count).End(xlUp.row) 如果cel.Value<0,则cel.Value=Abs(cel.Value) 下一个细胞 以 端接头
这将使用工作表,并注意将范围链接到特定工作表的
范围()之前的


此外,您很少希望使用列中的所有单元格。我使用
.End(xlUp).Row
获取第一列中最后使用的行,供您循环使用。

Rows.Count
?不合格的来吧,额外的
打字并不费力。事实上,考虑到您有一张不合格的
工作表
,因此您引用的是
活动工作簿
中的工作表,因此它与
活动工作表
是同一个工作簿,在这种情况下,这并不重要。但是,如果活动工作簿是
xlsx
文件,并且您所引用的工作表位于
xls
文件中,则
ActiveSheet.Rows.Count
将是
1048576
并且正在处理的工作表将只有
65536
行,因此给出1004错误。(而且,如果文件是相反的,你可能会错过第1000000行的使用,因为你从65536上升了。)我只是喜欢一直使用它,这样当人们开始处理多个工作簿时,它就不会再咬人了——让他们从一开始就养成习惯,我们最终回答的问题就更少了。(而且,FWIW,我不得不问你一年前刚刚问过的问题,我想是蒂姆或斯科特向我解释的。)@YowE3K-Ohhh,
xlsx
vs
xls
是一个很好的观点!我将在这里保留它的非限定性,只是为了保留这些注释的要点,但我将在将来限定我的
行/列。Count
。(也感谢您提醒我对
工作表进行限定,我在中编辑了该工作表)。精彩的分数,干杯D@OneaboveAll这应该是一个新问题。目前,
ws
在代码中的任何地方都没有被使用。除非您还建议对代码的其余部分进行更改以使用它(即
ws.Range
),否则设置它没有意义。
Set ws = ThisWorkbook.Worksheets("originalNeg") 
Sub ntp()
Dim ws      As Worksheet
Dim cel     As Range
With Activeworkbook.Worksheets("originalNeg")
    For Each cel In .Range("I2:I" & .Range("I" & Rows.Count).End(xlUp).row)
        If cel.Value < 0 Then cel.Value = Abs(cel.Value)
    Next cel
End With
End Sub