Итерация по строке, копирование значения из определенных ячеек в другую книгу - PullRequest
0 голосов
/ 21 апреля 2020

Я полный нуб в VBA и пытался создать сценарий, который копирует значение из следующих ячеек в базе данных (например, скопировать из ячейки A x в C11 в другом документе, затем B x в C12 и т. д. c.) и после этого сохранение заполненного документа с пользовательским именем файла.

После прочтения учебных пособий / других потоков стека вот что я придумала:

Function WypelnianieSMT()


Dim rng As Range
Dim row As Range


Set rng = Range("A2:J29")

    For i = 2 To rng.Rows.Count

        Workbooks("LISTA CZESCI-1.xlsm").Worksheets("Arkusz1").rng.Cells(RowIndex:=i, ColumnIndex:="H").Copy
        Workbooks("Szablon Specyfikacji Materiału Technicznego.xlsx").Worksheets("Formularz klasyfikacji").Range("C11").PasteSpecial Paste:=xlPasteValues

        Workbooks("LISTA CZESCI-1.xlsm").Worksheets("Arkusz1").rng.Cells(RowIndex:=i, ColumnIndex:="I").Copy
        Workbooks("Szablon Specyfikacji Materiału Technicznego.xlsx").Worksheets("Formularz klasyfikacji").Range("C12").PasteSpecial Paste:=xlPasteValues

        Workbooks("LISTA CZESCI-1.xlsm").Worksheets("Arkusz1").rng.Cells(RowIndex:=i + 1, ColumnIndex:="G").Copy
        Workbooks("Szablon Specyfikacji Materiału Technicznego.xlsx").Worksheets("Formularz klasyfikacji").Range("C13").PasteSpecial Paste:=xlPasteValues

        Workbooks("Szablon Specyfikacji Materiału Technicznego.xlsx").SaveAs Filename:="C:\***\Desktop\Makro" & Range("C2").Value & ".xlsx", FileFormat:=xlOpenXMLStrictWorkbook, CreateBackup:=False

    Next
End Function

извините, ребята, я полагаю, что сценарий полностью испорчен, но больше ничего не сработало.

1 Ответ

0 голосов
/ 21 апреля 2020

Никогда не стоит использовать ошибочный код для объяснения того, что вы хотите. Поэтому, наверное, это была не самая лучшая идея, чтобы попытаться сделать это с ног до головы. Но вы сделали. И я сделал. И это то, где мы сейчас находимся. Я надеюсь, что это полезно для вас.

Function WypelnianieSMT()
    ' 009

    ' note that 'Row' is a VBA object.
    ' The name shouldn't be used for a user-declared variable

    Dim WsList As Worksheet
    Dim WsSpecs As Worksheet
    Dim Fn As String                        ' file name
    Dim C As Long                           ' output column
    Dim R As Long                           ' input row

    ' both these workbooks must be open
    Set WsList = Workbooks("LISTA CZESCI-1.xlsm").Worksheets("Arkusz1")
    Set WsSpecs = Workbooks("Szablon Specyfikacji Materialu Technicznego.xlsx").Worksheets("Formularz klasyfikacji")

'    Dim Rng As Range
'    ' this is the joker in the deck: on which sheet is this range?
'    ' it's the ActiveSheet by default. But which is the ActiveSheet?
'    Set Rng = Range("A2:J29")

    C = 3                                   ' first column to use for output
    For R = 2 To 29
        With WsList
            .Cells(R, "H").Copy Destination:=WsSpecs.Cells(11, C)
            .Cells(R, "I").Copy Destination:=WsSpecs.Cells(12, C)
            .Cells(R, "G").Copy Destination:=WsSpecs.Cells(13, C)
        End With
        C = C + 1
    Next R

    ' you probably don't want to save the document on every loop
    ' therefore delay the sdaving until the looping is done
    ' Range("C2") is on the WsSpecs tab???
    Fn = "\Desktop\Makro" & WsSpecs.Range("C2").Value & ".xlsx"
    WsSpecs.SaveAs Filename:=Environ("Userprofile") & Fn, _
                   FileFormat:=xlOpenXMLStrictWorkbook, _
                   CreateBackup:=False
End Function

Код полностью не проверен, потому что у меня нет данных.

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