簡體   English   中英

Excel VBA無法正確驗證整數值以進行比較

[英]Excel VBA isn't Validating integer values correctly for comparison

基本上,我試圖遍歷一列(R:R)中的值小於50的單元格

這是代碼:

Sub Macro1()
'
' Macro1 Macro
'
'
    Sheets("Pyxis Inventory 6North1 and 6No").Select
    Cells(1).EntireRow.Copy (Sheets("Sheet1").Range("A1").EntireRow)
    Cells(1).EntireRow.Copy (Sheets("Sheet2").Range("A1").EntireRow)

    Dim val1, val2 As String
    Dim i, j, x As Integer
    Dim colCount As Integer
    Dim daysUnused As Boolean
    Dim daysVal As Integer
    colCount = Sheets("Pyxis Inventory 6North1 and 6No").Range("A1").CurrentRegion.Rows.Count

    daysUnused = IsEmpty(Sheets("Settings").Range("B2"))
    If daysUnused = True Then
        'do nothing yet

    ElseIf daysUnused = False Then
        daysVal = Sheets("Settings").Range("B2").Value
        For x = 2 To colCount
            If Cells(x, 18).Value <= daysVal Then
                Cells(x, 18).EntireRow.Copy (Sheets("Sheet4").Range("A1").Offset(x, 0))
                Cells(x, 18).EntireRow.Delete
            End If
         Next x
    End If
End Sub

我的問題是它不會刪除數字少於50的行。

我已經將第18列中的單元格的格式也設置為僅數字。

我想做的基本上是排序,但不是要保留值,而是要刪除小於50的任何內容或用戶為daysVal變量輸入的內容。

謝謝

首先,最佳做法是刪除行從底部開始並進行處理。 例如, For x = colCount to 2 step -1

If daysUnused = TrueElseIf daysUnused = False Then則對一個簡單的布爾值進行了過度評估。 后者可以簡化為“ Else 根據嚴格的定義,如果在True時不打算做任何事情,那么Not綽綽有余。

daysUnused = IsEmpty(Sheets("Settings").Range("B2"))
If Not daysUnused Then
    daysVal = Sheets("Settings").Range("B2").Value
    For x = colCount to 2 step -1
        If Cells(x, 18).Value <= daysVal Then
            Cells(x, 18).EntireRow.Copy Sheets("Sheet4").Range("A1").Offset(x, 0)
            Cells(x, 18).EntireRow.Delete
        End If
     Next x
End If

聽起來您好像陷入了行跳過陷阱,使從上到下(刪除列時從右到左)成為一種規范做法。 希望以上內容可以幫助您收緊代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM