2017-10-18 73 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