Q&A

  • 제가 뭔가 잘못한것 같은데 뭔지를 모르겠읍니다. 제발좀 도와주세요
다음과 같이 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;



고수님들 잘 부탁드립니다.

그럼 이만

2  COMMENTS
  • Profile
    코스엑스 2001.10.12 22:07


    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);

    하시면됩다.



  • Profile
    신호 2001.10.12 22:28
    답변 정말 감사 합니다.

    그런데...

    제가 하고자 하는 것은 쉬트내에 name개체를 설정해서 그 name개체의 이름을 가져 오려는데 xlbook.names.count는 되는데 xlbook.names[i].name는 안되요

    즉, names개체에 접근하여 현재 쉬트내에 name개체의 수는 알수 있는데

    각각의 name개체에 할당한 이름은 알수가 없어서

    위와 같이 하니까 variant는 배열이 아니라는 에러 메시지가 떠요. 무슨 말인지 알수가 없어서요.