VBAについて質問です。


現在楽天のオークションで自動投稿出来るVBAを作成しています。
問題点が一つだけ発生しており画像のアップロードで
セルに入っている値を入れたいのですが、どうしても指定したセルのコードがそのままアップされてしまいます。
例)Cell(1,11)に9の値が入っているとして。
cell(1,11)に入っている値の9を入れたいのに、cell(1,11)がアップ画面に入れられて
エラーになってしまいます。


詳しい方でコードを見ていただき、解決法を教えていただけないでしょうか?
お手数をおかけしますがよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/12/29 12:30:28
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント100pt

値を入れたい場合は下記のようにします。

fileName(0) = Cells(j, 22).value '22列目のJ行目の値が入る
fileName(1) = Cells(j, 23).value '23列目のJ行目の値が入る
fileName(2) = Cells(j, 24).value '24列目のJ行目の値が入る

ただし、この部分が動く時点では変数Jは空っぽの状態なのでエラーになります。

さらに、変数J はフォームの投稿欄に fileNameの(0)から(2)までを順に入れるためにのみ、

使っているものであって、シートのどこから取ってくるかには関与しません。


変数Jは関与しませんから、

どのセルから持ってくるかは下記のように明示しないといけません。

fileName(0) = Cells(1, 22).value '22列目の1行目の値が入る
fileName(1) = Cells(1, 23).value '23列目の1行目の値が入る
fileName(2) = Cells(1, 24).value '24列目の1行目の値が入る

とりあえず以上です。まずはご確認ください。

※質問では1,11となっているのに対して、どうして22/23/24なのかは、

 私には理解できておりませんので、上記を参考にして、

 ファイル名が入っているセルを明確にコードに書き込んでください。

 


以下、余談

この次の段階として、単品でなく連続して投稿したいという事になるでしょうから、

そのための布石として、下記のようにしておくと良いでしょう。

Dim r As Long
r = 1
fileName(0) = Cells(r, 22).value '22列目の1行目の値が入る
fileName(1) = Cells(r, 23).value '23列目の1行目の値が入る
fileName(2) = Cells(r, 24).value '24列目の1行目の値が入る

※単品での動作が完璧に近づいたら、

 「r行目を実行せよ」という指示を出すルーチンを別途作れば、

 連続投稿が可能になるという寸法です。

id:aiomock

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

2009/12/29 10:31:17
  • id:aiomock
    練習サイトは以下になります。


    http://aiomock2008.kage-tora.com/rakuten3.html
  • id:aiomock
    以下コードになります。


    Sub test()


    'IEの起動
    Dim objIE As Object '変数を定義します。
    Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
    objIE.Visible = True '可視、Trueで見えるようにします。



    '処理したいページを表示します。
    objIE.Navigate "http://aiomock2008.kage-tora.com/rakuten3.html"


    'ページの表示完了を待ちます。
    While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
    DoEvents '重いので嫌いな人居るけど。
    Wend




    Dim objName(2) As String, fileName(2) As String, j As Long
    objName(0) = "img1"
    objName(1) = "img2"
    objName(2) = "img3"

    fileName(0) = "Cells(j, 22)"
    fileName(1) = "Cells(j, 23)"
    fileName(2) = "Cells(j, 24)"

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

    Sleep 10000

    objIE.document.Forms(0).submit 'サブミット




    fileName(0) = "Cells(j, 22)"
    fileName(1) = "Cells(j, 23)"
    fileName(2) = "Cells(j, 24)"

    ↑ここの場所が問題だとは思うのですが、、詳しいかたおりましたらよろしくお願いいたします。
  • id:TRTr
    いま動作環境がないのでコメントで。
    fileNameの各行の""を外すだけの問題ではないでしょうか。


    fileName(0) = Cells(j, 22)
    fileName(1) = Cells(j, 23)
    fileName(2) = Cells(j, 24)


    ファイル名を文字列で指定するときには""で括る必要があります。
    文字列を返す関数から値を代入するときには括らなくても大丈夫です。
  • id:aiomock
    ご回答ありがとうございます。

    無事実行できました。

    ファイル名用の変数を作って実行したら無事に解決出来ました。
    ありがとうございます。

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

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

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

回答リクエストを送信したユーザーはいません