我更新了我的帖子和程序,并解决了所有操作员错误。该过程现在按预期工作一半,而不是将值放在列E中,它将它们放在列J上。如果我从列E更改为列B,那么它将值放在G上。所以问题是,某种程度上正在转移我的值从我需要的列到右边的6列。
这是我的整个代码。
Dim xlWB As Excel.Workbook = CType(Globals.ThisWorkbook.Application.ActiveWorkbook, Excel.Workbook)
Dim xlWSPosition As Excel.Worksheet = CType(CType(xlWB.Sheets("byPosition"), Excel.Worksheet), Excel.Worksheet)
With xlWSPosition
.Application.ScreenUpdating = False
'.Columns("E").Insert(Excel.XlDirection.xlDown)
'.Range("E1").Value = "Exemption"
'.Cells.EntireColumn.AutoFit()
Dim colValue As Excel.Range
Dim lngLr As Long
lngLr = .Range("E" & .Rows.Count).End(Excel.XlDirection.xlUp).Row
.Application.ScreenUpdating = True
For Each colValue In .Range("F2:F" & .Range("F" & xlWSPosition.Rows.Count).End(XlDirection.xlUp).Row)
If colValue.Value > 0 Then
colValue.Cells.Range("E2:E" & lngLr).Value = "N"
Else
colValue.Cells.Range("E2:E" & lngLr).Value = "Y"
End If
Next colValue
End With
End Sub
正如您在屏幕截图中看到的那样,N值转到列J而不是E,而且,当查找> 0
时,似乎它会向下移动一行
应该是这样的:
答案 0 :(得分:1)
您收到此错误消息是因为打算使用Range
执行无效操作(检查它是否大于零)。你应该使用Value
属性,而不是整个Range
。在这里,您可以更正代码,这将有助于您更好地理解事物:
For Each range In .Range("F2:F" & .Range("F" & xlWSPosition.Rows.Count).End(XlDirection.xlUp).Row)
If(range IsNot Nothing AndAlso range.Value.Trim().Length > 0) Then
Dim colValue As Double = DirectCast(range.Value, Double)
If colValue > 0 Then
.Cells(xlWSPosition.Rows, "E").Value = "N"
Else
.Cells(xlWSPosition.Rows, "E").Value = "Y"
End If
End If
Next
请注意,我假设给定单元格中的值是Double
类型;请将此位(colValue
的类型和DirectCast
中的类型)调整为您期望的类型。