Как я могу перенести информацию с одного листа в Excel на другой, используя VBA, основываясь на определенных условиях c? - PullRequest
0 голосов
/ 18 марта 2020

Я хочу взять значения из Qty Производится из листа PLAN для производства в листе S, соответствующее правильному названию продукта и правильному дню недели. Лист "S" Лист "PLAN" До сих пор я пробовал: 3 для циклов - одна итерация по строкам на листе S, где должен быть Qty, одна итерация по строки в листе PLAN и одна итерация столбцов на листе S вместе с 2 условиями - одна для проверки того, что это один и тот же продукт, а другая для проверки правильности даты. Вот код, который у меня есть:

Sub production()

    For k = 9 To 29 Step 4
        For n = 5 To 24

            If Sheets("plan").Cells(n, 3) = Sheets("s").Cells(k - 1, 1) Then

                For i = 3 To 23
                Set p = Sheets("S").Cells(k, i)
                    If Sheets("plan").Cells(n, 2) = Sheets("s").Cells(7, i) Then
                        p = Sheets("plan").Cells(n, 4).Value
                    End If
                Next i
            End If
        Next n
    Next k
End Sub

В настоящее время он ничего не дает. Кроме того, я попытался использовать формулу Excel «Индекс и соответствие», но проблема в том, что при ее автозаполнении меняется столбец дней в таблице PLAN. Заранее спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Я предлагаю этот поток для вашей программы.

  1. Определите, какие данные обновлять. Я предлагаю вам обновить цифры за день (и продлить, чтобы включить все последующие дни до, но исключая СЕГОДНЯ ()), то есть исключая любые более ранние дни, исходя из предположения, что они были сделаны ранее.
  2. L oop через все дни в PLAN и пропустите те, которые вам не нужны.
  3. Для оставшихся вы ищите день в S и запишите каждое число в соответствующий продукт.

Для реализации вышеуказанной стратегии вам необходимо однозначно определить дни на обоих листах. Вот почему они все должны быть датами. Текст не подойдет.

Дата представляется целым числом, например, 43909, которое идентифицирует 19 марта 2020 года. Вы можете ввести это число в ячейку (скажем, A1) или = TODAY (), а затем отформатировать ячейку как Date (Щелкните правой кнопкой мыши ячейку, выберите «Формат ячеек» и «Номер»), и вместо числа вы увидите дату, но вы можете рассчитать ее по числу. Попробуйте [B1] = A1 + 1. Вы можете применить пользовательский формат "ddd", и будут отображаться только Чт и Пт.

Используйте этот метод для создания подписей. Просто введите дату в первой ячейке заголовка, например, A3, введите =A3 + 1 в формате A4 и скопируйте формулу, если вам нужно количество дней в столбце A.

0 голосов
/ 18 марта 2020

Попробуйте приведенный ниже код ADO, вам нужно добавить библиотеку ADO в ваш проект:

Public Sub RunMe()
 Dim cnn As New ADODB.Connection
 Dim rst As New ADODB.Recordset
 Dim cmd As New ADODB.Command

 With cnx
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source='" & ThisWorkbook.FullName & "'; " & "Extended 
 roperties='Excel 8.0;HDR=Yes;IMEX=1'"
    .Open
End With


'setup the command
Set cmd.ActiveConnection = cnx
cmd.CommandType = adCmdText
cmd.CommandText = "SELECT * FROM [OutPutSheet$] where [ColumnName]=" & "'AnyValueOrVariable'"
rst.CursorLocation = adUseClient
rst.CursorType = adOpenDynamic
rst.LockType = adLockOptimistic

'open the connection
rst.Open cmd

'Assuming that you want to get the data from A2, or else you can even make it more 
'dynamic
Sheets("plan").Range("A2").CopyFromRecordset rst


'disconnect the recordset
Set rst.ActiveConnection = Nothing
'disconnect the connection
Set cnx = Nothing

End Sub

Вы можете указать условия в операторе sql.

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