VBAについて質問です。


ExcelVBAからIEを開いて、楽天オークションサイトに自動投稿しようとしています。
getElementsByName を使用し画像の出力をしようとしているのですが、出力がどうしてもできず知っているかたおりましたらご回答いただければと思います。

objIE.Document.getElementsByName("img1")(0).Value = "D:\test.jpg"

として画像をアップしようとしてみたのですができませんでした。
間違えたコードになりますが、上記のように getElementsByName の後にできれば 画像場所のURLを書いて登録できるのが理想です。
お手数をおかけしますがわかるかたおりましたらよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2009/12/16 19:49:06
  • 終了:2009/12/17 22:53:17

ベストアンサー

id:HALSPECIAL No.3

HALSPECIAL回答回数407ベストアンサー獲得回数862009/12/17 11:56:30

ポイント100pt

ieオブジェクトを勧めたのはそもそも私です。

(HTML DOMの操作もでき、WEBの操作としてはハードルが低めだと思いましたので)

ですが、input のfileの操作がセキュリティ上厳しいとは知りませんでした。

普段、使ったことがあまりないので、すみませんでした。


対処方法ですが、

レジストリを弄ってセキュリティレベルを落とす等も考えられます。

今回は、不本意なのですが、クリップボードとキー送信を使用したサンプルを

作ってみましたので試してみてください。

Option Explicit

'-----------------------------------------------------------------------------------------
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function SetForegroundWindow Lib "User32" (ByVal hwnd As Long) As Boolean
Private Declare Function IsWindow Lib "user32.dll" (ByVal hwnd As Long) As Long

'-----------------------------------------------------------------------------------------
'クリップボード関連のAPI
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long _
                                            ) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long _
                                          ) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
                                             ByVal dwBytes As Long _
                                           ) As Long
Private Declare Function CloseClipboard Lib "User32" () As Long
Private Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long _
                                            ) As Long
Private Declare Function EmptyClipboard Lib "User32" () As Long
Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, _
                                         ByVal lpString2 As Any _
                                        ) As Long
Private Declare Function SetClipboardData Lib "User32" (ByVal wFormat As Long, _
                                                ByVal hMem As Long _
                                               ) As Long
Public Const GHND = &H42
Public Const CF_TEXT = 1
Public Const MAXSIZE = 4096
                    
'-----------------------------------------------------------------------------------------
Private Const READYSTATE_COMPLETE = 4
Private ie
Private hwndIE As Long
                     
                     
'IEを起動し、ファイルのアップロードをするサンプル(IE8 で動作)
Public Sub FileUpLoadTest()
    
    Dim url
    url = "http://aiomock2008.kage-tora.com/rakuten3.html"
    
    'ieを起動
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True
    'ウィンドウハンドルをしまっておく
    hwndIE = ie.hwnd
    
    'ページの移動
    ie.Navigate2 url
    '待機
    While ie.ReadyState <> READYSTATE_COMPLETE Or ie.Busy = True
        Sleep 200
    Wend
   
    'ファイル名をクリップボードにセットしておく
    Dim fileName As String
    fileName = "D:\テスト画像.bmp"
    
    Call SetClipBoard(fileName)
   
    Dim document
    Set document = ie.document

    '念のためにieをアクティブにする
    Call SetForegroundWindow(hwndIE)
    
    document.getElementsByName("img1")(0).Select
    
    Application.SendKeys " ", True      '何故か最初にスペースを送信しないとダメらしい
    '↑ここでようやくダイアログが上がる。これが無くても動作するようであれば尚可
    
    Application.SendKeys "^V", True     '貼付
    Application.SendKeys "%O", True     'ALT+O で開くボタンを押す
 
    document.Forms(0).submit 'サブミット

    Set document = Nothing

End Sub

'参考:moug モーグ | 即効テクニック
'       クリップボードへデータを送信する方法
'       http://www.moug.net/tech/acvba/0020004.htm
Public Function SetClipBoard(MyString As String)
    Dim hGlobalMemory  As Long
    Dim lpGlobalMemory As Long
    Dim hClipMemory    As Long
    Dim X              As Long

    '移動可能なグローバルメモリを割り当て
    hGlobalMemory = GlobalAlloc(GHND, LenB(MyString) + 1)

    'ブロックをロックして、メモリへのfarポインタを取得
    lpGlobalMemory = GlobalLock(hGlobalMemory)

    '文字列をグローバルメモリへコピー
    lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString)

    'メモリのロックを解除します。
    If GlobalUnlock(hGlobalMemory) <> 0 Then
        MsgBox "メモリのロックを解除できません" & vbCrLf & _
               "処理が失敗しました"
        GoTo OutOfHere2
    End If

    'データをコピーするクリップボードを開く
    If OpenClipboard(0&) = 0 Then
        MsgBox "クリップボードを開くことができません" & vbCrLf & _
               "処理が失敗しました"
        Exit Function
    End If

    ' クリップボードの内容を消去
    X = EmptyClipboard()

    ' データをクリップボードへコピー
    hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)

OutOfHere2:
    '  クリップボードの状態チェック
    If CloseClipboard() = 0 Then
        MsgBox "クリップボードを閉じることができません"
    End If
End Function
id:aiomock

ご回答ありがとうございます。試してみます。

2009/12/17 12:27:28

その他の回答(3件)

id:kengo9999q No.1

kengo9999q回答回数7ベストアンサー獲得回数22009/12/16 20:30:48

ポイント23pt

もしIE8をご利用でしたらセキュリティ強化の関係でスクリプトを使ってファイル参照関係のValueの変更ができなくなってます。

IE7又はIE6では出来るのでIE8を削除してみては?

id:aiomock

ご回答ありがとうございます。

Versionを確認してみたところIE7でした。

基本的には objIE.Document.getElementsByName("img1")(0).Value = "D:\test.jpg" これであっているということでしょうか?

2009/12/16 20:40:55
id:pah00 No.2

pah00回答回数208ベストアンサー獲得回数52009/12/16 22:51:34

ポイント23pt

formのenctype属性を"multipart/form-data"

にしないとだめなのですが、できてますか?

id:aiomock

ご回答ありがとうございます。

enctype属性を"multipart/form-data" にできていないです。

わからないので少し調べてみたいと思います。。

2009/12/16 23:15:35
id:HALSPECIAL No.3

HALSPECIAL回答回数407ベストアンサー獲得回数862009/12/17 11:56:30ここでベストアンサー

ポイント100pt

ieオブジェクトを勧めたのはそもそも私です。

(HTML DOMの操作もでき、WEBの操作としてはハードルが低めだと思いましたので)

ですが、input のfileの操作がセキュリティ上厳しいとは知りませんでした。

普段、使ったことがあまりないので、すみませんでした。


対処方法ですが、

レジストリを弄ってセキュリティレベルを落とす等も考えられます。

今回は、不本意なのですが、クリップボードとキー送信を使用したサンプルを

作ってみましたので試してみてください。

Option Explicit

'-----------------------------------------------------------------------------------------
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function SetForegroundWindow Lib "User32" (ByVal hwnd As Long) As Boolean
Private Declare Function IsWindow Lib "user32.dll" (ByVal hwnd As Long) As Long

'-----------------------------------------------------------------------------------------
'クリップボード関連のAPI
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long _
                                            ) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long _
                                          ) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
                                             ByVal dwBytes As Long _
                                           ) As Long
Private Declare Function CloseClipboard Lib "User32" () As Long
Private Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long _
                                            ) As Long
Private Declare Function EmptyClipboard Lib "User32" () As Long
Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, _
                                         ByVal lpString2 As Any _
                                        ) As Long
Private Declare Function SetClipboardData Lib "User32" (ByVal wFormat As Long, _
                                                ByVal hMem As Long _
                                               ) As Long
Public Const GHND = &H42
Public Const CF_TEXT = 1
Public Const MAXSIZE = 4096
                    
'-----------------------------------------------------------------------------------------
Private Const READYSTATE_COMPLETE = 4
Private ie
Private hwndIE As Long
                     
                     
'IEを起動し、ファイルのアップロードをするサンプル(IE8 で動作)
Public Sub FileUpLoadTest()
    
    Dim url
    url = "http://aiomock2008.kage-tora.com/rakuten3.html"
    
    'ieを起動
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True
    'ウィンドウハンドルをしまっておく
    hwndIE = ie.hwnd
    
    'ページの移動
    ie.Navigate2 url
    '待機
    While ie.ReadyState <> READYSTATE_COMPLETE Or ie.Busy = True
        Sleep 200
    Wend
   
    'ファイル名をクリップボードにセットしておく
    Dim fileName As String
    fileName = "D:\テスト画像.bmp"
    
    Call SetClipBoard(fileName)
   
    Dim document
    Set document = ie.document

    '念のためにieをアクティブにする
    Call SetForegroundWindow(hwndIE)
    
    document.getElementsByName("img1")(0).Select
    
    Application.SendKeys " ", True      '何故か最初にスペースを送信しないとダメらしい
    '↑ここでようやくダイアログが上がる。これが無くても動作するようであれば尚可
    
    Application.SendKeys "^V", True     '貼付
    Application.SendKeys "%O", True     'ALT+O で開くボタンを押す
 
    document.Forms(0).submit 'サブミット

    Set document = Nothing

End Sub

'参考:moug モーグ | 即効テクニック
'       クリップボードへデータを送信する方法
'       http://www.moug.net/tech/acvba/0020004.htm
Public Function SetClipBoard(MyString As String)
    Dim hGlobalMemory  As Long
    Dim lpGlobalMemory As Long
    Dim hClipMemory    As Long
    Dim X              As Long

    '移動可能なグローバルメモリを割り当て
    hGlobalMemory = GlobalAlloc(GHND, LenB(MyString) + 1)

    'ブロックをロックして、メモリへのfarポインタを取得
    lpGlobalMemory = GlobalLock(hGlobalMemory)

    '文字列をグローバルメモリへコピー
    lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString)

    'メモリのロックを解除します。
    If GlobalUnlock(hGlobalMemory) <> 0 Then
        MsgBox "メモリのロックを解除できません" & vbCrLf & _
               "処理が失敗しました"
        GoTo OutOfHere2
    End If

    'データをコピーするクリップボードを開く
    If OpenClipboard(0&) = 0 Then
        MsgBox "クリップボードを開くことができません" & vbCrLf & _
               "処理が失敗しました"
        Exit Function
    End If

    ' クリップボードの内容を消去
    X = EmptyClipboard()

    ' データをクリップボードへコピー
    hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)

OutOfHere2:
    '  クリップボードの状態チェック
    If CloseClipboard() = 0 Then
        MsgBox "クリップボードを閉じることができません"
    End If
End Function
id:aiomock

ご回答ありがとうございます。試してみます。

2009/12/17 12:27:28
id:kn1967 No.4

kn1967回答回数2915ベストアンサー獲得回数3012009/12/17 13:33:55

ポイント100pt

比較してやってください。もちろん自己責任で。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Macro5()
    Const READYSTATE_COMPLETE = 4
    Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True
    
    objIE.Navigate2 "ここにはURLを入れる"
    While objIE.ReadyState <> READYSTATE_COMPLETE Or objIE.Busy = True
        Sleep 200
    Wend
    
    Dim Doc As Object
    Set Doc = objIE.Document
    
    Dim objName(2) As String, fileName(2) As String, waitCount As Long, i As Long
    objName(0) = "img1"
    objName(1) = "img2"
    objName(2) = "img3"
    fileName(0) = "D:\加工済み画像\B\B1\022.jpg": '画像ファイル名をフルパスで書く。3つ全て空白も可能。
    fileName(1) = ""
    fileName(2) = ""
    
    If Len(fileName(0) & fileName(1) & fileName(2)) = 0 Then
        objIE.Document.forms(1).submit: '画像登録無しで次に進む
        Exit Sub: ' 平行して動き続けてしまうので、ここで、このプログラムを抜ける
    End If
    
    For i = 0 To 2: 'IE へのファイル名書き込み
        If fileName(i) <> "" Then
            objIE.Document.getElementsByName(objName(i))(0).Focus: 'フォーカスセット
            SendKeys fileName(i): '文字列送信開始
            waitCount = 10: '下記のループを10回までに制限し、越えたらエラーとする。
            Do: 'Valueにファイル名が正しくセットされるまでループ
                If (objIE.Document.getElementsByName(objName(i))(0).Value = fileName(i)) Then Exit Do
                Sleep 1000
                waitCount = waitCount - 1
            Loop While waitCount >= 0
            If waitCount = -1 Then Exit For: 'タイムアウトは強制的にループを抜ける。
        End If
    Next
    If i < 3 Then
        MsgBox "タイムアウトエラーとなりました。処理は終了します。"
        Exit Sub: ' このプログラムを抜ける
    Else
        objIE.Document.forms(0).submit: ' 画像を転送して、画像確認画面に進む
        Exit Sub: ' 平行して動き続けるので、念のため、ここで、このプログラムを抜ける
    End If
End Sub
id:aiomock

ご回答ありがとうございます。

2009/12/17 15:05:33
  • id:aiomock
    練習場所を作ってみました。

    http://aiomock2008.kage-tora.com/rakuten3.html

    うまく登録できず、できる方おりましたらご回答いただければと思います。
    よろしくお願いいたします。
  • id:aiomock
    自分でそれなりの形を作ってみたく作成したのですが、うまくできません。。。


    objIE.Document.getElementsByName("img1")(0).Click

    ↑これをすると参照ボタンをクリックしウィンドウ画面が出てきます。

    Dim fs As New Scripting.FileSystemObject
    Dim f As File
    Set f = fs.GetFile("D:\加工済み画像\B\B1\022.jpg")

    ↑この命令でファイルのデータをまず変数に入れたいと思います。

    Print f ←格納した変数を 出てきたウィンドウの ファイル名(N)に書き込み

    Close f ←閉じて画像のURLを登録。


    という流れでいきたいのですが、objIE.Document.getElementsByName("img1")(0).Click 
    以降が全くうまく出来ません。。。

    わかる方おりましたらアドバイスをいただければと思います。。

    お手数おかけします。
  • id:kn1967
    オークションだから当然、画像もありますよね。
    もっと早く気づいて「ブラウザを通してでは出来ない」とお答えすべきでした。

    IEなどのブラウザは、
    プログラムからはfile転送の部分に書き込みできなくなってます。
    (パソコン上からの情報流出を防ぐためらしいです。)

    「出来ないというのは嘘」というツッコミが入ると嫌なので、
    正直に書きますが、無理やりな方法であれば、無くは無いです。
    ただし、環境依存度が高く、不安定で、セキュリティ的にも問題があり、
    スキルの無い人に教える訳にはいかない危険とも言える代物なので、
    公の場に書くことは憚られます事、ご了承ください。
    (スキルのある人ならばブラウザを通さず直接叩くでしょうけどね。)

    id:kengo9999q >IE7又はIE6では出来る
      IE6でも代入は無視されます。(なぜかエラーにはならない)

    id:pah00 >formのenctype属性を"multipart/form-data"にしないとだめ
      コメント欄の練習場所どころか、質問文も読んでないようですね。
      楽天オークションサイトに潜り込んで勝手に改変しろとでも言いたいのかしら?
      それにつけてもキッツイ洒落のIDでんなぁ。(笑)
  • id:aiomock
    kn1967 さん

    ご回答ありがとうございます。

    VBAでは基本的に無理ということですね。

    しかし、大変便利なところまで来たのでこの画面以降は手動で処理するなどの方法をとりたいと思います。

    いつもご回答ありがとうございます。
  • id:kn1967
    SendKeyを使うのが危険の呼び水なので回答しなかったんだけど・・・。
    ひとつでたら、一緒だし、せっかくだから、
    回答投稿して長所と短所を洗い出してもらったほうが得策かな?
  • id:aiomock
    ご回答ありがとうございます。
    両方参考にさせていただきました。

    とっかかりの部分でkn1967さんの方がやりやすそうだったので、まず実行してみました。
    実行してみたところ、参照クリック、写真アップの動きを本サイトでしたのですが、実際に写真がアップされていなくボタンを押すとエラーページへ移動しました。
    エラーメッセージは

    下記、1箇所の入力エラーがあります。
    ・ 登録する画像を選択してください。画像を登録しない場合は、「画像を登録せずに完了する」ボタンを押下してください。

    というものです。組み込みとしては、シンプルでとても理想的だったのですがいまひとつ動いていない状況です。

    次にHALSPECIALさんのコードを実行させていただきました。
    IE7で実行してみましたが出来なかったのでIE8をインストールしました。
    本サイトで登録が出来ましたので、
    今現在HALSPECIALさんのをプログラムに組み込んでいます。





  • id:aiomock
    最後に少しお伺いしたいのですが、現在写真1枚目を登録後の2,3枚目の登録で苦戦しており

    以下のようなコードを自分で作成してみました。

    Dim fileName As String
    fileName = "D:\test.jpg"

    Call SetClipBoard(fileName)


    '念のためにieをアクティブにする
    Call SetForegroundWindow(hwndIE)

    objIE.document.getElementsByName("img1")(0).Select

    Application.SendKeys " ", True '何故か最初にスペースを送信しないとダメらしい
    '↑ここでようやくダイアログが上がる。これが無くても動作するようであれば尚可

    Application.SendKeys "^V", True '貼付
    Application.SendKeys "%O", True 'ALT+O で開くボタンを押す

    Set objIE.document = Nothing
    Set fileName = Nothing



    fileName = "D:\test2.jpg"

    Call SetClipBoard(fileName)


    '念のためにieをアクティブにする
    Call SetForegroundWindow(hwndIE)

    objIE.document.getElementsByName("img2")(0).Select

    Application.SendKeys " ", True '何故か最初にスペースを送信しないとダメらしい
    '↑ここでようやくダイアログが上がる。これが無くても動作するようであれば尚可

    Application.SendKeys "^V", True '貼付
    Application.SendKeys "%O", True 'ALT+O で開くボタンを押す

    Set objIE.document = Nothing
    Set fileName = Nothing


    fileName = "D:\test3.jpg"

    Call SetClipBoard(fileName)


    '念のためにieをアクティブにする
    Call SetForegroundWindow(hwndIE)

    objIE.document.getElementsByName("img3")(0).Select

    Application.SendKeys " ", True '何故か最初にスペースを送信しないとダメらしい
    '↑ここでようやくダイアログが上がる。これが無くても動作するようであれば尚可

    Application.SendKeys "^V", True '貼付
    Application.SendKeys "%O", True 'ALT+O で開くボタンを押す

    Set objIE.document = Nothing
    Set fileName = Nothing


    これだと一枚目だけしかアップ出来ない状況です。

    私個人としては


    Set objIE.document = Nothing
    Set fileName = Nothing

    で2つとも初期化して 2,3枚目も同じように登録しようとしたのですが、


    Set fileName = Nothing

    の fileName がオブジェクトが必要です。というエラーが出てしまいます。

    最初の  Dim fileName As String で宣言しているのになんでこのエラーが出てくるのかわからないのですが、詳しいかたおりましたら教えていただけないでしょうか。私のコード自体が間違いありましたら修正していただければと思います。お手数をおかけしますがよろしくお願いいたします。
  • id:kn1967
    環境依存高かったようですね。
    既に組み込みにチャレンジしているようなので、
    私のほうは、お暇のある方がテストしてくださるのを祈りましょうか。
    ポイントはゼロにしておいてください。

    確認方法を追記しておきますと、
    最後のほうの objIE.Document.forms(0).submit をコメントアウト。
    起動してIEの画面にファイル名が記入されてる状態になったら、
    手動でファイル選択のボタンをクリックして
    正しいファイルの場所をしめしているかを確認、
    そして送信ボタンをクリック。
    ここまで問題なければ、あとはタイミング調整。
    問題があるようならセキュリティ関連見直しになるので面倒。
  • id:kn1967
    そりゃまぁねぇ・・・
    1個目終わりの時点で Set document = Nothing しちゃったら
    2個目始まりの時点では IEと繋がってないから当然と言えば当然。
    2個目や3個目の開始時点で Set document = ie.document しないとね。

    それも面倒なので、せっかくという訳でもないけど、私のコードを少し加えてみた。
    改造点は「ファイル名をクリップボードにセットしておく」以下の部分を少しだけ。

    Dim document
    Set document = ie.document

    Dim objName(2) As String, fileName(2) As String, i As Long
    objName(0) = "img1"
    objName(1) = "img2"
    objName(2) = "img3"
    fileName(0) = "D:\テスト画像.bmp":
    fileName(1) = ""
    fileName(2) = ""

    For i = 0 to 2
    'ファイル名をクリップボードにセットしておく
    Call SetClipBoard(fileName(i))
    '念のためにieをアクティブにする
    Call SetForegroundWindow(hwndIE)
    document.getElementsByName(objName(i))(0).Select
    Application.SendKeys " ", True '何故か最初にスペースを送信しないとダメらしい
    Application.SendKeys "^V", True '貼付
    Application.SendKeys "%O", True 'ALT+O で開くボタンを押す
    Next
    document.Forms(0).submit 'サブミット
    Set document = Nothing

    いきなり書いてますので動作確認はしてないです。
  • id:aiomock
    ご回答ありがとうございます。

    一部変更後実行しました。
    変更したのは、プログラムの流れから
    document を objIE.document で行いました。
  • id:HALSPECIAL
    HALSPECIAL 2009/12/17 23:55:22
    今回のSendKeysのポイントは、

    1.SendKeys の引数
    これの第2引数はデフォルトだとFalseです。
    TrueとしてWaitさせたほうがいいです。
    安定すると思います。
    http://www.accessclub.jp/samplefile/help/help_187_2.htm


    2.日本語文字のSendKeys
    日本語文字はキー送信できないと思います。
    なので私の場合、クリップボードを経由しました。


    また、クリップボードに関してはVBAの機能を使えばもっと簡潔になるかと思います。
    こちらの方が、すっきりして分かりやすいかと。
    http://officetanaka.net/excel/vba/tips/tips20.htm
    ライブラリを追加参照させたりと私にとっては面倒そうだったのでwin32apiを使ってしまいました。


    SendKeysコマンドは、アクティブウインドウに対して、プログラムからキー送信するのですが、
    相手方のウィンドウがアクティブでなかったり、ビジーでキー送信を受け取ってくれなかったりすると
    破綻します。


    完全確実に動作させるのは不可能だと思ってください。
    ですので、極力安定した動作に近づける必要があります。


    id:kn1967さんのようにリトライするのも有効ですね。
  • id:aiomock
    ご回答ありがとうございます。

    おかげさまで自動出品が出来るようになりました。

    後はエクセルのデータとプログラムを結び付けるのみになりました。 


    SendKeysコマンド というのがあることを知って今回はとても勉強になりました。

    本当にありがとうございます^^。

  • id:kn1967
    既に HALSPECIAL さんから詳しい説明をいただいているので、
    蛇足になりますが、2つのコードの大きな違いについて、
    触れておきたいと思います。

    まず第一に、Sendkeys はキーボード操作だけのエミュレートなので、
    画面を見ずに操作するようなものです。文字列を書き込んでる最中に、
    他の起動中のソフトや常駐ソフトなどが勝手に前に出てきてしまうと、
    途中から、前面にきてしまったソフトのほうの操作になってしまう。
    しかも、それを完全制御する手段はないときている。
    (画面を見ずに打ち込んでるんだから、制御できるはずもない。)

    その点、
    クリップボードから貼り付けろという1命令を実行させる場合は、
    少なくとも、途中で切れるという中途半端はなくなりますから、
    確実性はあがります。
    確実性はあがりますが、HALSPECIAL さんもおっしゃるとおり、
    正しく書き込めたかの確認は必要ですから、組み込んでくださいね。

    それと、
    確かに全角文字については挙動がおかしい場合があるような気がします。
    無理に変更する必要はありませんが、可能であれば画像フォルダ名も、
    半角英数のみにしておくほうが良いかもしれません。

    ここから先のデータ読み取りに関してはExcelの本領の部分ですから、
    楽になってくるでしょう。 良い所取りして仕上げていってください。

    では、またどこかで・・・。
  • id:HALSPECIAL
    HALSPECIAL 2009/12/18 02:10:13
    id:kn1967さん

    >確かに全角文字については挙動がおかしい場合があるような気がします。
    一点だけ、
    SendKeysコマンドは、
    文字の送信ではなく、『キーストローク』を送るイメージなので、
    全角文字の送信はできません。

    もしやるのであれば、
    日本語入力モードにしてから、
    キー送信→適宜、日本語変換
    という作業をしなければならないでしょう。
  • id:kn1967
    id:HALSPECIALさん。
    自分でキーボード操作のエミュレートと書いておきながら、
    その点、昨日からボケたままでした。 訂正ありがとうございます。

  • id:aiomock
    より詳しい情報ありがとうございます。勉強になります。
    今後の機会に是非是非役立たせていただきます^^。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません