Подкачка данных из другой таблицы с условием

Nik_Koraman

Всем привет!нужно осуществить подкачку данных, а именно ячейки в строку, из другой таблицы excel при условии совпадения в данной строке других 3-х ячеек. Т.е при совпадении даты смены и номера машины в одной строке, количество изготовленной продукции должна скопироваться в соответствующую ячейку другого файла
10 ответов

Nik_Koraman

подкачку сделал следующим образом
Sub Button2_Click()
Dim i As Integer

For i = <b>0</b> To <b>10</b> Step <b>1</b>

If (Workbooks("BD_VBA.xls").Worksheets("sheet1").Cells(<b>5</b> + i, <b>1</b>) = Workbooks("book2.xls").Worksheets("sheet1").Cells(<b>3</b> + i, <b>1</b>)) And (Workbooks("BD_VBA.xls").Worksheets("sheet1").Cells(<b>5</b> + i, <b>2</b>) = Workbooks("book2.xls").Worksheets("sheet1").Cells(<b>3</b> + i, <b>2</b>)) Then


Windows("BD_VBA.xls").Activate
Cells(<b>5</b> + i, <b>5</b>).Select
Selection.Copy
Windows("book2.xls").Activate
Cells(<b>3</b> + i, <b>9</b>).Select
ActiveSheet.Paste

End If

Next i

End Sub
но если второй файл не запущен тогда не срабатывает, подскажите плиз как это исправить


Nik_Koraman

> Автор: Nik_Koraman> но если второй файл не запущен тогда не срабатывает, подскажите плиз как это исправитьПроверять открыт ли нужный файл:
Dim sh As Worksheet
On Error Resume Next
Set sh = Application.Workbooks("BD_VBA.xls")
If Err.Number <> <b>0</b> Then
 MsgBox "Откройте нужный файл"
 Exit Sub
EndIf
'Дальше код выполнения переноса данных


Nik_Koraman

почему-то даже при открытом файле он пишет "откройте файл"


Nik_Koraman

> Автор: Nik_Koraman> почему-то даже при открытом файле он пишет "откройте файл"Код покажи


Nik_Koraman

Sub Button2_Click()

'Дальше код выполнения переноса данных

Dim i As Integer
Dim j As Integer
Dim s As Long
Dim s1 As Long
Dim s2 As Long
Dim s3 As Long
Dim n As Integer
Dim p As Integer
Dim nn As Integer
n = Worksheets("sheet1").Cells(<b>1</b>, <b>18</b>).Value - <b>1</b>
nn = Workbooks("BD_VBA.xls").Worksheets("sheet1").Cells(<b>1</b>, <b>18</b>).Value


For i = <b>0</b> To n Step <b>1</b>
j = <b>0</b>
For j = <b>0</b> To nn Step <b>1</b>
If (Workbooks("BD_VBA.xls").Worksheets("sheet1").Cells(<b>5</b> + i + j, <b>1</b>) = Workbooks("book2.xls").Worksheets("sheet1").Cells(<b>3</b> + i, <b>1</b>)) And (Workbooks("BD_VBA.xls").Worksheets("sheet1").Cells(<b>5</b> + i + j, <b>2</b>) = Workbooks("book2.xls").Worksheets("sheet1").Cells(<b>3</b> + i, <b>2</b>)) And (Workbooks("BD_VBA.xls").Worksheets("sheet1").Cells(<b>5</b> + i + j, <b>8</b>) = Workbooks("book2.xls").Worksheets("sheet1").Cells(<b>3</b> + i, <b>3</b>)) Then


Windows("BD_VBA.xls").Activate
Cells(<b>5</b> + i + j, <b>5</b>).Select
Selection.Copy
Windows("book2.xls").Activate
Cells(<b>3</b> + i, <b>9</b>).Select
ActiveSheet.Paste

End If
Next j
Next i

For i = <b>0</b> To n Step <b>1</b>
j = <b>0</b>
For j = <b>0</b> To nn Step <b>1</b>
If (Workbooks("BD_VBA.xls").Worksheets("sheet1").Cells(<b>5</b> + i + j, <b>1</b>) = Workbooks("book2.xls").Worksheets("sheet1").Cells(<b>3</b> + i, <b>1</b>)) And (Workbooks("BD_VBA.xls").Worksheets("sheet1").Cells(<b>5</b> + i + j, <b>2</b>) = Workbooks("book2.xls").Worksheets("sheet1").Cells(<b>3</b> + i, <b>2</b>)) And (Workbooks("BD_VBA.xls").Worksheets("sheet1").Cells(<b>5</b> + i + j, <b>9</b>) = Workbooks("book2.xls").Worksheets("sheet1").Cells(<b>3</b> + i, <b>3</b>)) Then


Windows("BD_VBA.xls").Activate
Cells(<b>5</b> + i + j, <b>6</b>).Select
Selection.Copy
Windows("book2.xls").Activate
Cells(<b>3</b> + i, <b>10</b>).Select
ActiveSheet.Paste

End If
Next j
Next i


For i = <b>0</b> To n Step <b>1</b>
j = <b>0</b>
For j = <b>0</b> To nn Step <b>1</b>
If (Workbooks("BD_VBA.xls").Worksheets("sheet1").Cells(<b>5</b> + i + j, <b>1</b>) = Workbooks("book2.xls").Worksheets("sheet1").Cells(<b>3</b> + i, <b>1</b>)) And (Workbooks("BD_VBA.xls").Worksheets("sheet1").Cells(<b>5</b> + i + j, <b>2</b>) = Workbooks("book2.xls").Worksheets("sheet1").Cells(<b>3</b> + i, <b>2</b>)) And (Workbooks("BD_VBA.xls").Worksheets("sheet1").Cells(<b>5</b> + i + j, <b>10</b>) = Workbooks("book2.xls").Worksheets("sheet1").Cells(<b>3</b> + i, <b>3</b>)) Then


Windows("BD_VBA.xls").Activate
Cells(<b>5</b> + i + j, <b>7</b>).Select
Selection.Copy
Windows("book2.xls").Activate
Cells(<b>3</b> + i, <b>11</b>).Select
ActiveSheet.Paste

End If
Next j
Next i

For i = <b>0</b> To n Step <b>1</b>

 If Worksheets("sheet1").Cells(<b>3</b> + i, <b>11</b>) = " - " Or Worksheets("sheet1").Cells(<b>3</b> + i, <b>11</b>) = "" Then Worksheets("sheet1").Cells(<b>3</b> + i, <b>11</b>) = <b>0</b>
 
 s3 = Worksheets("sheet1").Cells(<b>3</b> + i, <b>11</b>).Value

 
 If Worksheets("sheet1").Cells(<b>3</b> + i, <b>10</b>) = " - " Or Worksheets("sheet1").Cells(<b>3</b> + i, <b>10</b>) = "" Then Worksheets("sheet1").Cells(<b>3</b> + i, <b>10</b>) = <b>0</b>
 s2 = Worksheets("sheet1").Cells(<b>3</b> + i, <b>10</b>).Value
 If Worksheets("sheet1").Cells(<b>3</b> + i, <b>9</b>) = " - " Or Worksheets("sheet1").Cells(<b>3</b> + i, <b>9</b>) = "" Then Worksheets("sheet1").Cells(<b>3</b> + i, <b>9</b>) = <b>0</b>
 s1 = Worksheets("sheet1").Cells(<b>3</b> + i, <b>9</b>).Value
 s = s1 + s2 + s3
 Worksheets("sheet1").Cells(<b>3</b> + i, <b>6</b>).Value = s
 Next i

 
End Sub
вот код, желательно чтобы он подкачивал данные из BD_VBA.xls без его открытия, если это невозможно, тогда чтобы он автоматически открывался


Nik_Koraman

неужели ни у кого идей нет?=(


Nik_Koraman

> Автор: Nik_Koraman> неужели ни у кого идей нет?=(Я просил код проверки открытости книги, а не перенос данных.А идеи должны быть у тебя ;) потому, что вникать в твой код, особого желания нет, к тому-же неформатированный.Могу помочь советом с конкретными вопросами, напимер, проверка открытости книги, или что-то подобное


Nik_Koraman

конкретный вопрос=)) как обеспечить подкачку данных из закрытого файла
Windows("BD_VBA.xls").Activate
Cells(<b>5</b> + i + j, <b>7</b>).Select
Selection.Copy
Windows("book2.xls").Activate
Cells(<b>3</b> + i, <b>11</b>).Select
ActiveSheet.Paste
таким образом подкачивает только из открытого=((


Nik_Koraman

VBA не в состоянии это сделать, но вы сможете достичь поставленной цели с помощью языка XLM. К счастью, XLM можно вызвать из VBA. Ниже приведен простой пример получения значения ячейки А1 из листа Sheet1 рабочей книги myfile.xls, которая находится в папке c:\files MsgBox ExecuteExcel4Macro("'c:\files\[myfile.xls]Sheet1'!R1C1") Обратите вниманиена то, что ячейка должна быть в формате R1C1


Nik_Koraman

но честно говоря я бы юзал обычную формулу прямо в листе, без всякого VBA... что-то типа
=SUMPRODUCT((условие1)*(условие2)*диапазон)