Когда я вызываю другую подпрограмму, используя аргумент, она выполняет действия на моем исходном листе, а не на вновь созданном листе. - PullRequest
0 голосов
/ 05 июля 2019

В своем коде я выбираю элементы из своей рабочей книги и создаю новую рабочую книгу, чтобы вставить выбранные элементы в нее.Затем я вызываю другую подпрограмму (Callothers), используя аргумент для передачи этой новой рабочей книги, чтобы оставшийся код выполнялся в новой рабочей книге.Однако вместо запуска в новой книге остальная часть кода появляется в оригинале.

Я запутался с аргументом, однако не нашел решения.

Sub occurences()
'sort

Set oldbook = ActiveWorkbook
    lRow = Cells(Rows.Count, 42).End(xlUp).Row  'Finds the last used row
    Dim coll As New Collection                  'Collections are similar to arrays, but you don't need to declare a size
    For Row = 2 To lRow                         'Loop through each row
        newitem = Sheets("Sheet1").Cells(Row, 42)  'Grab the contents of the row
        flag = False                                'flag will be false unless we find a match in our collection
        For Each Item In coll                       'loop through our collection
            If Item = newitem Then                  'check for a match
                flag = True                         'if there is a match, set flag
            End If
        Next Item
        If flag = False Then                        'if a match wasn't found,
            coll.Add newitem                        'add the new item to the collection
        End If
    Next Row                                        'now go to the next row and start again

MsgBox (coll.Count)                                 'this tells us how many items are in the collection

For Each Item In coll   'this displays each item in the collection

    Set newbook = Workbooks.Add
    MsgBox ("oldbook a2 = " & oldbook.Sheets("Sheet1").Range("A2"))
    With newbook
        Row = 1
        oldbook.Sheets("Sheet1").Range("a1:ar1").Copy .Sheets("Sheet1").Rows(Str(Row))
        nRow = 2
        For Row = 2 To lRow

            If oldbook.Sheets("Sheet1").Cells(Row, 42) = Item Then
                oldbook.Sheets("Sheet1").Rows(Str(Row)).Copy .Sheets("Sheet1").Rows(Str(nRow))
                nRow = nRow + 1
            End If
        Next Row
        fname = Replace(Item, " ", "-")
        fname = fname & ".xlsx"
        MsgBox ("about to call")
        Call CallOthers(newbook)

        .SaveAs Filename:=fname        '("C:\Users\Joshua.Elphee\Desktop\TEST Save\" & fname)
        .Close
    End With

Next Item




End Sub


Sub CallOthers(newbook)

Call Delete_Rows_Based_On_Value(newbook)

Call Delete_Rows_Based_On_Value1(newbook)

End Sub

Нет сообщения об ошибке, просто выполняет действия в неправильной книге

1 Ответ

1 голос
/ 06 июля 2019

Вам нужно добавить больше информации, но если идея такова: у вас есть две рабочие книги OLDBook и NEWBook, вы извлекаете информацию из OLDBook и помещаете в NEWBook, затем используете «Call Sub OTHER ()», и ваша проблема заключается в том, что вместо этого удаляются строки в NEWBookудалить строки в OLDBook.Для вас проблема в вашем коде ДРУГОЕ, но вы не ставите здесь (может быть, это совершенно секретный XD), поэтому вам нужны явные предложения, такие как OLDBook.Sheets (1) и NEWBook.close, тогда убедитесь, что активная рабочая книга, которую вы используете, например, OLDBook.activeпотому что когда вы используете .ADD, вы создаете переменную в виде рабочих книг (коллекции), которые имеют 2 элемента: рабочую книгу OLDBook и рабочую книгу OLDBook;однако, если вам не нравится использовать этот способ, вы также можете использовать публичные переменные поверх вашего модуля, поставить

Public OLDBook as workbook
Public OLDBook as workbook

, так что только вам нужно использовать внутри вашего sub ()

Set OLDBook = ActiveWorkbook
Set NEWBook = new Workbooks

или еслиу вас есть путь

OLDBook.open "C:\T\"
NEWBook = new Workbook
NEWBook.open
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...