안녕하세요. 질문을 다시올립니다.
이번에는 좀 정리가 되게 질문하겠읍니다. 부디 자상한 설명부탁드립니다.
초보라서요..
제가 하려고 하는것은 이렇습니다.
먼저 엑셀파일의 어떤영역에 name을 삽입합니다.
그리고 그 name을 읽어들여서 그 name과 같은 속성을 가진 다른응용프로그램(캐드)의 개체를 찾아서 그 개체를 핸들링 하려하는데 name개체를 읽는것이 안됩니다.
다음 코드와 같이 엑셀의 names컬렉션의 name개체를 읽으려고 하는데요 자꾸
name을 담을 xl_names라는 변수가 배열이 아니라는 에러가 납니다.
사실 엑셀의 vba에서는 다음과 같이 개개의 name에 접근할수 있거든요
도대체 어떻게 해야 name개체에 접근할수 있을런지 정말 궁금합니다.
부디 초보를 어여삐 여겨 저좀 살려주세요.
//////////////////엑셀vba//////////////////////////////////
Set nms = ActiveWorkbook.Names
Set wks = Worksheets(1)
For r = 1 To nms.Count
wks.Cells(r, 2).Value = nms(r).Name
wks.Cells(r, 3).Value = nms(r).RefersToRange.Address
Next
///////////////////////////////////////////////////////////
///////////////델파이코드//////////////////////////////////
procedure TForm1.read_xls_data();
var
xls, xlbook, xls_sheet, xl_range , elem , xl_names : variant;
volume, num_xl_name,i : integer;
tmp_name : array of string;
begin
try
xls := GetActiveOLEObject('Excel.Application');
except
on E: EOleSysError do begin
try
messagedlg('엑셀을 실행시키시고 다시 시도하십쇼', MtWarning, [mbok], 0); //엑셀을 실행
exit;
except
MessageDlg('Excel이 설치되어 있지 않습니다.', MtWarning, [mbok], 0);
Exit;
end;
end;
end;
xls_sheet:=xls.activesheet;
xlbook:=xls_sheet.parent;
xlbook.activate;
xl_names:=xlbook.names;
num_xl_name:=xl_names.count;
showmessage(xl_names[1].name);
setlength (xls_input_data,num_xl_name);
setlength(tmp_name,num_xl_name);
for i:=1 to num_xl_name do
begin
tmp_name[i-1]:= xl_names[i].name; ///이부분에서 에러발생
end;
end;
///////////////////////////////////////////////////////////////////