2017-10-18 74 views
0

我正在寻找只有特定工作表才能运行的宏。宏的目的是查找指定范围并找到负值,以及是否有将整行提取到新工作表中,同时将这些负值转换为正值。我想出了一些,但我确信这是完全错误的...错过了很多东西。仍然试图学习,新vba的东西。预先感谢您提供的任何帮助。 fyi ntp代表负面的阳性。不知道这会帮助,只是觉得我可以所有的细节写信给我的小“代码”要在特定工作表上运行的VBA宏

Sub ntp() 
Dim ws As Worksheet 
If ws.Name <> "originalNeg" Then 
    For Each Cell In Range("I2:I1048576") 
     If Cell.Value < 0 Then 
      Cell.Value = Abs(Cell.Value) 
     End If 
    Next Cell 

End Sub 

回答

1
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 

这使用了工作表,并注意.之前Range()该范围链接到该特定片材。

此外,您很少想在列中使用所有单元格。我使用.End(xlUp).Row来获取列I中最后一次使用的行,以便循环访问。

+2

'Rows.Count'?不合格?!?!?!来吧,额外的'''不需要太多的输入。 – YowE3K

+0

@ YowE3K - 我实际上在琢磨自己 - 用'Rows.Count',不会总是**是一样的吗?我同意,呃,它在哪里?啊,'''不是很难打字。但我有意识地把它留在这里几乎要诱惑*某人*发表评论,所以我可以问。 ...那么,Rows.Count不合格实际上是否重要,或者放慢了速度? :D – BruceWayne

+2

实际上,考虑到你有一个不合格的'Worksheets',因此你所指的是'ActiveWorkbook'中的一个工作表,因此它与ActiveSheet相同,在这种情况下它不会* *问题。但是,如果活动工作簿是'xlsx'文件,并且您所指的工作表位于'xls'文件中,那么'ActiveSheet.Rows.Count'将是'1048576',并且正在处理的工作表将只具有'65536'行 - 从而给出1004错误。 (而且,如果这些文件是相反的,你可能会错过使用1000000行,因为你从65536上升了。) – YowE3K

0
Set ws = ThisWorkbook.Worksheets("originalNeg") 

,而不是如果在名字。

+2

目前,'ws'没有在代码中的任何地方使用。除非你还建议改变其余的代码来使用它(即'ws.Range'),否则'设置'它是毫无意义的。 – YowE3K

+0

完全误读问题...哎呀! – Liss