AI muốn lập trình DLL cho Excel và các loại bằng Delphi thì xem video này nhé!

Liên hệ QC

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,651
Được thích
10,140
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Lần chỉnh sửa cuối:
Anh Tuân cho Em hỏi tí !

Vậy phải xem code bạn viết trong sự kiện nào của List2 và bạn gán dữ liệu thế nào? Mình làm Delphi 11 năm nay chưa gặp vấn đề này bao giờ :D

Hihi em lấy sự kiện Doupble Click;

Code thì nó nguyên cả chùm Code này nó liên quan đến Code khác hichic
Hỏi chay thì anh cũng khó hình dung
Mã:
procedure BangGiaDblClick(Sender: TObject);
begin
try
VST_BangGia.Refresh;
  edt_TS.Text := sArrBG[1, NodeRowBG.Index];
  edt_DVT.Text := sArrBG[3, NodeRowBG.Index];
  edt_DonGia.Text := ADOToString(sArrBG[4, NodeRowBG.Index]);
  edt_SoLuong.SetFocus;
  RefreshControl;
except on E: Exception do
end;
end;
 
Upvote 0
Hihi em lấy sự kiện Doupble Click;

Code thì nó nguyên cả chùm Code này nó liên quan đến Code khác hichic
Hỏi chay thì anh cũng khó hình dung
Mã:
procedure BangGiaDblClick(Sender: TObject);
begin
try
VST_BangGia.Refresh;
  edt_TS.Text := sArrBG[1, NodeRowBG.Index];
  edt_DVT.Text := sArrBG[3, NodeRowBG.Index];
  edt_DonGia.Text := ADOToString(sArrBG[4, NodeRowBG.Index]);
  edt_SoLuong.SetFocus;
  RefreshControl;
except on E: Exception do
end;
end;

Vẫn không hiểu gì luôn :). "VST_BangGia" là loại control gì vậy bạn?
 
Upvote 0
Hiện tại mình chỉ có chút time hỗ trợ các bạn trên các component chuẩn và học ngôn ngữ Delphi nên các thành phần "lạ" mình không tham gia vì sẽ phải thêm time nghiên cứu :) . Mình nghĩ vấn đề này bạn debug và tự giải quyết đc thôi.
 
Upvote 0
Anh Tuân cho Em hỏi tí !
- Câu lệnh Last := ws.Range['B65536'].End[xlUp].Row; này khi Debug bị báo lỗi chắc là do Last: Longint nên Delphi không hiểu, Em sữa mà chưa được (Em tạm thời bỏ qua để build thử).
- Sau khi Build DLL em khai báo trong VBA:
Declare PtrSafe Function Test Lib "GetSheet.dll" () As Variant
Sub Main_ShName()
Call Test
End Sub
Nhưng khi chạy thì báo lỗi. Em nghỉ do bị lõi truyền App
//App phai dc truyen vao tu Excel
for I := 1 to App.Worksheets.Count do
...
Nhở Anh xem lại giúp Em với.
Cảm ơn Anh !

Bạn phải sửa code hàm trong Delphi để nó đón nhập Application từ VBA (bên ngoài) là
Mã:
function Test(App: IDispatch): OleVariant; stdcall;
var
  App, ws: OleVariant;
  sSheetName,Lastvalue: String;
  Last: Longint;
  I: Integer;
begin
  //App phai dc truyen vao tu Excel
  for I := 1 to OleVariant(App).Worksheets.Count do
  begin
    ws := App.Worksheets[I];
    if (ws.Name <> 'Sheet1') and (ws.Name <> 'Sheet2') then
    begin
      sSheetName := ws.Name;
      Last := ws.Range['B65536'].End[xlUp].Row;
      Lastvalue := ws.Range['B' + IntToStr(Last)].Value;
      ShowMessage(sSheetName);
      ShowMessage(IntToStr(Last));
      ShowMessage(Lastvalue);
    end;
  end;

end;

Trong VBA khai báo hàm là
'Nếu Office 64 bit
Declare PtrSafe Function Test Lib "GetSheet.dll" (App As Application) As Variant


'Nếu Office 32 bit
Declare Function Test Lib "GetSheet.dll" (App As Application) As Variant
Bài đã được tự động gộp:



Vậy phải xem code bạn viết trong sự kiện nào của List2 và bạn gán dữ liệu thế nào? Mình làm Delphi 11 năm nay chưa gặp vấn đề này bao giờ :D[/QUOTE]
Em Build lại mà vẫn không được Anh ạ, Anh rảnh hay Bạn nào xem giúp mình với.
Cảm ơn nhiều !
 

File đính kèm

  • GetSheetName.rar
    2.6 MB · Đọc: 1
Upvote 0
Trong code bạn hãy thay xlUp thành -4162 vì đây là hằng số bạn phải khai báo Unit "ExcelXP". Bạn làm rồi biên dichjneeus lỗi hãy chụp hình ảnh báo lỗi nhé. Hiện nay mình không dùng máy tính.
 
Upvote 0
Trong code bạn hãy thay xlUp thành -4162 vì đây là hằng số bạn phải khai báo Unit "ExcelXP". Bạn làm rồi biên dichjneeus lỗi hãy chụp hình ảnh báo lỗi nhé. Hiện nay mình không dùng máy tính.
Em Google thì có 2 kiểu cho xlUp như sau:
const
xlUp = $FFFFEFBE;


unit XLConst;
interface
XlDirection = TOleEnum;
const
xlPatternUp = -4162;
implementation
end.
Nhưng vẫn không được, Anh xem lại code và Build thử cho em project này hoàn chỉnh được không.

Cảm ơn Anh !
 

File đính kèm

  • GetSheetName.rar
    2.6 MB · Đọc: 3
Upvote 0
Em Google thì có 2 kiểu cho xlUp như sau:
const
xlUp = $FFFFEFBE;


unit XLConst;
interface
XlDirection = TOleEnum;
const
xlPatternUp = -4162;
implementation
end.
Nhưng vẫn không được, Anh xem lại code và Build thử cho em project này hoàn chỉnh được không.

Cảm ơn Anh !
Các Anh giúp Em Project này với !!!
 
Upvote 0
Ý bạn ấy là thêm chữ N lòng vào câu lệnh SQL, làm cách đó cũng ra anh.
Công việc giải quyết xong tạm ổn nay lại nghiên cứu Delphi tiếp

Cái bài 454 đó bạn giải quyết xử lý Unicode sao rồi ... Mạnh hỏi để mai mốt cài cái Server khi nào rảnh quậy một tí ??!!
 
Upvote 0
Công việc giải quyết xong tạm ổn nay lại nghiên cứu Delphi tiếp

Cái bài 454 đó bạn giải quyết xử lý Unicode sao rồi ... Mạnh hỏi để mai mốt cài cái Server khi nào rảnh quậy một tí ??!!
Giải quyết xong hết mọi lỗi luôn rồi
Xét Unicode làm theo cách đó cũng được nhưng mình làm theo kiểu khác gán tmp: OleVariant (Parameters[RC].Value:=tmp)
Giờ mình đang đuối ý tưởng trang trí Form làm sao cho đẹp :(:(:(:(

A2h tiện đây cho mình hỏi xíu luôn, có nên lưu ảnh vào SQL không đang phân vân mà chưa biết xử lý sao hichichic
 
Lần chỉnh sửa cuối:
Upvote 0
Giải quyết xong hết mọi lỗi luôn rồi
Xét Unicode làm theo cách đó cũng được nhưng mình làm theo kiểu khác gán tmp: OleVariant (Parameters[RC].Value:=tmp)
Giờ mình đang đuối ý tưởng trang trí Form làm sao cho đẹp :(:(:(:(

A2h tiện đây cho mình hỏi xíu luôn, có nên lưu ảnh vào SQL không đang phân vân mà chưa biết xử lý sao hichichic
vừa làm vừa nghiên cứu và học mà cứ thử làm đi xem sao nó mới phát sinh cái hay

còn câu sau mạnh ko hiểu giải thích thêm cho Mạnh 1 chút

Mã:
OleVariant (Parameters[RC].Value:=tmp)
 
Upvote 0
vừa làm vừa nghiên cứu và học mà cứ thử làm đi xem sao nó mới phát sinh cái hay

còn câu sau mạnh ko hiểu giải thích thêm cho Mạnh 1 chút

Mã:
OleVariant (Parameters[RC].Value:=tmp)
OleVariant (Parameters[RC].Value:=tmp) - Cái này mình ghi chú hihi
Cái này mình viết cái function để inser hay update cho SQL. mình dùng TADOQuery của Delphi chú không phải CreateOleObject('ADODB.Recordset');
đại khái nôm na như vầy
tmp:OleVariant;
ArrayQueryValue: array of OleVariant
RC: Integer
ArrayQuery:= [trim(edt_CMND.Text), DateForSQL(dtp_NgaycapCMND.Date)]
for i := Low(ArrayQuery) to High(ArrayQuery) do
tmp:=ArrayQuery[1]
Add dữ liệu vào SQL
Query.Parameters[RC].Value:=tmp;
 
Upvote 0
To @thuyyeu99
Mạnh đang tự đặt ra mấy câu hỏi sau xong có hướng nghiên cứu Nè

1/ Sử dụng ADO truy cập vào máy khác qua LAN lấy và ghi dữ liệu mà không phải Share Full Folder ????!!!!
2/ Tại sao chỉ khi cài SQL server thì mới lấy được dữ liêu qua Internet ???!!! tại sao ta ko thử cách khác thay thế nó ???!!!
....................................
Câu 1 Mạnh đã làm OK
Câu 2 chưa biết khi nào ..... chờ ý hay của bạn
 
Upvote 0
To @thuyyeu99
Mạnh đang tự đặt ra mấy câu hỏi sau xong có hướng nghiên cứu Nè

1/ Sử dụng ADO truy cập vào máy khác qua LAN lấy và ghi dữ liệu mà không phải Share Full Folder ????!!!!
2/ Tại sao chỉ khi cài SQL server thì mới lấy được dữ liêu qua Internet ???!!! tại sao ta ko thử cách khác thay thế nó ???!!!
....................................
Câu 1 Mạnh đã làm OK
Câu 2 chưa biết khi nào ..... chờ ý hay của bạn
Minh co nghe noi toi datasap minh doc tieng anh kho hiểu qua.
Minh cung dang bi cai van de thu 2 cua manh, dot truoc minh cung tim hieu chat qua ip internet ma con ket noi data , bo tay chua mo ra, chac kien thuc tin hoc yếu qua
Manh thu tim hieu cai datasnap thu xem.
 
Upvote 0
Minh co nghe noi toi datasap minh doc tieng anh kho hiểu qua.
Minh cung dang bi cai van de thu 2 cua manh, dot truoc minh cung tim hieu chat qua ip internet ma con ket noi data , bo tay chua mo ra, chac kien thuc tin hoc yếu qua
Manh thu tim hieu cai datasnap thu xem.

Mạnh mới thử lấy dữ liệu từ máy latop có kết nối Wifi thấy ok ko biết như vậy nó có hiểu là lấy dữ liệu trong mạng LAN ko nữa hay là qua Internet ????!!!!!!!!!!!

Ngày mai mang cái latop sang quán cafe test cái nếu lấy được dữ liệu trên máy bàn Ở nhà thì coi như là xong Hehehehehehe
 
Upvote 0
Mạnh mới thử lấy dữ liệu từ máy latop có kết nối Wifi thấy ok ko biết như vậy nó có hiểu là lấy dữ liệu trong mạng LAN ko nữa hay là qua Internet ????!!!!!!!!!!!

Ngày mai mang cái latop sang quán cafe test cái nếu lấy được dữ liệu trên máy bàn Ở nhà thì coi như là xong Hehehehehehe
manh lam cach nao
Bài đã được tự động gộp:

Mạnh mới thử lấy dữ liệu từ máy latop có kết nối Wifi thấy ok ko biết như vậy nó có hiểu là lấy dữ liệu trong mạng LAN ko nữa hay là qua Internet ????!!!!!!!!!!!

Ngày mai mang cái latop sang quán cafe test cái nếu lấy được dữ liệu trên máy bàn Ở nhà thì coi như là xong Hehehehehehe
hình như muốn kết nối qua intenrt phải mở Port
 
Upvote 0
Upvote 0
coi trên điện thoại hay sao mà viết ko dấu là họ la làng đó
Mai Mạnh thử xong xuoi cái đã xong tính nếu ok thì tuyệt vời đó ... sử dụng ADO lấy dữ liệu qua Internet mà ko phải cài SQL server he ....
Hồi nãy viết trên điện thoại, mới chiếm quyền sử dụng máy tính nên mới dánh chính tả được hihihih. Mạnh nói sơ sơ cái hướng để mình hình dung với thắc mắt quá đi

Mạnh là Trùm Mò
 
Upvote 0
Web KT
Back
Top Bottom