| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Сабж?  
		
		
		
		
		
		
		
	При простом book.Worksheets.Add добавляет лист в начало списка, если же написать book.Worksheets.Add('', book.Worksheets.Item(book.Sheets.Count), 1, -4167) то ошибка --------------------------- Microsoft Dynamics NAV Classic --------------------------- Сообщение для программистов C/AL: Не удалось вызвать член Add. Microsoft Excel возвратил следующее сообщение: Метод Add из класса Sheets завершен неверно  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Сам не пробовал, нашел вот такое решение: 
		
		
		
		
		
		
		
	http://stackoverflow.com/questions/1...od-not-working  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вместо кавычек в первом параметре нужно как-то передать NULL.   
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Присвоение значения параметров при вызове типа Add(After:=) по моеу чисто вбашная фишка. Врать не буду, но помоему даже в дельфи не работает, в навике точно, пробовал. 
		
		
		
		
		
		
		
	InTacto, да-да, кэп?) Какие будут предложения?) Ну я пробовал создать переменную типа вэриант и ей сделать clear. Больше нет вариантов((  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В качестве обходного решения можно перемещать лист в конец списка командой Move после вставки листа в начало.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от smoyk
			 
 
			Присвоение значения параметров при вызове типа Add(After:=) по моеу чисто вбашная фишка. Врать не буду, но помоему даже в дельфи не работает, в навике точно, пробовал. 
		
	InTacto, да-да, кэп?) Какие будут предложения?) Ну я пробовал создать переменную типа вэриант и ей сделать clear. Больше нет вариантов(( Дело не в явном указании названия параметра, а в пропуске самого параметра. Это позволяет сделать многие объктные языки (vb6, vb.net, c#) В навике (по крайней мере до 5 версии) пропуск параметров, к сожалению, табу. В работе с ADO можно получить NULL или написать библиотечку, которая вызывает эту ф-цию.  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			chebv, 
		
		
		
		
		
		
		
	Вы не поверите) Та же самая ошибка и с мувом, видимо по той же причине, т.к. там два параметра, before и after. InTacto, Ну что то же надо было поставить) Понятно, что как бэ лучше null, но нула в навике нет, поэтому и стоят кавычки) Хотя бы компилятор схавал. А что еще поставить я не знаю, поэтому и спросил про предложения, какие есть.... В работе с адо вы имеете ввиду через селект нул вернуть? Или как?)  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Кстати, коллеги мне подсказывают, что у нас 6й нав) Можно параметр пропустить при вызове? Как?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от smoyk
			 
 
			chebv, 
		
	Вы не поверите) Та же самая ошибка и с мувом, видимо по той же причине, т.к. там два параметра, before и after. InTacto, Ну что то же надо было поставить) Понятно, что как бэ лучше null, но нула в навике нет, поэтому и стоят кавычки) Хотя бы компилятор схавал. А что еще поставить я не знаю, поэтому и спросил про предложения, какие есть.... В работе с адо вы имеете ввиду через селект нул вернуть?  />Еще можно макрос написать прям из навика в книгу и сделать его вызов, но должно быть разрещено выполнение макросов.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не, ну так то и просто "select null" работает, но это какойто индусский код( 
		
		
		
		
		
		
		
	А что с пропуском параметров?  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Извращение конечно, но можно так: сначала NewSheet.Move(SheetEnd), т.е. новый лист становится предпоследним, а затем SheetEnd.Move(NewSheet)  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			расскажите как правильно юзать функцию _БордерАроунд
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			вообще нужно вот такую вот вызгрузку в ексель сделать. 
		
		
		
		
		
		
		
	как поля вписать я понимаю, а вот как сделать обрамление и перенос хз..  
		 | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Задать границы 
		
		
		
		
		
		
		
	Код: SetBorder(xlRowIDPar : Integer;xlColIDPar : Integer;Border : Integer)
// Стандартные индексы границ ячейки Excel
// 1. xlEdgeLeft         = 7  (левая)
// 2. xlEdgeRight        = 10 (правая)
// 3. xlEdgeTop          = 8  (верхняя)
// 4. xlEdgeBottom       = 9  (нижняя)
// 5. xlDiagonalDown     = 5  (диагональ лево верх - право низ)
// 6. xlDiagonalUp       = 6  (диагональ право верх - лево низ)
// Задается стиль линии: 1 - обычная сплошная
CASE Border OF
1: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(7).LineStyle := 1; 
2: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(10).LineStyle := 1;
3: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(8).LineStyle := 1;
4: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(9).LineStyle := 1;
5: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(5).LineStyle := 1;
6: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(6).LineStyle := 1;
END;
// толщины линий для каждой стороны задаются через св-во Weight
XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(7).Weight = 3
// обрамляющая, заполняются все 4 стороны
XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.LineStyle := 1;
GetxlColID(ColumnNo : Integer) : Text[30]
xlColIDLoc := '';
IF ColumnNo <> 0 THEN BEGIN
  x := ColumnNo - 1;
  c := 65 + x MOD 26;
  xlColIDLoc[10] := c;
  i := 10;
  WHILE x > 25 DO BEGIN
    x := x DIV 26;
    i := i - 1;
    c := 64 + x MOD 26;
    xlColIDLoc[i] := c;
  END;
  FOR x := i TO 10 DO
    xlColIDLoc[1+x-i] := xlColIDLoc[x];
END;
EXIT(xlColIDLoc);
GetxlRowID(RowNo : Integer) : Text[30]
xlRowIDLoc := '';
IF RowNo <> 0 THEN
  xlRowIDLoc := FORMAT(RowNo);
EXIT(xlRowIDLoc);Код: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).WrapText := TRUE;  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от InTacto
			 
 
			Задать границы 
		
	Код: SetBorder(xlRowIDPar : Integer;xlColIDPar : Integer;Border : Integer)
// Стандартные индексы границ ячейки Excel
// 1. xlEdgeLeft         = 7  (левая)
// 2. xlEdgeRight        = 10 (правая)
// 3. xlEdgeTop          = 8  (верхняя)
// 4. xlEdgeBottom       = 9  (нижняя)
// 5. xlDiagonalDown     = 5  (диагональ лево верх - право низ)
// 6. xlDiagonalUp       = 6  (диагональ право верх - лево низ)
// Задается стиль линии: 1 - обычная сплошная
CASE Border OF
1: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(7).LineStyle := 1; 
2: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(10).LineStyle := 1;
3: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(8).LineStyle := 1;
4: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(9).LineStyle := 1;
5: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(5).LineStyle := 1;
6: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(6).LineStyle := 1;
END;
// толщины линий для каждой стороны задаются через св-во Weight
XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.Item(7).Weight = 3
// обрамляющая, заполняются все 4 стороны
XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).Borders.LineStyle := 1;
GetxlColID(ColumnNo : Integer) : Text[30]
xlColIDLoc := '';
IF ColumnNo <> 0 THEN BEGIN
  x := ColumnNo - 1;
  c := 65 + x MOD 26;
  xlColIDLoc[10] := c;
  i := 10;
  WHILE x > 25 DO BEGIN
    x := x DIV 26;
    i := i - 1;
    c := 64 + x MOD 26;
    xlColIDLoc[i] := c;
  END;
  FOR x := i TO 10 DO
    xlColIDLoc[1+x-i] := xlColIDLoc[x];
END;
EXIT(xlColIDLoc);
GetxlRowID(RowNo : Integer) : Text[30]
xlRowIDLoc := '';
IF RowNo <> 0 THEN
  xlRowIDLoc := FORMAT(RowNo);
EXIT(xlRowIDLoc);Код: XlWrkSht.Range(GetxlColID(xlColIDPar) + GetxlRowID(xlRowIDPar)).WrapText := TRUE;  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ребят, как задать цикл, который будет выводить допустим всех сотрудников, для каждого сотрудника свое поле, голова совсем не варит как то
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Можно рекордрефы использовать, но заранее нужно прописать где-то, например, в том же сотруднике в каком-нибудь поле, номер поля, значение которого нужно выводить.  
		
		
		
		
		
		
		
	Если правильно понял задачу  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			И вроде как нужно под каждый вопрос новую тему заводить, чтобы потом искать проще было
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Код: REPEAT
  xlSheet.Range('A' + FORMAT(i)).Value := ...
  xlSheet.Range('B' + FORMAT(i)).Value := ...
  ...
  i += 1;
UNTIL ... | 
| 
	
 |