30.12.2008, 12:14 | #1 |
Модератор
|
Excel. Узнать по именованной ячейке на каком она листе?
Excel. Узнать по именованной ячейке на каком она листе?
в VBA есть X++: MsgBox Range("test").Worksheet.Name |
|
30.12.2008, 12:30 | #2 |
Moderator
|
Объект Application перед Range добавьте - мысленно или на бумажке - и проанализируйте, как можно получить
Только надо при этом, чтобы была активна та Workbook, в которой определено это имя "test". PHP код:
и потом выкусывать имя листа из полной ссылки: =Sheet1!$B$2 |
|
30.12.2008, 12:36 | #3 |
Участник
|
|
|
30.12.2008, 12:41 | #4 |
MCTS
|
Цитата:
в VBA есть
X++: MsgBox Range("test").Worksheet.Name Как это получить из X++ ? X++: COM ws; ; ws = range.Worksheet(); info(ws.Name()); |
|
|
За это сообщение автора поблагодарили: Poleax (1). |
30.12.2008, 12:51 | #5 |
Moderator
|
Цитата:
Но, как я понимаю, он хочет на вход своей будущей функции подать строку "test", а на выходе получить другую строку - имя листа. И пока ему непонятно как создать этот range, не зная имени листа. Ответ - создать от Application, который явно не указан в коде VBA, но который незримо присутствует: range = Application.Range("test"). |
|
30.12.2008, 12:56 | #6 |
Участник
|
пример тут \Classes\ComExcelDocument_RU\findRange
|
|
30.12.2008, 13:01 | #7 |
Moderator
|
|
|
30.12.2008, 13:03 | #8 |
MCTS
|
Цитата:
Это в том случае, если у него уже имеется этот range.
X++: COM ws; COM cells; COM sheets; int cnt; COM findRange; sheets = app.sheets(); cnt = sheets.Count(); for (i = 1; i <= cnt; i++) { sheet = sheets.Item(i); cells = sheet.Cells(); findRange = cells.Find("ttt"); if (findRange) { ws = findRange.Worksheet(); info(ws.Name()); } |
|
30.12.2008, 13:12 | #9 |
Модератор
|
|
|
30.12.2008, 13:27 | #10 |
Moderator
|
Да не нужно листы перебирать, я ж всё вроде написал...
Получите Application как точку опору и мир сам перевернется X++: static void Job120(Args _args) { ComExcelDocument_RU doc = new ComExcelDocument_RU(); COM xlApp; COM wbook; COM activeSheet; COM wkss; COM range; str sheetName(COM _excel, str _namedRange) // ОНО! { COM comTemp; ; comTemp = _excel.Range(_namedRange); comTemp = comTemp.Worksheet(); return comTemp.Name(); } ; // это всё - подготовка тестовых данных // --------------------------------------------------------- doc.NewFile(); wbook = doc.getComDocument(); wkss = wbook.Worksheets(); xlApp = wbook.Parent(); activeSheet = xlApp.ActiveSheet(); range = activeSheet.Range('B2'); range.Name('test'); range.Select(); activeSheet = wkss.Add(); activeSheet.Select(); // специально ушли на другой лист // --------------------------------------------------------- // а теперь собственно вызов функции box::info(sheetName(xlApp, 'test')); } |
|
30.12.2008, 13:48 | #11 |
MCTS
|
понятно, я думал, само значение ищется .
|
|
Теги |
excel |
|
|