VBA SendKeys

  • #1
M

Mr_Tom

Bekanntes Mitglied
Themenersteller
Dabei seit
06.04.2005
Beiträge
211
Reaktionspunkte
0
Moin Moin,

ich habe eine Prozedur erstellt, die aus einer Exceltabelle Zahlen kopiert und z.B. in ein geöffnetes Editorfenster
schreibt. Mein Problem dabei, im Excel sind die Werte als Zahlen formatiert. Nach dem SendKeys wird dieses
jedoch im Editor mit Punkt als Dezimaltrennzeichen dargestellt. Durchlaufe ich diese Schritte per Hand dann funktionierts.

Jemand eine Idee?

Vielen Dank
 
  • #2
Wie sieht denn deine Prozedur aus?

Gruß Matjes :)
 
  • #3
Hallo Matjes,

also das ist der Codeteil, der den Hauptbestandteil meines Problems ausmacht. Die Fenster werden im Vorfeld gezählt und richtig geöffnet.
Das poste ich dehalb hier nicht.

Code:
Sub Start_()

Set wb = ActiveWorkbook: Set ws = wb.Sheets(1)
Set C = ws.Cells

Pt = ReturnAPPTitle(*editor*)

AppActivate Pt, True
Application.Wait (Now + TimeValue(00:00:04))

For Zähler = 2 To C(65536, 1).End(xlUp).Row
  Application.Wait (Now + TimeValue(00:00:02))
  Application.SendKeys {DOWN}, True
  Application.SendKeys {HOME}, True
  ws.Range(C(Zähler, 1), C(Zähler, 2)).Copy
  Application.SendKeys %bi, True
Next Zähler
End Sub
 
  • #4
Hallo Mr_Tom,

da scheint zu Tage zu treten, dass Excel ein englisches Programm ist, welches intern die englische dezimal-Darstellung benutzt. An der Stelle scheint das interne Format nicht in das deutsche Format gewandelt zu werden (Bug).

Umweg muß über eigene Formatierung erfolgen, z.B. wie im nachfolgenden Makro.

Gruß Matjes :)
Code:
Option Explicit

Sub Start_()

 Dim ws As Worksheet, wb As Workbook
 Dim z As Long, x As Long
 Dim sText As String

 Set wb = ActiveWorkbook
 Set ws = wb.Sheets(1)
 
 On Error Resume Next
 AppActivate Editor, True
 If Err.Number <> 0 Then
  Err.Clear
  MsgBox Editor bitte vor dem Makro-Aufruf öffnen.
  GoTo AUFRAEUMEN
 End If
 On Error GoTo 0
  
 For z = 2 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
  
  If (z Mod 5 = 0) Then->jede 5. Zeile anhalten
   Application.Wait (Now + TimeValue(00:00:01))
  End If
  
 ->entsprechend dem Type formatieren
  If VarType(ws.Cells(z, 1).Value) = vbString Then
   sText = ws.Cells(z, 1).Value
  ElseIf VarType(ws.Cells(z, 1).Value) = vbDouble Then
   sText = Format(ws.Cells(z, 1).Value, 0.00)
  ElseIf VarType(ws.Cells(z, 1).Value) = vbInteger Then
   sText = Format(ws.Cells(z, 1).Value, 0)
  Else
   sText = ws.Cells(z, 1).Value
  End If
   
  For x = 1 To Len(sText)
   Application.SendKeys Mid(sText, x, 1), True
  Next
  Application.SendKeys {RETURN}, True
  
 Next
 
AUFRAEUMEN:
 Set wb = Nothing: Set ws = Nothing
End Sub
 
  • #5
Moin Matjes,

vielen Dank für die Mühe! Es lag wirklich lediglich an der Formatierung des eingelesenen Wertes.
 
Thema:

VBA SendKeys

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben