0

我正在使用包含一些怪癖的单列数据。我在问题的详细信息下方包含了 VBA 代码。

数据组织方式的示例:

  • 姓名
  • 法庭
  • 优惠
  • 法庭
  • 优惠
  • 优惠
  • 法庭
  • 优惠

但是,由于收集数据的方式,法院并不总是列出。一旦我转置数据,这就会抛出我的列。我写的 VBA 试图纠正这个问题,只要有 Offe 的实例,如果前面的单元格是 Court,则定期打印 Offe。如果上一个单元格不是 Court,则打印上一个 Court(另存为 CourtCell),然后打印 Offe 并继续下一个单元格。

我收到一个需要对象的错误。

Sub CourtAdder()

Dim lngRowLast As Long, _
lngRowPaste As Long, _
lngColOffset As Long
Dim rngCell As Range, _
rngDataSet As Range
Dim strSourceTab As String, _
strOutputTab As String

 'Tab name containing source data.  Change to suit.
strSourceTab = "Sheet1"
 'Tab name for data output.  Change to suit.
strOutputTab = "Sheet2"

lngRowLast = Sheets(strSourceTab).Cells(Rows.Count, "A").End(xlUp).Row

 'Assumes the original dataset is in Column A and starts at Row 1.  Change to suit.
Set rngDataSet = Sheets(strSourceTab).Range("A1:A" & lngRowLast)

Application.ScreenUpdating = False

For Each rngCell In rngDataSet

    If Left(rngCell.Value, 5) = "Court" Then
        CourtCell = ActiveCell.Value
    End If
    If Left(rngCell.Value, 4) = "Offe" Then
        If Left(Rng.Cell.Value.Offset(-1, 0), 4) = "Cour" Then
            lngRowPaste = 27
            lngColOffset = 1
        Else
            ActiveCell.PasteSpecial (xlPasteValues)
            lngRowPaste = 1
            lngColOffset = 1
        End If
    Else
        lngRowPaste = lngRowPaste + 1
        lngColOffset = 1

    End If

'        Sheets(strOutputTab).Cells(lngRowPaste, lngColOffset).Value = rngCell.Value'
 '       lngColOffset = lngColOffset + 1 '


Next rngCell

Application.ScreenUpdating = True


End Sub
4

1 回答 1

0

几点:

  1. 您并没有在您的读取单元中进行物理循环,因此使用ActiveCell不会将任何内容保存到CourtCell.
  2. 显示您的原始数据,循环浏览行和列并粘贴对我来说没有意义。
  3. PasteSpecial由于您没有复制任何内容,因此using不会做任何事情,这就是您的错误所在

我会for像这样构造循环:

lngColOffset = 1
For Each rngCell In rngDataSet

    If Left(rngCell.Value, 5) = "Court" Then
    'if a court field?

        'save value and don't copy any values
        CourtCell = rngCell.Value

    Else
    'if not a court field?

        'add last saved court and current offe to out put sheet
        Sheets(strOutputTab).Cells(1, lngColOffset).Value = CourtCell
        Sheets(strOutputTab).Cells(2, lngColOffset).Value = rngCell.Value

        'go to next column to write
        lngColOffset = lngColOffset + 1

    end if

Next rngCell

我希望这是有道理的,我理解。如果没有,我可以提供更多帮助。

于 2013-03-30T11:40:32.883 回答