TComboBoxを使いエクセルのデータを読み込むには?

解決


ゆきお  2003-09-21 00:17:58  No: 4945

度々お世話になっております。
環境は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とエクセ
  ルを閉じる。

ご存知の方いっらしゃいましたらご指導いただけますでしょうか。
よろしくお願い申し上げます。


HOota  2003-09-21 02:58:12  No: 4946

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;


ゆきお  2003-09-23 04:19:49  No: 4947

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の右端にある「▼」部分を
クッリクすると動くようにする事は可能でしょうか?
あくまでも例としてご指導くださったのは理解しているのですが、
サンプルから加工する知識が乏しくてこずっております。
申し訳ありませんがお知恵をいただきたくお願い申し上げます。
宜しくお願い申し上げます。


HOota  2003-09-23 17:14:34  No: 4948

丸数字の使用は、機種依存文字なので、Web上での使用はやめましょう。

Excel.ActiveWorkBook.Saved := true;
で保存したことにすれば「保存しますか?」の表示は押さえられます。

(2)はTcomboboxのIndexで何番目の商品を選んでいるかわかるので、対応するセルの処理をすればOKです。

TComboBoxの右端にある「▼」部分をクッリクすると動くようにすることの意味がわかりません。


ゆきお  2003-09-24 20:08:05  No: 4949

HOotaさんおはようございます。
丸数字の件申し訳ありません。以後気を付けます。
(2)の件はIndexで行番号を取得できました。
「▼」の件はリストを表示する時のクリックするボタンを言いたかった
のですが、これはForm4のOnShowイベントで対応する事で解決できました。
残りの個々のセルの内容をLabeledEditに表示させる何とかコードは自分
でやってみようと思います。
色々ご指導いただき感謝申し上げます。どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加