다음과 같이 vb에서 코딩하여 실행한결과 잘 되었읍니다.
그래서 이것을 델파이로 만들어보았읍니다.
그런데 잘안되네요. 왜그런지 좀 가르쳐 주세요
분명히 델파이 코딩상의 에러 같은데 잘 모르겠읍니다.
Private Sub Command1_Click()
Dim myapp, mydoc As Object
Dim nms, wks
Dim xls_data() As Variant
Dim xls_value() As Integer
On Error Resume Next
Set myapp = GetObject(, "excel.Application")
If Err Then
Err.Clear
MsgBox ("액셀을 실행시키고 다시 시도하세요")
Exit Sub
Set myapp = CreateObject("excel.Application")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
Set mydoc = myapp.ActiveWorkbook
Set nms = mydoc.Names
Set wks = mydoc.Worksheets(1)
msgbox nms(1).name
/////////////////////////////////////////////////////////////////////////////////////
////위 부분은 성공적으로 엑셀내부의 name개체의 이름을 나타내줍니다. 그런데//////////
/////////////////////////////////////////////////////////////////////////////////////
Next i
End Sub
procedure TForm1.read_xls_data();
var
xls, xlbook, xls_sheet, xl_range , elem : variant;
volume, num_xl_name,i : integer;
xl_names: olevariant;
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;
xl_names:=xlbook.names;
num_xl_name:=xl_names.count;
showmessage(xl_names[1].name);
/////////////////////////////////////////////////////////////////////////////////////////
////델파이에서는 위부분이 안되더라구요. variant는 배열이 아니라는 에러메시지가 뜹니다.///
/////////////////////////////////////////////////////////////////////////////////////////
end;
고수님들 잘 부탁드립니다.
그럼 이만
xls_sheet:=xls.activesheet;
xlbook:=xls_sheet.parent;
// xl_names:=xlbook.names;
// num_xl_name:=xl_names.count;
// showmessage(xl_names[1].name);
하실려는게 현재 액티브 워크쉿 이름을 가져오시는거라면..
showmessage(xlbook.name);
하시면됩다.