2016-07-11 4 views
0

я пытаюсь скопировать DataGridView значения, чтобы преуспеть, до сих пор, у меня есть этот код, который работает, но только линейныйКопирование значений vb.net DataGrid, чтобы преуспеть с Vba SendKeys

Sub Test() 
Dim Wkb As Workbook 

Set Wkb = ActiveWorkbook 
notepadID = Shell("C:\Program Files\Default Company Name\TestInstaller\TestApp.exe") 

SendKeys "admin", True 
SendKeys "{TAB}", True 
SendKeys "nothing", True 

SendKeys "{ENTER}", True 
SendKeys "{ENTER}", True 
SendKeys "{LEFT}", True 
SendKeys ("^C") 

Application.Wait (Now + TimeValue("0:00:02")) 
AppActivate "MicroSoft Excel" 
Application.Wait (Now + TimeValue("0:00:02")) 
ActiveCell.Offset(0, 0).Select 
Application.Wait (Now + TimeValue("0:00:01")) 
ActiveSheet.PasteSpecial 
Application.Wait (Now + TimeValue("0:00:01")) 
AppActivate "Inventory" 
SendKeys "{TAB}", True 
SendKeys ("^C") 
Application.Wait (Now + TimeValue("0:00:02")) 
AppActivate "MicroSoft Excel" 
Application.Wait (Now + TimeValue("0:00:02")) 
ActiveCell.Offset(0, 1).Select 
ActiveSheet.Paste 

End Sub 

То, что я хотел бы сделать есть, копировать данные из datagrid, datagrid составляет 4 строки и 4 столбца, я хотел бы скопировать все из datagrid в мое excel, используя vba sendkeys. Заранее спасибо!

EDIT:

Я знаю, этот код, но выход диагоналей

Sub Test() 
Dim Wkb As Workbook 

Set Wkb = ActiveWorkbook 
notepadID = Shell("C:\Program Files\Default Company Name\TestInstaller\TestApp.exe") 

SendKeys "admin", True 
SendKeys "{TAB}", True 
SendKeys "nothing", True 

SendKeys "{ENTER}", True 
SendKeys "{ENTER}", True 



Dim i As Integer 
Dim j As Integer 

i = 1 
j = 1 


SendKeys ("^C") 
Application.Wait (Now + TimeValue("0:00:02")) 
AppActivate "MicroSoft Excel" 
Application.Wait (Now + TimeValue("0:00:02")) 
ActiveCell.Offset(1, 1).Select 
'Application.Wait (Now + TimeValue("0:00:01")) 
ActiveSheet.PasteSpecial 
Application.Wait (Now + TimeValue("0:00:01")) 
AppActivate "Inventory" 
SendKeys "{TAB}", True 



If Not IsEmpty(ActiveCell.Value) Then 
Do While Cells(i, j).Value = Cells(i, j + 3).Value 
j = j + 1 
SendKeys ("^C") 
Application.Wait (Now + TimeValue("0:00:02")) 
AppActivate "MicroSoft Excel" 
Application.Wait (Now + TimeValue("0:00:02")) 
ActiveCell.Offset(i, j).Select 
'Application.Wait (Now + TimeValue("0:00:01")) 
ActiveSheet.PasteSpecial 
Application.Wait (Now + TimeValue("0:00:01")) 
AppActivate "Inventory" 
SendKeys "{TAB}", True 

If i = 4 Then 
i = i = 0 
j = j + 1 
End If 
Loop 
End If 
End Sub 
+0

У меня на самом деле нет опыта работы с VB и отправкой ключей, но разве вы не можете просто прорезать ячейки? Например, 'ActiveCell.Offsett (y, x) .Выберите' –

+0

@BennoGrimm Сэр вы могли бы разработать? Я использовал смещение, но ссылка не идет рядом с ячейкой, а скорее идет в диагональном положении. – UserSeriously

+0

Можете ли вы объяснить, что вы подразумеваете под _It работает, но только linear_? –

ответ

0

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

Sub Test() 
Dim Wkb As Workbook 

Set Wkb = ActiveWorkbook 
notepadID = Shell("C:\Program Files\Default Company Name\TestInstaller\TestApp.exe") 

SendKeys "admin", True 
SendKeys "{TAB}", True 
SendKeys "nothing", True 

SendKeys "{ENTER}", True 
SendKeys "{ENTER}", True 




Dim i As Integer 
Dim j As Integer 


i = 1 
j = 1 


SendKeys ("^C") 
Application.Wait (Now + TimeValue("0:00:02")) 
AppActivate "MicroSoft Excel" 
Application.Wait (Now + TimeValue("0:00:02")) 
ActiveCell.Offset(0, 0).Select 

ActiveSheet.PasteSpecial 
Application.Wait (Now + TimeValue("0:00:01")) 
AppActivate "Inventory" 
SendKeys "{TAB}", True 



If Not IsEmpty(ActiveCell.Value) Then 

Do While Application.CountA(Range("A:A")) <> 13 
    j = j + 1 
    SendKeys ("^C") 
    Application.Wait (Now + TimeValue("0:00:01")) 
    AppActivate "MicroSoft Excel" 
    Application.Wait (Now + TimeValue("0:00:01")) 
    Cells(i, j).Select 

    Application.Wait (Now + TimeValue("0:00:01")) 
    ActiveSheet.Paste 
    Application.Wait (Now + TimeValue("0:00:01")) 
    AppActivate "Inventory" 
    SendKeys "{TAB}", True 

If j = 4 Then 
    i = i + 1 
    j = 0 
End If 

Loop 
End If 
+0

Так, как и многие сообщения, которые я прочитал, и ответы на другие форумы, подобные этой теме: «Вы не смогли определить точное количество строк в datagrid, потому что VBA не может наследовать объект из любого приложения в его оболочку, SendKeys мог только посылать нажатия клавиш, ничего более ». Итак, я просто отправил вкладку sendkeys, чтобы скопировать все тексты в datagrid, а затем удалить последнюю строку, которую он будет копировать, объявив последнюю строку статичной. – UserSeriously

Смежные вопросы