2016-07-11 7 views
0

I Datagridview Werte zu kopieren versuche, zu übertreffen, so weit, ich diesen Code haben, die funktioniert, aber nur linearKopieren vb.net Datenraster Werte mit vba Sendkeys zu übertreffen

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 

Was würde ich tun möchte, ist, kopiere Daten von einem Datagrid, das Datagrid besteht aus 4 Zeilen und 4 Spalten, ich würde alles aus dem Datagrid in meine Excel mit VBA Sendkeys kopieren wollen. Vielen Dank im Voraus!

EDIT:

Ich kenne diesen Code haben, aber die Ausgabe ist diagonal

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

Ich bin nicht wirklich erfahren mit VB und Schlüssel senden, aber können Sie nicht einfach durch die Zellen Schleife? Zum Beispiel 'ActiveCell.Offsett (y, x) .Select' –

+0

@BennoGrimm Sir könnten Sie es ausarbeiten? Ich benutzte Offset, aber die Referenz geht nicht neben der Zelle, es geht eher in eine diagonale Position – UserSeriously

+0

Kannst du erklären, was du meinst mit _Es funktioniert aber nur linear_? –

Antwort

0

Also irgendwie auf dem Netz die Antwort finden konnte ich, was ich fehlte, war die Schleife. Aber irgendwie konnte ich nicht dynamisch bestimmen, wie viele Zeilen es in meiner Datagridview gibt, ich habe einfach eine statische Nummer angegeben. aber bei weitem ist das die nächste Sache, die ich bekommen konnte.

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

So wie viele Beiträge, die ich gelesen habe, und Antworten auf andere Foren wie diesen Thread, "Sie konnten nicht die genaue Anzahl der Zeilen in einem Datagrid ermitteln, da es keine Möglichkeit gibt, VBA das Objekt von einer Anwendung auf seine Shell, SendKeys erben kann konnte nur Tastenanschläge senden, nichts mehr ". Also, ich habe gerade sendkeys Tab gesendet, um alle Texte im Datagrid zu kopieren, lösche dann die letzte Zeile, die es kopieren würde, und deklariere, dass die letzte Zeile statisch ist. – UserSeriously