对Excel内部编程熟悉的高手请进!(50分)

  • 主题发起人 主题发起人 雨林18
  • 开始时间 开始时间

雨林18

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在Excel里实现这样一个功能,当在某个单元格里输入一个数字时他会去数据库里查找相对应的数据然后放在第二个单元格里,在Excel里如何实现!!
例如 在第一个单元格里输入8.1 然后他就会去查找数据库 字段a 为 8 字段b 为 0.1 然后把字段c的值放到第二个单元格里
数据库结构如下
a b c
8 0.1 100
8 0.3 200
9 0.1 250
数据库用什么都无所谓甚至用文本都可以只要能够在Excel实现查找数据功能就可以,但一定要在Excel里编程实现!望高手指点!
 
可以用VBA实现(EXCEL)
 
to sim_alan
能不能说得详细些,我对Excel内部编程不是很熟,谢谢!
 
Excel中的工具-->宏-->Visual Basic 编辑器,在这里你几乎可以完成全部功能
 
to dey-999
能不能给我完整的例子谢谢啦!!
 
http://www.delphibbs.com/delphibbs/listq.asp?sort=6&type=2&expert=雨林18
楼主不厚道呀。
嘿嘿。
 
這是我回答過的一個,希望對你有幫助.

/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//把Excel文件當成一個數據庫,
//把文件裏的Sheet1,Sheet2,Sheet3...當成是數據庫裏的表
//這樣你就操作自如了,
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, Buttons, ExtCtrls;

type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
OpenDialog1: TOpenDialog;
ListBox1: TListBox;
Panel1: TPanel;
Button1: TButton;
Edit1: TEdit;
SpeedButton1: TSpeedButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit1.Text:= OpenDialog1.FileName;
end;

//ADOConnection1,ADOQuery1,DataSource1,DBGrid1, ListBox1

procedure TForm1.Button1Click(Sender: TObject);
var
ConnStr, FileName: string;
i: integer;
begin
FileName:= Edit1.Text; //Excel File Name
ConnStr:= ''+
' Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin; ' +
' Data Source=' + FileName + ';Mode=Share Deny None;Extended Properties=Excel 8.0; ' +
' Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password=""; ' +
' Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2; ' +
' Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB: ' +
' Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don''t Copy Locale on Compact=False; ' +
' Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False ';
ADOConnection1.Connected:= false;
ADOConnection1.ConnectionString:= ConnStr;
ADOConnection1.Connected:= true;
ListBox1.Clear;
ADOConnection1.GetTableNames(ListBox1.Items);
if ListBox1.Items.Count>0 then
begin
ListBox1.Selected[0]:= true;
ListBox1.ItemIndex:= 0;
ListBox1.OnClick(ListBox1);
end;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
i: integer;
begin
ADOQuery1.Close;
if ListBox1.Items.Count<=0 then exit;
ADOQuery1.SQL.Text:= 'select * from ' + '['+ListBox1.Items.Strings[ListBox1.ItemIndex]+']';
ADOQuery1.Open;
for i:= 0 to DBGrid1.Columns.Count - 1 do
DBGrid1.Columns.Width:= 80;
Label2.Caption:=
' TableCount: '+ IntToStr(ListBox1.Count)+
' CurrentTableName: '+ ListBox1.Items.Strings[ListBox1.ItemIndex]+
' CurrentTableRecordCount: '+ IntToStr(ADOQuery1.RecordCount);
end;

end.

procedure TForm1.Button1Click(Sender: TObject);
var
ConnStr, FileName, TableName: string;
begin
FileName:= 'F:/Excel1.xls';
TableName:= '[Sheet1$]';
ConnStr:= ''+
' Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin; ' +
' Data Source=' + FileName + ';Mode=Share Deny None;Extended Properties=Excel 8.0; ' +
' Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password=""; ' +
' Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2; ' +
' Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB: ' +
' Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don''t Copy Locale on Compact=False; ' +
' Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False ';
ADOConnection1.Connected:= false;
ADOConnection1.ConnectionString:= ConnStr;
ADOConnection1.Connected:= true;
ADOQuery1.Close;
ADOQuery1.SQL.Text:= 'select * from ' + TableName;
ADOQuery1.Open;
end;
 
to djrj
我想要的是在Excel里写类似于宏的一些程序,我想通过Excel里直接连数据库,也就是说我直接打开Excel填写一个数字后就可以查找数据了,不需要借助于其他的程序!不过还是谢谢 djrj 给我这个例子 还有那位高手能给我一个完整的例子,因为我对Excel里内部厷的编写不是很熟悉!谢谢啦!
 
居然还有这么不厚道的人,连伪装都丢掉了,太赤裸裸了吧。
http://www.delphibbs.com/delphibbs/listq.asp?sort=6&type=2&expert=雨林18
 
to breezee 和 北丐洪七
这些都是回答没有解决问题和对问题没帮助的,还有些是"要一些winmail的破解版呀,注册码的"既然没有解决问题我何必给分呢?反正放在那也是浪费到不如我重新利用!不过凡是帮我解决问题和对问题有帮助的我肯定是给分的!
 
多人接受答案了。
 
后退
顶部