Конец (xlDown) для отдельных строк - PullRequest
0 голосов
/ 05 июля 2018

У меня есть макрос, который работает 99% времени, но доставляет мне проблемы с одной порцией. У меня есть данные, которые разбиты на разные группы размеров в зависимости от определенных параметров. Группы варьируются от 1 ряда до 10+. Я пытаюсь скопировать каждую из «групп» и вставить в шаблон листа и сохранить, что я понял.

 Row  Column B  Column C
1      ASDF      a
2      SDF       a
3      WIRO      a
4      VNDH      a
5 
6      FIJDK     b
7      DFKIEL    b
8 
9      DLFKD     c
10 
11     OYPTK     d
12     SSAODKJ   d
13     SKJSJ     d

Где у меня возникли проблемы, это строка 9, где столбец b B = DLFKD и столбец C = C

Желаемый вывод: Копировать только строку 9

Фактический объем производства: Копирование строк 9-11

Существующий макрос: Данные начинаются со строки 5.

Sub templatecopy()
Dim x As Workbook
Dim y As Workbook
Dim N As Long
Dim name As String


'## Open both workbooks first:
Set x = ActiveWorkbook

'Set R
R = 5

'start Loop
Do Until N = 96
Set y = Workbooks.Open("F:\Logistics Dashboard\Customs Macro\Cover Sheet Template.xlsx")

'set N
N = Range("B" & R).Cells(1, 1).End(xlDown).Row

'Now, copy Container Numbers from x and past to y(template):
x.Sheets("Sheet1").Range("B" & R & ":C" & N).Copy
y.Sheets("Sheet1").Range("A14").PasteSpecial

'save as Name of Vessel
name = "F:\Logistics Dashboard\Customs Macro\" & y.Sheets("Sheet1").Range("A14").Value & ".xlsx"
ActiveWorkbook.SaveAs Filename:=name

'Close template after saving to reset:
y.Close



'set R equal to new row to start
R = N + 2


Loop

End Sub

Проблема в том, как я устанавливаю «N». У него возникли проблемы с распознаванием строки 9, где есть только одна строка данных.

1 Ответ

0 голосов
/ 09 июля 2018

Если выбран правильный лист, эта строка кода должна выбрать диапазоны на вашем листе:

Thisworkbook.Worksheets("Sheet1").range("B:C").specialcells(xlcelltypeconstants,23).select  

Вам потребуется добавить еще одну строку для учета формулы и констант.

Public Sub FindRegionsOnSheet()

    Dim sAddress As String
    Dim aAddress() As String
    Dim vItem As Variant
    Dim x As Long

    Dim wbTarget As Workbook

    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet

    Set wsSource = ThisWorkbook.Worksheets("Sheet1")

    Set wbTarget = Workbooks.Open("F:\Logistics Dashboard\Customs Macro\Cover Sheet Template.xlsx")
    Set wsTarget = wbTarget.Worksheets("Sheet1")

    'Find all ranges of constant & formula values in column B:C.
    With wsSource.Columns(2).Resize(, 2)
        On Error Resume Next
        sAddress = .SpecialCells(xlCellTypeConstants, 23).Address(0, 0) & ","
        sAddress = sAddress & .SpecialCells(xlCellTypeFormulas, 23).Address(0, 0)
        If Right(sAddress, 1) = "," Then sAddress = Left(sAddress, Len(sAddress) - 1)
        On Error GoTo 0
    End With

    'Place within an array.
    If Not sAddress = vbNullString Then
        If InStr(1, sAddress, ",") = 0 Then
            ReDim aAddress(0 To 0)
            aAddress(0) = "'" & wsSource.Name & "'!" & sAddress
        Else
            aAddress = Split(sAddress, ",")
            For x = LBound(aAddress) To UBound(aAddress)
                aAddress(x) = "'" & wsSource.Name & "'!" & aAddress(x)
            Next x
        End If
    End If

    ''''''''''''''''''''''''''''''''''''''''
    'Not sure how what you're doing once moved to the Target book......
    'Think this is correct, but test first...
    ''''''''''''''''''''''''''''''''''''''''
    For Each vItem In aAddress
        wsTarget.Cells.Clear
        Range(vItem).Copy Destination:=wsTarget.Range("A14")
        wbTarget.SaveCopyAs "F:\Logistics Dashboard\Customs Macro\" & wbTarget.Sheets("Sheet1").Range("A14") & ".xlsx"
    Next vItem

    wbTarget.Close

End Sub  

23 в SpecialCells указывает, какие типы ячеек следует включить в результат:

XlSpecialCellsValue constants   Value

xlErrors                          16 
xlLogical                         4 
xlNumbers                         1 
xlTextValues                      2  

Эти значения можно сложить вместе, чтобы получить более одного типа (всего = 23). По умолчанию выбираются все константы или формулы, независимо от типа .... так что, вероятно, 23 вообще не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...