1

我更新了我的帖子和程序,并解决了所有操作员错误。该过程现在按预期工作了一半,而不是将值放在 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 时,它似乎又向下移动了一行

电流输出

应该是这样的:

预期成绩

4

1 回答 1

1

您收到此错误消息是因为打算使用 a 执行无效操作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

请注意,我假设给定单元格中的值是 type Double;请将此位(的类型colValue和 inDirectCast的类型)调整为您期望的类型。

于 2013-09-12T15:27:47.280 回答