度々お世話になっております。
環境は6のパーソナル、OSがXP、エクセル2Kです。
過去ログを参照しても残念ながら理解できず、途中までのコードも
書けないため質問させていただきます。
下記のような流れでエクセルのデータをTComboBoxで読み込んで違う
フォームにあるEditに書き込みをしたいと思っています。
①C:\試作2\PDB.xlsのCRPDB(シート名)のセルA4:A(空欄でない最後の
行番号を検索して)までの商品リストをForm4にあるTComboBoxで表示させる。
②例えばA7の商品名を選びOKボタンを押したらForm3にあるいくつかの
EditにセルB7、C7、D7、E7・・・・Z7までの詳細情報を書き込みForm4とエクセ
ルを閉じる。
ご存知の方いっらしゃいましたらご指導いただけますでしょうか。
よろしくお願い申し上げます。
OLEでできます。
USESにComObjを追加します。
これは(1)の例です。
(2)は意味が判りません。
procedure TForm1.Button1Click(Sender: TObject);
var
Excel: Variant;
WorkBook: Variant;
WorkSheet: Variant;
VA: Variant;
i : Integer;
S : String;
begin
Excel := CreateOleObject('Excel.Application');
Excel.Visible := True;
WorkBook := Excel.WorkBooks.Open(ExtractFilePath(Application.ExeName) + 'book1.xls');
WorkSheet := Excel.ActiveWorkBook.ActiveSheet;
ComboBox1.Items.Clear;
i := 4;
VA := WorkSheet.Cells[i,1].value;
S := trim(VarToStr(VA));
while (S <> '') do
begin
ComboBox1.Items.Add(S);
inc(i);
VA := WorkSheet.Cells[i,1].value;
S := trim(VarToStr(VA));
end;
ComboBox1.ItemIndex := -1;
Excel.Quit;
Excel := Unassigned;
end;
HOotaさま、どうもありがとうございます。親切に書いていただいて
恐縮です。確認に手間取って返事が遅くなり申し訳ありません。
USESにComObjを追加し、ファイル名を'PDB.xls'にして動作させたら、
エクセルファイル'PDB.xls'(起動時にマクロが走りるファイルです)
を保存しますか?とエクセル終了のメッセージが表示されます。
>Excel.Quit;
まで進んでいるためだと思うのですが、Excel.Quit;の上の部分に
説明不足であった②の処理をしたいと思っています。
下記で②の処理を訂正いたします。
②例えばTComboBoxで'PDB.xls'のActiveSheetのセルA7にある商品名
(A列は商品名、B列からZ列までがその商品の詳細情報です)を
選び、Button2を押すと、Form3にあるLabeledEdit1〜26までに
'PDB.xls'のActiveSheetのセルA7〜Z7までの内容を書き込み、その
後Form4とエクセルを閉じる。
としたいのです。
また、①の時、
>procedure TForm1.Button1Click(Sender: TObject);
ですが、Button1Clickではなく、TComboBoxの右端にある「▼」部分を
クッリクすると動くようにする事は可能でしょうか?
あくまでも例としてご指導くださったのは理解しているのですが、
サンプルから加工する知識が乏しくてこずっております。
申し訳ありませんがお知恵をいただきたくお願い申し上げます。
宜しくお願い申し上げます。
丸数字の使用は、機種依存文字なので、Web上での使用はやめましょう。
Excel.ActiveWorkBook.Saved := true;
で保存したことにすれば「保存しますか?」の表示は押さえられます。
(2)はTcomboboxのIndexで何番目の商品を選んでいるかわかるので、対応するセルの処理をすればOKです。
TComboBoxの右端にある「▼」部分をクッリクすると動くようにすることの意味がわかりません。
HOotaさんおはようございます。
丸数字の件申し訳ありません。以後気を付けます。
(2)の件はIndexで行番号を取得できました。
「▼」の件はリストを表示する時のクリックするボタンを言いたかった
のですが、これはForm4のOnShowイベントで対応する事で解決できました。
残りの個々のセルの内容をLabeledEditに表示させる何とかコードは自分
でやってみようと思います。
色々ご指導いただき感謝申し上げます。どうもありがとうございました。
ツイート | ![]() |