AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 09.10.2008, 18:08   #1  
Poleax ist offline
Poleax
Модератор
Benutzerbild von Poleax
MCP
MCBMSS
Злыдни
 
1.353 / 595 (22) +++++++
Registriert seit: 17.02.2005
Ort: msk
Blog-Einträge: 34
ComExcelDocument_RU по именнованной ячейки вывести номер ее строки.
Вопрос: В Excel файле есть куча именованных ячеек.
Может кто нибудь знает как написать метод для класса ComExcelDocument_RU, чтоб по названию ячейки выдавал номер строки? к примеру назвать такой метод- CellName2RowNum

необходимо использовать для этого кода
X++:
static void Job104(Args _args)
{
ComExcelDocument_RU doc = new ComExcelDocument_RU();
  int i;
;

    doc.open("C:\\test.xls");
    doc.insertValue("test", 100);
    i=ComExcelDocument_RU::CellName2RowNum("test");
//      info(int2str(i));
    doc.insertClearRow(i);
    doc.insertValue("test", 200);
     i=ComExcelDocument_RU::CellName2RowNum("test");
  //    info(int2str(i));
    doc.visible(true);

}
Alt 09.10.2008, 18:39   #2  
AndyD ist offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2.560 / 2499 (89) +++++++++
Registriert seit: 20.08.2005
Смотрите в сторону коллекции Names у объектов Application, Workbook, Worksheet

Только, в общем случае, имя может ссылаться на несколько ячеек, так что однозначно назвать колонку или столбец не получится
__________________
Axapta v.3.0 sp5 kr2
Alt 09.10.2008, 19:08   #3  
Poleax ist offline
Poleax
Модератор
Benutzerbild von Poleax
MCP
MCBMSS
Злыдни
 
1.353 / 595 (22) +++++++
Registriert seit: 17.02.2005
Ort: msk
Blog-Einträge: 34
вот к примеру метод возращающий область, его как то можно допилить чтоб возвращал именно номер строки?
X++:
public COM getFindRange(MSOfficeBookMark_RU bookMark, int _workSheet = 1)
{
    COM comRange,
        comWorkSheet;
    COM comApplication;

    if (m_comDocument)
    {
        comWorkSheet   = this.getWorkSheet(_workSheet);
        comApplication = m_comDocument.application();
        comWorkSheet.activate();

        if (comWorkSheet && comApplication)
        {
            comRange = comApplication.range(bookMark);
        }
    }
    return comRange;
}
Alt 09.10.2008, 19:19   #4  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Zitat:
Zitat von Poleax Beitrag anzeigen
вот к примеру метод возращающий область, его как то можно допилить чтоб возвращал именно номер строки?
Можно:
X++:
    Counter  row;
    ;
    // ...
    if (comRange)
        row = comRange.Row();
    return row;
}
Alt 09.10.2008, 19:39   #5  
Poleax ist offline
Poleax
Модератор
Benutzerbild von Poleax
MCP
MCBMSS
Злыдни
 
1.353 / 595 (22) +++++++
Registriert seit: 17.02.2005
Ort: msk
Blog-Einträge: 34
спасибо, я как раз уже насчупал его.. comRange.Row();
все оказывается просто
Alt 09.10.2008, 19:48   #6  
Poleax ist offline
Poleax
Модератор
Benutzerbild von Poleax
MCP
MCBMSS
Злыдни
 
1.353 / 595 (22) +++++++
Registriert seit: 17.02.2005
Ort: msk
Blog-Einträge: 34
:)
Спасибо, вопрос закрыт.

по имени ячейки берем номер строки
X++:
public int getCellName_RowNum(MSOfficeBookMark_RU bookMark, int _workSheet = 1)
{
    COM comRange,
        comWorkSheet;
    COM comApplication;

    if (m_comDocument)
    {
        comWorkSheet   = this.getWorkSheet(_workSheet);
        comApplication = m_comDocument.application();
        comWorkSheet.activate();

        if (comWorkSheet && comApplication)
        {
            comRange = comApplication.range(bookMark);
        }
    }
    return comRange.Row();
}
по имени ячейки берем номер столбца
X++:
public int getCellName_ColumnNum(MSOfficeBookMark_RU bookMark, int _workSheet = 1)
{
    COM comRange,
        comWorkSheet;
    COM comApplication;

    if (m_comDocument)
    {
        comWorkSheet   = this.getWorkSheet(_workSheet);
        comApplication = m_comDocument.application();
        comWorkSheet.activate();

        if (comWorkSheet && comApplication)
        {
            comRange = comApplication.range(bookMark);
        }
    }
    return comRange.Column();
}
и джобик для теста
X++:
static void Job104(Args _args)
{
ComExcelDocument_RU doc = new ComExcelDocument_RU();
;

    doc.open("C:\\test.xls");
    doc.insertValue("test", 100);

   info('Row='+int2str(doc.getCellName_RowNum('test')) + '  Col='+ int2str(doc.getCellName_ColumnNum('test')) );

    doc.insertClearRow(2);
    doc.insertValue("test", 200);

    doc.visible(true);
}
Alt 09.10.2008, 22:01   #7  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Если даже в самом коде явно присутствуют как минимум два ветвления, ведущие к тому, что comRange может оказаться неинициализированным, не говоря уже о том, что на листе книги Excel может отсутствовать указанная "закладка", то имеет смысл проверять перед возвратом строки/столбца, что comRange на что-то ссылается, иначе придется то и дело ловить ошибки времени выполнения "объект такой-то неинициализирован".

Geändert von gl00mie (09.10.2008 um 22:05 Uhr)
Alt 09.10.2008, 22:43   #8  
Gustav ist offline
Gustav
Moderator
Benutzerbild von Gustav
SAP
Лучший по профессии 2009
 
1.858 / 1152 (42) ++++++++
Registriert seit: 24.01.2006
Ort: Санкт-Петербург
Blog-Einträge: 19
О, больная тема! О, любимая мозоль!

Poleax, бросайте изучать ComExcelDocument_RU, начинайте изучать Excel!

Тогда вы будете знать, что для вставки пустой строки перед ячейкой не надо узнавать ее номер, чтобы потом скормить его методу-обертке, вставляющему i-ю строку в таблицу. Если танцевать от comRange, а не от вездесущего текстового букмарка ("test"), который на каждом шаге переводится всё в тот же comRange (который почему-то приговорен быть локальным в методах этого класса), то пустая строка перед comRange вставляется так:
Code:
comRange.EntireRow().Insert()
Это псевдокод. В реале это надо расписать, как полагается при трансляции с VBA в X++ - на двух строчках. Потом посчитайте, сколько строк лишнего кода выполнится в вашем алгоритме, перед тем как в таблице появится пустая строка.

P.S. При желании можно сократить кол-во строк до одной, если воcпользоваться последними достижениями в этой области

X++:
comEarlyBindingImitation( comRange,'EntireRow()','Insert()');
Подробности здесь: Gustav: Unsorted, или Записки DAX-дилетанта - II
Alt 10.10.2008, 12:43   #9  
Gustav ist offline
Gustav
Moderator
Benutzerbild von Gustav
SAP
Лучший по профессии 2009
 
1.858 / 1152 (42) ++++++++
Registriert seit: 24.01.2006
Ort: Санкт-Петербург
Blog-Einträge: 19
офф-топ
Zitat:
Zitat von Beitrag anzeigen
бросайте изучать ComExcelDocument_RU, начинайте изучать Excel
Ну, вот как раз еще один поучительный пример под горячую руку.

Это код фирменного (со слоя dis) метода из класса ComExcelDocument_RU (DAX 3.0, SP4). Я добавил несколько своих комментариев (в исходном фирменном виде метод не содержит комментариев, а также самой последней строки кода):
X++:
void copyAndInsertRange(str _bookMark, int _workSheet = 1)
{
    COM         comRange, comRange1,
                comWorkSheet;

    int         colNumber, colsNumber;
    int         rowNumber, rowsNumber;
    ;

    if (! m_comDocument)
        throw error(strFmt("@DIS6401", this.getApplicationName()));

    comRange = this.findRange(_bookMark, _workSheet);
    if (! comRange)
    {
        return;
    }

    rowNumber  = comRange.row();
    comRange1  = comRange.rows();
    rowsNumber = comRange1.count();

    // вычитаем единицу... (продолжение см. ниже)
    rowNumber  = rowNumber - 1;

    colNumber  = comRange.column();
    comRange1  = comRange.columns();
    colsNumber = comRange1.count();

/*
//  этот фрагмент кода не нужен,
//  он даже вредит, если выбрать диапазон, начинающийся со строки A

    comRange.copy();

    comRange1 = this.findRange(ComExcelDocument_RU::numToNameCell(colNumber, rowNumber), _workSheet);
    if (! comRange1)
    {
        return;
    }
    comRange1.select();

    m_comApplication.cutCopyMode(false);
*/
    comRange = comRange.entireRow();
    comRange.insert();

    // следующие арифметические упражнения - без комментариев... ррррр!
    // P.S. А впрочем все-таки скажу. 
    // Если бы в начале метода исходный comRange = this.findRange(_bookMark, _workSheet)
    // был сохранен в отдельную переменную, например, comRange0, 
    // то вместо следующего ужасающего comRange = this.findRange(... достаточно было бы простого
    // comRange = comRange0 - поскольку при вставке строк перед Range его адрес автоматически переопределяется!
    comRange = this.findRange(ComExcelDocument_RU::numToNameCell(colNumber, rowNumber + rowsNumber + 1) + ":" +
                              ComExcelDocument_RU::numToNameCell(colNumber + colsNumber - 1, rowNumber + 2*rowsNumber),
                              _workSheet);
    if (! comRange)
    {
        return;
    }

    comRange.copy();

    // ...чтобы потом вернуть эту вычтенную ранее единицу обратно (rowNumber + 1) :)
    comRange1 = this.findRange(ComExcelDocument_RU::numToNameCell(colNumber, rowNumber + 1), _workSheet);

    comRange1.select();

    comWorkSheet = this.getWorkSheet(_workSheet);
    if (comWorkSheet)
    {
        comWorkSheet.paste();
    }

//  а вот здесь этот оператор не помешает (при данном подходе)
    m_comApplication.cutCopyMode(false);
}
А это код нового метода, делающего ту же работу:
X++:
void copyAndInsertRangeNew(str _bookMark, int _workSheet = 1)
{
    COM         comRange, comRange1;

    int         rowsNumber;
    ;

    if (! m_comDocument)
        throw error(strFmt("@DIS6401", this.getApplicationName()));

    comRange = this.findRange(_bookMark, _workSheet);
    if (! comRange)
    {
        return;
    }

    rowsNumber = any2int(COM::createFromObject( comRange.Rows() ).Count());

    COM::createFromObject(comRange.EntireRow()).Insert();
    comRange1 = comRange.Offset(-rowsNumber);
    comRange.Copy(comRange1);
}
А это тот вид метода, к которому я призываю, чтобы наконец избавиться от элементов "защитного программирования" типа if (! m_comDocument) и if (! comRange) - не от всех, конечно, но от необоснованных:
X++:
void copyAndInsertRangeNew2(COM _comRange)
{
    COM         comRange1;
    int         rowsNumber;
    ;

    rowsNumber = any2int(COM::createFromObject( _comRange.Rows() ).Count());

    COM::createFromObject(_comRange.EntireRow()).Insert();
    comRange1 = _comRange.Offset(-rowsNumber);
    _comRange.Copy(comRange1);
}
Заметьте, что в таком виде метод вообще не нуждается в классе ComExcelDocument_RU и в статическом виде может быть помещен хоть в Global.

И в качестве постскриптума и для большей ясности - код VBA, который делает ту же работу, что и вышеприведенные методы X++:
Code:
 
Sub Macro1()
    Dim rng As Range
    Set rng = Worksheets(1).Range("B2:C4")
    
    rng.EntireRow.Insert
    rng.Copy rng.Offset(-rng.Rows.Count)
End Sub
This post has been rated by: blokva (3), Poleax (2).
Alt 10.10.2008, 21:17   #10  
Poleax ist offline
Poleax
Модератор
Benutzerbild von Poleax
MCP
MCBMSS
Злыдни
 
1.353 / 595 (22) +++++++
Registriert seit: 17.02.2005
Ort: msk
Blog-Einträge: 34
Хорошо Gustav интересный код. Обязательно пригодится и использую.
Только у меня, еще немного другой вопрос.
Как сделать чтоб передали методу параметры (str _bookMark, int _workSheet = 1)
и для _BookMark скопировать всю эту область и вставить ниже, под копируемой областью. (с полным форматированием, и если ячейка именованная пользователем, то именованную ячейку перенести вниз.) ?
А содержимое _bookMark оставить как есть.. но уже без имени ячейки.
Т.е. копируем вставляем не всю строку, а только ту область которую указали.
Alt 11.10.2008, 23:56   #11  
Gustav ist offline
Gustav
Moderator
Benutzerbild von Gustav
SAP
Лучший по профессии 2009
 
1.858 / 1152 (42) ++++++++
Registriert seit: 24.01.2006
Ort: Санкт-Петербург
Blog-Einträge: 19
Т.е., как я понял, всё происходит так же, как и в методе copyAndInsertRange, только перед "букмарком" вставляются не полные строки, а диапазон с таким же размером, как у исходного "букмарка".

На VBA это выглядит так (отличие в одной строке):
Code:
 
Sub Macro2()
    Dim rng As Range
    Set rng = Range("B2:C4")
    
    rng.Insert xlShiftDown 'где константа xlShiftDown = -4121
    rng.Copy rng.Offset(-rng.Rows.Count)
End Sub
В методе copyAndInsertRangeNew меняем соответствующую строку:
X++:
// с
COM::createFromObject(_comRange.EntireRow()).Insert();

// на
_comRange.Insert( #xlShiftDown ); // и выше добавить: #define.xlShiftDown(-4121)
Alt 13.10.2008, 19:46   #12  
Poleax ist offline
Poleax
Модератор
Benutzerbild von Poleax
MCP
MCBMSS
Злыдни
 
1.353 / 595 (22) +++++++
Registriert seit: 17.02.2005
Ort: msk
Blog-Einträge: 34
Gustav Спасибо, а что за значение такое #define.xlShiftDown(-4121)?
Alt 13.10.2008, 21:21   #13  
Poleax ist offline
Poleax
Модератор
Benutzerbild von Poleax
MCP
MCBMSS
Злыдни
 
1.353 / 595 (22) +++++++
Registriert seit: 17.02.2005
Ort: msk
Blog-Einträge: 34
:)
Вопрос немного усложнился.
Объединены ячейки 3 шт. Общей ячейке задано имя 'test'.
при использовании
X++:
void copyAndInsertBlock(str _bookMark, int _workSheet = 1)
{  #define.xlShiftDown(-4121)
    COM         comRange, comRange1;
    int         rowsNumber;
    ;

    if (! m_comDocument)
        throw error(strFmt("@DIS6401", this.getApplicationName()));

    comRange = this.findRange(_bookMark, _workSheet);
    if (! comRange)
    {
        return;
    }

    rowsNumber = any2int(COM::createFromObject( comRange.Rows() ).Count());

    comRange.Insert( #xlShiftDown );  // и выше добавить: #define.xlShiftDown(-4121)
    comRange1 = comRange.Offset(-rowsNumber);
    comRange.Copy(comRange1);
}
при вставки объединенной ячейки появляется сообщение "Данная операция приведет к отмене объединения ячеек" т.е. ниже в файле Excel есть объединенные ячейки. Объединение с них снимается и в итоге данные передаваемые в именованную ячейку вставляются не в 3-ную объединенную, а самую первую. А две остальных даже не копируются вниз.

Как сделать так чтоб можно было копировать и дублировать именованную ячейку без потери объединения?
Alt 14.10.2008, 09:03   #14  
Gustav ist offline
Gustav
Moderator
Benutzerbild von Gustav
SAP
Лучший по профессии 2009
 
1.858 / 1152 (42) ++++++++
Registriert seit: 24.01.2006
Ort: Санкт-Петербург
Blog-Einträge: 19
Zitat:
Zitat von Poleax Beitrag anzeigen
а что за значение такое #define.xlShiftDown(-4121)?
ну, если хелп по Excel на своем компе совсем лениво открывать, то хотя бы здесь посмотрите: http://msdn.microsoft.com/en-us/library/bb178850.aspx

Zitat:
Zitat von Poleax Beitrag anzeigen
при вставки объединенной ячейки появляется сообщение "Данная операция приведет к отмене объединения ячеек" т.е. ниже в файле Excel есть объединенные ячейки. Объединение с них снимается и в итоге данные передаваемые в именованную ячейку вставляются не в 3-ную объединенную, а самую первую. А две остальных даже не копируются вниз.

Как сделать так чтоб можно было копировать и дублировать именованную ячейку без потери объединения?
Самый простой вариант решения проблемы - вернуться к вставке полных строк. Еще вариант - отказаться от объединенных ячеек. В подавляющем большинстве практических случаев они могут быть безболезненно для отображения заменены центрированием по выделению (Формат \ Ячейки \ Выравнивание \ По горизонтали \ По центру выделения).

Если всё-таки хочется решать задачу именно в вашей постановке, то видится такой извратный вариант - сдвигать все оставшиеся ячейки шаблона ниже места вставки вправо (как дверь шкафа-купе), потом делать копирование, потом возвращать "дверь" обратно. Стоит ли игра таких свеч?
Alt 14.10.2008, 11:03   #15  
Poleax ist offline
Poleax
Модератор
Benutzerbild von Poleax
MCP
MCBMSS
Злыдни
 
1.353 / 595 (22) +++++++
Registriert seit: 17.02.2005
Ort: msk
Blog-Einträge: 34
Zitat:
Zitat von Gustav Beitrag anzeigen
ну, если хелп по Excel на своем компе совсем лениво открывать, то хотя бы здесь посмотрите: http://msdn.microsoft.com/en-us/library/bb178850.aspx
хелп по такому ответ не дает, да и проще спросить. За линку респект.
Zitat:
Zitat von Gustav
Самый простой вариант решения проблемы - вернуться к вставке полных строк. Еще вариант - отказаться от объединенных ячеек. В подавляющем большинстве практических случаев они могут быть безболезненно для отображения заменены центрированием по выделению (Формат \ Ячейки \ Выравнивание \ По горизонтали \ По центру выделения).

Если всё-таки хочется решать задачу именно в вашей постановке, то видится такой извратный вариант - сдвигать все оставшиеся ячейки шаблона ниже места вставки вправо (как дверь шкафа-купе), потом делать копирование, потом возвращать "дверь" обратно. Стоит ли игра таких свеч?
не не не .. со вставкой строки сразу отпадает.
В отчете ячейки слишком мелкие и они объединены в "по больше".
Как у именованной ячейки узнать с кем она объединена? (сколько ячеек в право и сколько вниз.) А потом после вставке основной первой именованной все остальные продублировать также и после всего их объединить?
Alt 14.10.2008, 12:10   #16  
Gustav ist offline
Gustav
Moderator
Benutzerbild von Gustav
SAP
Лучший по профессии 2009
 
1.858 / 1152 (42) ++++++++
Registriert seit: 24.01.2006
Ort: Санкт-Петербург
Blog-Einträge: 19
Zitat:
Zitat von Poleax Beitrag anzeigen
хелп по такому ответ не дает
Ну-ну! Идём в Excel в редактор кода VBA по Alt+F11, пишем в окне отладки: Range("A1").Insert
Name:  p1.jpg
Hits: 4847
Größe:  45,5 KB

Щелкаем мышкой в середине слова Insert и жмем F1 - появляется топик хелпа
Name:  p2.jpg
Hits: 4893
Größe:  35,8 KB

Читая топик, видим интересующую нас константу xlShiftDown. Копируем эту строку в окно отладки и ставим перед ней восклицательный знак (сократитель команды Print), после чего нажимаем Enter
Name:  p3.jpg
Hits: 4779
Größe:  46,8 KB
Zitat:
Zitat von Poleax Beitrag anzeigen
да и проще спросить
Ну это-то конечно. Типа "пусть работает железная пила"
Zitat:
Zitat von Poleax Beitrag anzeigen
Как у именованной ячейки узнать с кем она объединена? (сколько ячеек в право и сколько вниз.)
См. MergeArea - cвойство объекта Range. Возвращает тоже Range. Например, если объединены ячейки A1:C2, то Range("A1").MergeArea.Address вернет $A$1:$C$2. Еще есть булевское свойство MergeCells объекта Range - возвращает True, если ячейка входит в объединение.
Alt 14.10.2008, 12:26   #17  
AndyD ist offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2.560 / 2499 (89) +++++++++
Registriert seit: 20.08.2005
Еще можно воспользоваться Object Browser'ом (кнопка F2 в VBA). В разделе Globals перечислены все константы и их значения
__________________
Axapta v.3.0 sp5 kr2
Alt 14.10.2008, 12:42   #18  
blokva ist offline
blokva
Пенсионер
Benutzerbild von blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Registriert seit: 04.06.2003
Ort: Беларусь
Zitat:
Zitat von Poleax Beitrag anzeigen
Вопрос немного усложнился.
Объединены ячейки 3 шт. Общей ячейке задано имя 'test'.
при использовании
.....
при вставки объединенной ячейки появляется сообщение "Данная операция приведет к отмене объединения ячеек" т.е. ниже в файле Excel есть объединенные ячейки. Объединение с них снимается и в итоге данные передаваемые в именованную ячейку вставляются не в 3-ную объединенную, а самую первую. А две остальных даже не копируются вниз.

Как сделать так чтоб можно было копировать и дублировать именованную ячейку без потери объединения?
Не "...ну вы блин даете..." (с)
Это что же вы в файле перекрываете именованные объединенные диапазоны?
Очень странно это, зачем тогда объединять и именовать?
Если Вы хотите то что написали в первом посту, то Gustav Вам подсказал как это делать, если Вам требуется перекрывать объединенные дипазоны, то это совсем другая задача,
А может Вы просто опишите Вашу задачу не кусками, а целиком и Вам возможно подскажут правильное решение.
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
This post has been rated by: aidsua (1).
Alt 14.10.2008, 13:06   #19  
Gustav ist offline
Gustav
Moderator
Benutzerbild von Gustav
SAP
Лучший по профессии 2009
 
1.858 / 1152 (42) ++++++++
Registriert seit: 24.01.2006
Ort: Санкт-Петербург
Blog-Einträge: 19
Zitat:
Zitat von Gustav Beitrag anzeigen
видится такой извратный вариант - сдвигать все оставшиеся ячейки шаблона ниже места вставки вправо (как дверь шкафа-купе), потом делать копирование, потом возвращать "дверь" обратно. Стоит ли игра таких свеч?
Я имел в виду следующее - см. код VBA и рисунки:
Code:
Sub Macro1()
    Range("A6:C12").Insert xlShiftToRight 'xlShiftToRight = -4161
End Sub

Sub Macro2()
    Dim rng As Range
    Set rng = Range("B3")
    
    rng.Insert xlShiftDown 'xlShiftDown = -4121
    rng.Copy rng.Offset(-rng.Rows.Count)
End Sub

Sub Macro3()
    Range("A6:C12").Delete xlShiftToLeft 'xlShiftToLeft = -4159
End Sub
Теперь картинки. Исходное состояние. Далее будем размножать красную ячейку B3.
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	pp1.jpg
Hits:	379
Größe:	27,2 KB
ID:	3809

После отработки Macro1 - сдвинули "дверь" вправо:
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	pp2.jpg
Hits:	276
Größe:	27,2 KB
ID:	3810

После отработки Macro2 - выполнили размножение (объединенная голубая ячейка не мешает):
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	pp3.jpg
Hits:	296
Größe:	27,4 KB
ID:	3811

После отработки Macro3 - вернули "дверь" назад:
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	pp4.jpg
Hits:	300
Größe:	27,4 KB
ID:	3813
This post has been rated by: aidsua (1).
Alt 14.10.2008, 13:11   #20  
Poleax ist offline
Poleax
Модератор
Benutzerbild von Poleax
MCP
MCBMSS
Злыдни
 
1.353 / 595 (22) +++++++
Registriert seit: 17.02.2005
Ort: msk
Blog-Einträge: 34
blokva
Задача: в Excel файле есть ячейка с именем. ("TEST") оказывается она ре одинарная а состоит из нескольких, объединенных. Надо продублировать ячейку вниз целиком и полностью, с сохранением форматирования и объединений.
Каждый раз при дублировании ячейки вниз в нее вставляю через цикл значение.

На данный момент вставка происходит, все хорошо, кроме одного. Если ячейка состояла из нескольких то при вставке объединение теряется.

Gustav Спасибо за мастер-класс по Help(у).
Как мне в аксапте вытянуть этот диапазон Range("A1").MergeArea.Address чтоб потом по нему megre сделать.
X++:
    COM         comRange, comRange1, comR;
   comR=comRange.MergeArea();
   comR.merge(); //че то не то..
Stichworte
excel, документация, как правильно, ax3.0

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
как вывести номер строки в гриде? funnut DAX: Программирование 21 01.10.2012 16:33
Цветные строки в Grid Sergo DAX: База знаний и проекты 14 19.04.2012 10:02
При создании строки в закупке статус строки становится "Отменено" AlexUnik DAX: Функционал 4 27.09.2004 16:05
Буферные ячейки на складе - зачем? renat DAX: Функционал 16 01.04.2004 20:22
Функция "Удалить строки" Oks DAX: Функционал 1 03.07.2002 18:09

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 17:27 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.