Показать сообщение отдельно
Старый 12.03.2006, 15:42   #10  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Value и Value2 - в Excel 2000 и XP
2 AndyD: Большое спасибо за "наводку" на Value в XP.

Действительно, в Excel 2000 еще имеем просто Range.Value, а в Excel 2002 уже Range.Value(RangeValueDataType), т.е. с необязательным параметром, который в случае использования Excel как COM-объекта "превращается" в обязательный.

Параметр RangeValueDataType, насколько я понял, в основном предназначен для нужд формата XML и может быть одной из констант перечисления xlRangeValueDataType:
- xlRangeValueDefault = 10 - default-ное значение, которое в Excel VBA может быть опущено;
- xlRangeValueXMLSpreadsheet = 11 - "Returns the values, formatting, formulas and names of the specified Range object in the XML Spreadsheet format";
- xlRangeValueMSPersistXML = 12 - "Returns the recordset representation of the specified Range object in an XML format".

Введя в Excel XP в ячейку А1 значение 1, а потом выполнив в редакторе VB в окне отладки (Immediate) команду:
? Range("A1").Value(10) <Enter> получим строкой ниже ту же 1.
Можете проверить самостоятельно, что получится при выполнении:
? Range("A1").Value(11) и ? Range("A1").Value(12).

Таким образом, оператор, работающий при COM-выводе в Excel 2000:
X++:
cell.value('Список сотрудников предприятия');
в случае использования Excel XP должен быть преобразован в соответствии с рекомендациями AndyD (см. в его сообщении выше) или для неказистых джобиков можно просто "по-плотницки" захардкодить "десяточку" прямо в оператор:
X++:
cell.value(10, 'Список сотрудников предприятия');
Что касается Value2, то его интерпретация в от версии к версии Excel пока не меняется. В Help-е про Value2 сказано:
Цитата:
Remarks
The only difference between this property and the Value property is that the Value2 property doesn’t use the Currency and Date data types.
You can return values formatted with these data types as floating-point numbers by using the Double data type.
(т.е. разница в представлениях значения ячейки возникает в случае применения к ячейке форматов Currency и Date)

Забавно, что пример кода VBA, демонстрирующий различия между Value и Value2 удалось найти не в справке Excel, а в справке OWC.Spreadsheet.10. Привожу этот пример ниже, слегка преобразовав его для возможности запуска в Excel (оригинальный пример для Spreadsheet можно увидеть в его справке - см. ссылку на нее в комментариях примера):
Код:
Sub Value_vs_Value2()
'Этот пример для Excel демонстрирует разницу между Value и Value2
'Help file: C:\Program Files\Common Files\Microsoft Shared\Web Components\10\1033\
'OWCVBA10.CHM / Properties / V / Value2 Property
 
Dim rngCell1 As Range
Dim rngCell2 As Range
' Set a variable to the cells used in this example.
Set rngCell1 = Range("A1")
Set rngCell2 = Range("A2")
' Set the number formats used by the cells in this example.
rngCell1.NumberFormat = "#,##0.00$" '"Currency"
rngCell2.NumberFormat = "dd/mm/yy;@" '"Short Date"
' Set the value of cell A1 to a currency value.
rngCell1.Value = "$123.456789"
' Set the value of cell A2 to a date.
rngCell2.Value = "9/7/1970" 'September 7 1970
' Use the Value property to return the value of cell A1.
MsgBox "Currency returned by the Value Property = " & _
rngCell1.Value
' Use the Value2 property to return the value of cell A1.
MsgBox "Currency returned by the Value2 Property = " & _
rngCell1.Value2
' Use the Value property to return the value of cell A2.
MsgBox "Date returned by the Value Property = " & _
rngCell2.Value
' Use the Value2 property to return the value of cell A2.
MsgBox "Date returned by the Value2 Property = " & _
rngCell2.Value2
End Sub
===============================================================
P.S. 21.08.2006
Непосредственного отношения к данному сообщению информация ниже не имеет. Помещаю ее сюда, чтобы лишний раз не up-ать ветку.

В архиве в файле "AxRepik_ReadMe.rtf" есть такой фрагмент:
Цитата:
ВАЖНО: Если у вас Excel 2002-2003, то для успешности всего процесса следует включить "галочку" в меню Excel: Сервис / Макрос / Безопасность / вкладка "Надежные источники" (вторая из двух) / опция "Доверять доступ к Visual Basic Project" - устанавливаем! (В Excel 2000 этой "галочки" еще просто нет, поэтому там этот шаг не нужен).
Речь идет о ручном включении. Способ автоматического управления этой "галочкой" обсуждается здесь.

Последний раз редактировалось Gustav; 21.08.2006 в 14:38.