Функции преобразования типов данных в VBA Excel. Наименования функций, синтаксис, типы возвращаемых данных, диапазоны допустимых значений выражения-аргумента.
Синтаксис функций преобразования
Выражение (аргумент) – это любое строковое или числовое выражение, возвращающее значение, входящее в диапазон допустимых значений для аргумента. Выражение может быть представлено переменной или другой функцией.
Если аргумент, переданный в функцию, не входит в диапазон типа, в который преобразуются данные, происходит ошибка.
Функции преобразования типов
Наименования функций преобразования типов, типы возвращаемых данных, диапазоны допустимых значений для аргумента:
Функция | Тип данных | Диапазон значений аргумента |
---|---|---|
CBool | Boolean | Любое допустимое строковое или числовое выражение. |
CByte | Byte | От 0 до 255. |
CCur | Currency | От -922 337 203 685 477,5808 до 922 337 203 685 477,5807. |
CDate | Date | Любое допустимое выражение даты. |
CDbl | Double | От -1,79769313486231E308 до -4,94065645841247E-324 для отрицательных значений; от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений. |
CDec | Decimal | 79 228 162 514 264 337 593 543 950 335 для чисел без десятичных знаков. Для чисел с 28 десятичными знаками диапазон составляет 7,9228162514264337593543950335. Наименьшим возможным числом, отличным от нуля, является число 0,0000000000000000000000000001. |
CInt | Integer | От -32 768 до 32 767, дробная часть округляется. |
CLng | Long | От -2 147 483 648 до 2 147 483 647, дробная часть округляется. |
CSng | Single | От -3,402823E38 до -1,401298E-45 для отрицательных значений; от 1,401298E-45 до 3,402823E38 для положительных значений. |
CStr | String | Результат, возвращаемый функцией CStr, зависит от аргумента Выражение. |
CVar | Variant | Диапазон совпадает с типом Double для числовых значений и с типом String для нечисловых значений. |
Дополнительно для VBA7:
Функция | Тип данных | Диапазон значений аргумента |
---|---|---|
CLngLng | LongLong | От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, дробная часть округляется. Действительно только для 64-разрядных платформ. |
CLngPtr | LongPtr | От -2 147 483 648 до 2 147 483 647 для 32-разрядных платформ, от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 для 64-разрядных платформ, дробная часть округляется в обоих типах систем. |
Примеры преобразования типов
Функция CBool
Функция CBool используется для преобразования выражений в тип данных Boolean.
Dim a a = CBool(10) ‘Результат: True a = CBool(0) ‘Результат: False a = CBool(«True») ‘Результат: True a = CBool(«Test») ‘Результат: Error Dim a, b, c a = «Test1» b = «Test2» c = CBool(a = b) ‘Результат: False c = CBool(a <> b) ‘Результат: True |
Функция CByte
Функция CByte используется для преобразования выражений в тип данных Byte.
Dim a, b, c a = 654 b = 3.36 c = a / b ‘Результат: 194,642857142857 c = CByte(c) ‘Результат: 195 c = a * b ‘Результат: 2197,44 c = CByte(c) ‘Результат: Error |
Функция CCur
Функция CCur используется для преобразования выражений в тип данных Currency.
Dim a, b, c a = 254.6598254 b = 569.2156843 c = a + b ‘Результат: 823,8755097 c = CCur(a + b) ‘Результат: 823,8755 |
Функция CDate
Функция CDate используется для преобразования выражений в тип данных Date. Она распознает форматы даты в соответствии с национальной настройкой системы.
Dim a As String, b As Date, c As Double a = «28.01.2021» b = CDate(a) ‘Результат: #28.01.2021# c = CDbl(b) ‘Результат: 44224 Dim a a = CDate(44298.63895) ‘Результат: #12.04.2021 15:20:05# a = CDate(44298) ‘Результат: #12.04.2021# a = CDate(0.63895) ‘Результат: #15:20:05# |
Функция CDbl
Функция CDbl используется для преобразования выражений в тип данных Double.
Dim a As String, b As String, c As Double a = «45,3695423» b = «548955,756» c = CDbl(a) + CDbl(b) ‘Результат: 549001,1255423 |
Примечание
Eсли основной язык системы – русский, при записи в редакторе VBA Excel дробного числа в виде текста, ставим в качестве разделителя десятичных разрядов – запятую. Проверьте разделитель по умолчанию для своей национальной системы:
MsgBox Application.DecimalSeparator
Функция CDec
Функция CDec используется для преобразования выражений в тип данных Decimal.
Dim a As String, b As Double, c a = «5,9228162514264337593543950335» b = 5.92281625142643 c = CDec(a) — CDec(b) ‘Результат: 0,0000000000000037593543950335 Dim a As Double, b As String, c a = 4.2643E—14 b = CStr(a) ‘Результат: «4,2643E-14» c = CDec(a) ‘Результат: 0,000000000000042643 |
Функция CInt
Функция CInt используется для преобразования выражений в тип данных Integer.
Dim a As String, b As Integer a = «2355,9228» b = CInt(a) ‘Результат: 2356 |
Функция CLng
Функция CLng используется для преобразования выражений в тип данных Long.
Dim a As Date, b As Long a = CDate(44298.63895) ‘Результат: #12.04.2021 15:20:05# b = CLng(a) ‘Результат: 44299 a = CDate(b) ‘Результат: #13.04.2021# |
Функция CSng
Функция CSng используется для преобразования выражений в тип данных Single.
Dim a As String, b As Single a = «3,2365625106» b = CSng(a) ‘Результат: 3,236562 |
Функция CStr
Функция CStr используется для преобразования выражений в тип данных String.
Dim a As Single, b As String a = 5106.23 b = CStr(a) ‘Результат: «5106,23» |
Функция CVar
Функция CVar используется для преобразования выражений в тип данных Variant.
Dim a As Double, b As String, c a = 549258.232546 b = «Новое сообщение» c = CVar(a) ‘Результат: 549258,232546 (Variant/Double) c = CVar(b) ‘Результат: «Новое сообщение» (Variant/String) |
Функции преобразования типов данных используются в тексте процедур VBA Excel для того, чтобы указать, что результатом выполнения той или иной операции должны стать данные определенного типа, отличающегося от типа, заданного по умолчанию.
Содержание
- Type conversion functions
- Syntax
- Return types
- Remarks
- CBool function example
- CByte function example
- CCur function example
- CDate function example
- CDbl function example
- CDec function example
- CInt function example
- CLng function example
- CSng function example
- CStr function example
- CVar function example
- See also
- Support and feedback
- Метод Application.ConvertFormula (Excel)
- Синтаксис
- Параметры
- Возвращаемое значение
- Примечания
- Пример
- Поддержка и обратная связь
- Функции преобразования типов
- Синтаксис
- Возвращаемые типы
- Примечания
- Пример функции CBool
- Пример функции CByte
- Пример функции CCur
- Пример функции CDate
- Пример функции CDbl
- Пример функции CDec
- Пример функции CInt
- Пример функции CLng
- Пример функции CSng
- Пример функции CStr
- Пример функции CVar
- См. также
- Поддержка и обратная связь
Type conversion functions
Each function coerces an expression to a specific data type.
Syntax
- CBool(expression)
- CByte(expression)
- CCur(expression)
- CDate(expression)
- CDbl(expression)
- CDec(expression)
- CInt(expression)
- CLng(expression)
- CLngLng(expression) (Valid on 64-bit platforms only.)
- CLngPtr(expression)
- CSng(expression)
- CStr(expression)
- CVar(expression)
The required expression argument is any string expression or numeric expression.
Return types
The function name determines the return type as shown in the following:
Function | Return type | Range for expression argument |
---|---|---|
CBool | Boolean | Any valid string or numeric expression. |
CByte | Byte | 0 to 255. |
CCur | Currency | -922,337,203,685,477.5808 to 922,337,203,685,477.5807. |
CDate | Date | Any valid date expression. |
CDbl | Double | -1.79769313486231E308 to -4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values. |
CDec | Decimal | 79,228,162,514,264,337,593,543,950,335 for zero-scaled numbers, that is, numbers with no decimal places. For numbers with 28 decimal places, the range is 7.9228162514264337593543950335. The smallest possible non-zero number is 0.0000000000000000000000000001. |
CInt | Integer | -32,768 to 32,767; fractions are rounded. |
CLng | Long | -2,147,483,648 to 2,147,483,647; fractions are rounded. |
CLngLng | LongLong | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807; fractions are rounded. (Valid on 64-bit platforms only.) |
CLngPtr | LongPtr | -2,147,483,648 to 2,147,483,647 on 32-bit systems, -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 on 64-bit systems; fractions are rounded for 32-bit and 64-bit systems. |
CSng | Single | -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values. |
CStr | String | Returns for CStr depend on the expression argument. |
CVar | Variant | Same range as Double for numerics. Same range as String for non-numerics. |
If the expression passed to the function is outside the range of the data type being converted to, an error occurs.
Conversion functions must be used to explicitly assign LongLong (including LongPtr on 64-bit platforms) to smaller integral types. Implicit conversions of LongLong to smaller integrals are not allowed.
In general, you can document your code using the data-type conversion functions to show that the result of some operation should be expressed as a particular data type rather than the default data type. For example, use CCur to force currency arithmetic in cases where single-precision, double-precision, or integer arithmetic normally would occur.
You should use the data-type conversion functions instead of Val to provide internationally aware conversions from one data type to another. For example, when you use CCur, different decimal separators, different thousand separators, and various currency options are properly recognized depending on the locale setting of your computer.
When the fractional part is exactly 0.5, CInt and CLng always round it to the nearest even number. For example, 0.5 rounds to 0, and 1.5 rounds to 2. CInt and CLng differ from the Fix and Int functions, which truncate, rather than round, the fractional part of a number. Also, Fix and Int always return a value of the same type as is passed in.
Use the IsDate function to determine if date can be converted to a date or time. CDate recognizes date literals and time literals as well as some numbers that fall within the range of acceptable dates. When converting a number to a date, the whole number portion is converted to a date. Any fractional part of the number is converted to a time of day, starting at midnight.
CDate recognizes date formats according to the locale setting of your system. The correct order of day, month, and year may not be determined if it is provided in a format other than one of the recognized date settings. In addition, a long date format is not recognized if it also contains the day-of-the-week string.
A CVDate function is also provided for compatibility with previous versions of Visual Basic. The syntax of the CVDate function is identical to the CDate function; however, CVDate returns a Variant whose subtype is Date instead of an actual Date type. Since there is now an intrinsic Date type, there is no further need for CVDate. The same effect can be achieved by converting an expression to a Date, and then assigning it to a Variant. This technique is consistent with the conversion of all other intrinsic types to their equivalent Variant subtypes.
The CDec function does not return a discrete data type; instead, it always returns a Variant whose value has been converted to a Decimal subtype.
CBool function example
This example uses the CBool function to convert an expression to a Boolean. If the expression evaluates to a nonzero value, CBool returns True, otherwise, it returns False.
CByte function example
This example uses the CByte function to convert an expression to a Byte.
CCur function example
This example uses the CCur function to convert an expression to a Currency.
CDate function example
This example uses the CDate function to convert a string to a Date. In general, hard-coding dates and times as strings (as shown in this example) is not recommended. Use date literals and time literals, such as #2/12/1969# and #4:45:23 PM# , instead.
CDbl function example
This example uses the CDbl function to convert an expression to a Double.
CDec function example
This example uses the CDec function to convert a numeric value to a Decimal.
CInt function example
This example uses the CInt function to convert a value to an Integer.
CLng function example
This example uses the CLng function to convert a value to a Long.
CSng function example
This example uses the CSng function to convert a value to a Single.
CStr function example
This example uses the CStr function to convert a numeric value to a String.
CVar function example
This example uses the CVar function to convert an expression to a Variant.
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
Метод Application.ConvertFormula (Excel)
Преобразует ссылки на ячейки в формулу между стилями ссылок A1 и R1C1, между относительными и абсолютными ссылками или и тем, и другим. Variant.
Синтаксис
expression. ConvertFormula (Formula, FromReferenceStyle, ToReferenceStyle, ToAbsolute, RelativeTo)
выражение: переменная, представляющая объект Application.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Formula | Обязательный | Variant | Строка, содержащая формулу, которую требуется преобразовать. Это должна быть допустимая формула, и она должна начинаться со знака равенства. |
FromReferenceStyle | Обязательный | XlReferenceStyle | Пример стиля формулы. |
ToReferenceStyle | Необязательный | Variant | Константу XlReferenceStyle , указывающую стиль ссылки, который требуется вернуть. Если этот аргумент опущен, стиль ссылки не изменяется; формула остается в стиле, заданном параметром FromReferenceStyle. |
ToAbsolute | Необязательный | Variant | Константой XlReferenceType , указывающей преобразованный ссылочный тип. Если этот аргумент опущен, ссылочный тип не изменяется. |
RelativeTo | Необязательный | Variant | Объект Range , содержащий одну ячейку. Относительные ссылки относятся к этой ячейке. |
Возвращаемое значение
Примечания
Существует ограничение в 255 символов для формулы.
Пример
В этом примере формула SUM, содержащая ссылки в стиле R1C1, преобразуется в эквивалентную формулу, содержащую ссылки в стиле A1, а затем отображается результат.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Функции преобразования типов
Каждая функция приводит выражение к нужному типу данных.
Синтаксис
- CBool(выражение)
- CByte(выражение)
- CCur(выражение)
- CDate(выражение)
- CDbl(выражение)
- CDec(выражение)
- CInt(выражение)
- CLng(выражение)
- CLngLng(выражение) (действительно только для 64-разрядных платформ).
- CLngPtr(выражение)
- CSng(выражение)
- CStr(выражение)
- CVar(выражение)
Обязательный аргумент выражение — это любое строковое или числовое выражение.
Возвращаемые типы
Тип возвращаемого значения определяется по имени функции в соответствии со следующей таблицей:
Функция | Тип возвращаемых данных | Диапазон выражения-аргумента |
---|---|---|
CBool | Boolean | Любое допустимое строковое или числовое выражение. |
CByte | Byte | От 0 до 255. |
CCur | Currency | От -922 337 203 685 477,5808 до 922 337 203 685 477,5807. |
CDate | Date | Любое допустимое выражение даты. |
CDbl | Double | От -1,79769313486231E308 до -4,94065645841247E-324 для отрицательных значений; от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений. |
CDec | Decimal | 79 228 162 514 264 337 593 543 950 335 для чисел без десятичных знаков. Для чисел с 28 десятичными знаками диапазон составляет 7,9228162514264337593543950335. Наименьшим возможным числом, отличным от нуля, является число 0,0000000000000000000000000001. |
CInt | Integer | От -32 768 до 32 767, дробная часть округляется. |
CLng | Long | От -2 147 483 648 до 2 147 483 647, дробная часть округляется. |
CLngLng | LongLong | От -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807; дробная часть округляется. (Действительно только для 64-разрядных платформ). |
CLngPtr | LongPtr | От -2 147 483 648 до 2 147 483 647 для 32-разрядных систем; от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 для 64-разрядных систем; дробная часть округляется в обоих типах систем. |
CSng | Single | От -3,402823E38 до -1,401298E-45 для отрицательных значений; от 1,401298E-45 до 3,402823E38 для положительных значений. |
CStr | String | Результат, возвращаемый функцией CStr, зависит от аргумента выражение. |
CVar | Variant | Диапазон совпадает с типом Double для числовых значений и с типом String для нечисловых значений. |
Примечания
Если выражение, переданное в функцию, не входит в диапазон типа, в который преобразуются данные, происходит ошибка.
Для явного присвоения значений типа LongLong (включая тип LongPtr на 64-разрядных платформах) целочисленным типам данных меньшего размера должны использоваться функции преобразования. Неявные преобразования типа LongLong в меньшие целочисленные типы не допускаются.
Как правило, функции преобразования типов используются в тексте программ для того, чтобы указать, что результатом той или иной операции должны стать данные определенного типа, а не типа, заданного по умолчанию. Например, с помощью функции CCur можно принудительно перейти к вычислениям в денежном формате в тех случаях, в которых обычно используются действия с числами с обычной точностью, двойной точностью или с целыми числами.
Функции преобразования типа данных следует использовать вместо функции Val для преобразования типов данных в приложениях, поддерживающих различные региональные стандарты. Например, при использовании функции CCur десятичные разделители, разделители групп разрядов и параметры денежных единиц распознаются в соответствии с языковыми и региональными параметрами компьютера.
Если дробная часть целого числа строго равна 0,5, функции CInt и CLng всегда округляют результат до ближайшего четного числа. Например, 0,5 округляется до 0, а 1,5 — до 2. Функции CInt и CLng отличаются от функций Fix и Int, которые отбрасывают дробную часть числа, а не округляют ее. Кроме того, функции Fix и Int всегда возвращают значение того же типа, что и переданное им выражение.
Для определения возможности преобразования date в дату или время используется функция IsDate. Функция CDate распознает литералы даты и времени, а также некоторые числа, которые находятся в диапазоне допустимых дат. При преобразовании числа в дату преобразуется целая часть числа. Дробная часть преобразуется во время суток, начиная с полуночи.
Функция CDate распознает форматы даты в соответствии с национальной настройкой системы. Если формат передаваемого аргумента не соответствует распознаваемым настройкам даты, функция не сможет определить правильный порядок дней, месяцев и лет. Кроме того, длинный формат даты не распознается, если в нем содержится строка дня недели.
Функция CVDate предназначена для обеспечения совместимости с предыдущими версиями Visual Basic. Синтаксис функции CVDate не отличается от синтаксиса функции CDate; однако функция CVDate возвращает тип Variant, подтипом которого является тип Date, а не собственно тип Date. Поскольку теперь реализован встроенный тип Date, необходимость в функции CVDate отпадает. Такой же результат можно получить, если преобразовать выражение в тип Date и присвоить его типу Variant. Этот способ позволяет преобразовать все прочие встроенные типы в эквивалентные им подтипы Variant.
Функция CDec не возвращает отдельный тип данных. Вместо этого она всегда возвращает результат типа Variant, значение которого преобразовано в подтип Decimal.
Пример функции CBool
В этом примере функция CBool используется для преобразования выражения в тип Boolean. Если выражение разрешается в ненулевое значение, функция CBool возвращает значение True, в противном случае она возвращает значение False.
Пример функции CByte
В этом примере функция CByte используется для преобразования выражения в тип Byte.
Пример функции CCur
В этом примере функция CCur используется для преобразования выражения в тип Currency.
Пример функции CDate
В этом примере функция CDate используется для преобразования выражения в тип Date. Как правило, не рекомендуется определять дату и время в виде строк (как показано в этом примере). Вместо этого рекомендуется использовать литералы даты и времени, такие как #2/12/1969# и #4:45:23 PM# .
Пример функции CDbl
В этом примере функция CDbl используется для преобразования выражения в тип Double.
Пример функции CDec
В этом примере функция CDec используется для преобразования выражения в тип Decimal.
Пример функции CInt
В этом примере функция CInt используется для преобразования выражения в тип Integer.
Пример функции CLng
В этом примере функция CLng используется для преобразования выражения в тип Long.
Пример функции CSng
В этом примере функция CSng используется для преобразования выражения в тип Single.
Пример функции CStr
В этом примере функция CStr используется для преобразования выражения в тип String.
Пример функции CVar
В этом примере функция CVar используется для преобразования выражения в тип Variant.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
This is somewhat a continuation on my previous post VBA – Convert XLS to XLSX in which I provided a simple little procedure to upgrade an older xls file to the newer xlsx file format.
I thought to myself, would it be nice to have a more versatile function that could migrate between various other common file formats.
So I set out to take my original function and transform it to enable to user to specify the desired output format and came up with a nice function that enabled anyone to converts Excel compatible files to another Excel compatible format.
Then I said to myself, it must be possible to do something similar for Word and set out to create a function that would enable people to convert file between the various Word compatible formats.
Below are the 2 functions I came up with.
Excel File Format Conversion Function
The following function can be used to convert files between:
- csv -> xlsx
- xls -> xlsx
- xls -> xlsm
- xls -> txt
- xlsx -> txt
- xlsx -> csv
- and so on…
Enum XlFileFormat 'Ref: https://msdn.microsoft.com/en-us/vba/excel-vba/articles/xlfileformat-enumeration-excel xlAddIn = 18 'Microsoft Excel 97-2003 Add-In *.xla xlAddIn8 = 18 'Microsoft Excel 97-2003 Add-In *.xla xlCSV = 6 'CSV *.csv xlCSVMac = 22 'Macintosh CSV *.csv xlCSVMSDOS = 24 'MSDOS CSV *.csv xlCSVWindows = 23 'Windows CSV *.csv xlCurrentPlatformText = -4158 'Current Platform Text *.txt xlDBF2 = 7 'Dbase 2 format *.dbf xlDBF3 = 8 'Dbase 3 format *.dbf xlDBF4 = 11 'Dbase 4 format *.dbf xlDIF = 9 'Data Interchange format *.dif xlExcel12 = 50 'Excel Binary Workbook *.xlsb xlExcel2 = 16 'Excel version 2.0 (1987) *.xls xlExcel2FarEast = 27 'Excel version 2.0 far east (1987) *.xls xlExcel3 = 29 'Excel version 3.0 (1990) *.xls xlExcel4 = 33 'Excel version 4.0 (1992) *.xls xlExcel4Workbook = 35 'Excel version 4.0. Workbook format (1992) *.xlw xlExcel5 = 39 'Excel version 5.0 (1994) *.xls xlExcel7 = 39 'Excel 95 (version 7.0) *.xls xlExcel8 = 56 'Excel 97-2003 Workbook *.xls xlExcel9795 = 43 'Excel version 95 and 97 *.xls xlHtml = 44 'HTML format *.htm; *.html xlIntlAddIn = 26 'International Add-In No file extension xlIntlMacro = 25 'International Macro No file extension xlOpenDocumentSpreadsheet = 60 'OpenDocument Spreadsheet *.ods xlOpenXMLAddIn = 55 'Open XML Add-In *.xlam xlOpenXMLStrictWorkbook = 61 '(&;H3D) Strict Open XML file *.xlsx xlOpenXMLTemplate = 54 'Open XML Template *.xltx xlOpenXMLTemplateMacroEnabled = 53 'Open XML Template Macro Enabled *.xltm xlOpenXMLWorkbook = 51 'Open XML Workbook *.xlsx xlOpenXMLWorkbookMacroEnabled = 52 'Open XML Workbook Macro Enabled *.xlsm xlSYLK = 2 'Symbolic Link format *.slk xlTemplate = 17 'Excel Template format *.xlt xlTemplate8 = 17 ' Template 8 *.xlt xlTextMac = 19 'Macintosh Text *.txt xlTextMSDOS = 21 'MSDOS Text *.txt xlTextPrinter = 36 'Printer Text *.prn xlTextWindows = 20 'Windows Text *.txt xlUnicodeText = 42 'Unicode Text No file extension; *.txt xlWebArchive = 45 'Web Archive *.mht; *.mhtml xlWJ2WD1 = 14 'Japanese 1-2-3 *.wj2 xlWJ3 = 40 'Japanese 1-2-3 *.wj3 xlWJ3FJ3 = 41 'Japanese 1-2-3 format *.wj3 xlWK1 = 5 'Lotus 1-2-3 format *.wk1 xlWK1ALL = 31 'Lotus 1-2-3 format *.wk1 xlWK1FMT = 30 'Lotus 1-2-3 format *.wk1 xlWK3 = 15 'Lotus 1-2-3 format *.wk3 xlWK3FM3 = 32 'Lotus 1-2-3 format *.wk3 xlWK4 = 38 'Lotus 1-2-3 format *.wk4 xlWKS = 4 'Lotus 1-2-3 format *.wks xlWorkbookDefault = 51 'Workbook default *.xlsx xlWorkbookNormal = -4143 'Workbook normal *.xls xlWorks2FarEast = 28 'Microsoft Works 2.0 far east format *.wks xlWQ1 = 34 'Quattro Pro format *.wq1 xlXMLSpreadsheet = 46 'XML Spreadsheet *.xml End Enum '--------------------------------------------------------------------------------------- ' Procedure : XLS_ConvertFileFormat ' Author : Daniel Pineault, CARDA Consultants Inc. ' Website : http://www.cardaconsultants.com ' Purpose : Converts an Excel compatible file format to another format ' Copyright : The following is release as Attribution-ShareAlike 4.0 International ' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/ ' Req'd Refs: Uses Late Binding, so none required ' ' Input Variables: ' ~~~~~~~~~~~~~~~~ ' sOrigFile : String - Original file path, name and extension to be converted ' lNewFileFormat: New File format to save the original file as ' bDelOrigFile : True/False - Should the original file be deleted after the conversion ' ' Usage: ' ~~~~~~ ' Convert an xls file into a txt file and delete the xls once completed ' Call XLS_ConvertFileFormat("C:TempTest.xls", xlTextWindows) ' Convert an xls file into a xlsx file and NOT delete the xls once completed ' Call XLS_ConvertFileFormat("C:TempTest.xls", False) ' Convert a csv file into a xlsx file and delete the xls once completed ' Call XLS_ConvertFileFormat("C:TempTest.csv", xlWorkbookDefault, True) ' ' Revision History: ' Rev Date(yyyy/mm/dd) Description ' ************************************************************************************** ' 1 2018-02-27 Initial Release ' 2 2020-12-31 Fixed typo xlDBF24 -> xlDBF4 '--------------------------------------------------------------------------------------- Function XLS_ConvertFileFormat(ByVal sOrigFile As String, _ Optional lNewFileFormat As XlFileFormat = xlOpenXMLWorkbook, _ Optional bDelOrigFile As Boolean = False) As Boolean '#Const EarlyBind = True 'Use Early Binding, Req. Reference Library #Const EarlyBind = False 'Use Late Binding #If EarlyBind = True Then 'Early Binding Declarations Dim oExcel As Excel.Application Dim oExcelWrkBk As Excel.Workbook #Else 'Late Binding Declaration/Constants Dim oExcel As Object Dim oExcelWrkBk As Object #End If Dim bExcelOpened As Boolean Dim sOrigFileExt As String Dim sNewXLSFileExt As String 'Determine the file extension associated with the requested file format 'for properly renaming the output file Select Case lNewFileFormat Case xlAddIn, xlAddIn8 sNewFileExt = ".xla" Case xlCSV, xlCSVMac, xlCSVMSDOS, xlCSVWindows sNewFileExt = ".csv" Case xlCurrentPlatformText, xlTextMac, xlTextMSDOS, xlTextWindows, xlUnicodeText sNewFileExt = ".txt" Case xlDBF2, xlDBF3, xlDBF4 sNewFileExt = ".dbf" Case xlDIF sNewFileExt = ".dif" Case xlExcel12 = 50 'Excel Binary Workbook *.xlsb sNewFileExt = ".xlsb" Case xlExcel2, xlExcel2FarEast, xlExcel3, xlExcel4, xlExcel5, xlExcel7, _ xlExcel8, xlExcel9795, xlWorkbookNormal sNewFileExt = ".xls" Case xlExcel4Workbook = 35 'Excel version 4.0. Workbook format (1992) *.xlw sNewFileExt = ".xlw" Case xlHtml = 44 'HTML format *.htm; *.html sNewFileExt = ".html" Case xlIntlAddIn, xlIntlMacro sNewFileExt = "" Case xlOpenDocumentSpreadsheet 'OpenDocument Spreadsheet *.ods sNewFileExt = ".ods" Case xlOpenXMLAddIn 'Open XML Add-In *.xlam sNewFileExt = ".xlam" Case xlOpenXMLStrictWorkbook, xlOpenXMLWorkbook, xlWorkbookDefault = 51 sNewFileExt = ".xlsx" Case xlOpenXMLTemplate 'Open XML Template *.xltx sNewFileExt = ".xltx" Case xlOpenXMLTemplateMacroEnabled 'Open XML Template Macro Enabled *.xltm sNewFileExt = ".xltm" Case xlOpenXMLWorkbookMacroEnabled 'Open XML Workbook Macro Enabled *.xlsm sNewFileExt = ".xlsm" Case xlSYLK 'Symbolic Link format *.slk sNewFileExt = ".slk" Case xlTemplate, xlTemplate8 ' Template 8 *.xlt sNewFileExt = ".xlt" Case xlTextPrinter 'Printer Text *.prn sNewFileExt = ".prn" Case xlWebArchive 'Web Archive *.mht; *.mhtml sNewFileExt = ".mhtml" Case xlWJ2WD1 'Japanese 1-2-3 *.wj2 sNewFileExt = ".wj2" Case xlWJ3, xlWJ3FJ3 'Japanese 1-2-3 format *.wj3 sNewFileExt = ".wj3" Case xlWK1, xlWK1ALL, xlWK1FMT 'Lotus 1-2-3 format *.wk1 sNewFileExt = ".wk1" Case xlWK3, xlWK3FM3 'Lotus 1-2-3 format *.wk3 sNewFileExt = ".wk3" Case xlWK4 'Lotus 1-2-3 format *.wk4 sNewFileExt = ".wk4" Case xlWKS, xlWorks2FarEast 'Lotus 1-2-3 format *.wks sNewFileExt = ".wks" Case xlWQ1 'Quattro Pro format *.wq1 sNewFileExt = ".wq1" Case xlXMLSpreadsheet 'XML Spreadsheet *.xml sNewFileExt = ".xml" End Select 'Determine the original file's extension for properly renaming the output file sOrigFileExt = "." & Right(sOrigFile, Len(sOrigFile) - InStrRev(sOrigFile, ".")) 'Start Excel On Error Resume Next Set oExcel = GetObject(, "Excel.Application") 'Bind to existing instance of Excel If Err.Number <> 0 Then 'Could not get instance of Excel, so create a new one Err.Clear On Error GoTo Error_Handler Set oExcel = CreateObject("Excel.Application") Else 'Excel was already running bExcelOpened = True End If On Error GoTo Error_Handler oExcel.ScreenUpdating = False oExcel.Visible = False 'Keep Excel hidden until we are done with our manipulation Set oExcelWrkBk = oExcel.Workbooks.Open(sOrigFile) 'Open the original file 'Save it as the requested new file format oExcelWrkBk.SaveAS Replace(sOrigFile, sOrigFileExt, sNewFileExt), lNewFileFormat, , , , False XLS_ConvertFileFormat = True 'Report back that we managed to save the file in the new format oExcelWrkBk.Close False 'Close the workbook If bExcelOpened = False Then oExcel.Quit 'Quit Excel only if we started it Else oExcel.ScreenUpdating = True oExcel.Visible = True End If If bDelOrigFile = True Then Kill (sOrigFile) 'Delete the original file if requested Error_Handler_Exit: On Error Resume Next Set oExcelWrkBk = Nothing Set oExcel = Nothing Exit Function Error_Handler: MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _ "Error Number: " & Err.Number & vbCrLf & _ "Error Source: XLS_ConvertFileFormat" & vbCrLf & _ "Error Description: " & Err.Description & _ Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _ , vbOKOnly + vbCritical, "An Error has Occurred!" oExcel.ScreenUpdating = True oExcel.Visible = True 'Make excel visible to the user Resume Error_Handler_Exit End Function
Word File Format Conversion Function
The following function can be used to convert files between:
- doc -> docx
- docx -> dotx
- docx -> pdf
- docx -> html
- and so on…
Enum WdSaveFormat 'Ref: https://msdn.microsoft.com/en-us/vba/word-vba/articles/wdsaveformat-enumeration-word wdFormatDocument = 0 'Microsoft Office Word 97 - 2003 binary file format. wdFormatDOSText = 4 'Microsoft DOS text format. *.txt wdFormatDOSTextLineBreaks = 5 'Microsoft DOS text with line breaks preserved. *.txt wdFormatEncodedText = 7 'Encoded text format. *.txt wdFormatFilteredHTML = 10 'Filtered HTML format. wdFormatFlatXML = 19 'Open XML file format saved as a single XML file. ' wdFormatFlatXML = 20 'Open XML file format with macros enabled saved as a single XML file. wdFormatFlatXMLTemplate = 21 'Open XML template format saved as a XML single file. wdFormatFlatXMLTemplateMacroEnabled = 22 'Open XML template format with macros enabled saved as a single XML file. wdFormatOpenDocumentText = 23 'OpenDocument Text format. *.odt wdFormatHTML = 8 'Standard HTML format. *.html wdFormatRTF = 6 'Rich text format (RTF). *.rtf wdFormatStrictOpenXMLDocument = 24 'Strict Open XML document format. wdFormatTemplate = 1 'Word template format. wdFormatText = 2 'Microsoft Windows text format. *.txt wdFormatTextLineBreaks = 3 'Windows text format with line breaks preserved. *.txt wdFormatUnicodeText = 7 'Unicode text format. *.txt wdFormatWebArchive = 9 'Web archive format. wdFormatXML = 11 'Extensible Markup Language (XML) format. *.xml wdFormatDocument97 = 0 'Microsoft Word 97 document format. *.doc wdFormatDocumentDefault = 16 'Word default document file format. For Word, this is the DOCX format. *.docx wdFormatPDF = 17 'PDF format. *.pdf wdFormatTemplate97 = 1 'Word 97 template format. wdFormatXMLDocument = 12 'XML document format. wdFormatXMLDocumentMacroEnabled = 13 'XML document format with macros enabled. wdFormatXMLTemplate = 14 'XML template format. wdFormatXMLTemplateMacroEnabled = 15 'XML template format with macros enabled. wdFormatXPS = 18 'XPS format. *.xps End Enum '--------------------------------------------------------------------------------------- ' Procedure : Word_ConvertFileFormat ' Author : Daniel Pineault, CARDA Consultants Inc. ' Website : http://www.cardaconsultants.com ' Purpose : Converts a Word compatible file format to another format ' Copyright : The following is release as Attribution-ShareAlike 4.0 International ' (CC BY-SA 4.0) - https://creativecommons.org/licenses/by-sa/4.0/ ' Req'd Refs: Uses Late Binding, so none required ' ' Input Variables: ' ~~~~~~~~~~~~~~~~ ' sOrigFile : String - Original file path, name and extension to be converted ' lNewFileFormat: New File format to save the original file as ' bDelOrigFile : True/False - Should the original file be deleted after the conversion ' ' Usage: ' ~~~~~~ ' Convert a doc file into a docx file but retain the original copy ' Call Word_ConvertFileFormat("C:UsersDanielDocumentsResume.doc", wdFormatPDF) ' Convert a doc file into a docx file and delete the original doc once converted ' Call Word_ConvertFileFormat("C:UsersDanielDocumentsResume.doc", wdFormatPDF, True) ' ' Revision History: ' Rev Date(yyyy/mm/dd) Description ' ************************************************************************************** ' 1 2018-02-27 Initial Release '--------------------------------------------------------------------------------------- Function Word_ConvertFileFormat(ByVal sOrigFile As String, _ Optional lNewFileFormat As WdSaveFormat = wdFormatDocumentDefault, _ Optional bDelOrigFile As Boolean = False) As Boolean '#Const EarlyBind = True 'Use Early Binding, Req. Reference Library #Const EarlyBind = False 'Use Late Binding #If EarlyBind = True Then 'Early Binding Declarations Dim oWord As Word.Application Dim oDoc As Word.Document #Else 'Late Binding Declaration/Constants Dim oWord As Object Dim oDoc As Object #End If Dim bWordOpened As Boolean Dim sOrigFileExt As String Dim sNewFileExt As String 'Determine the file extension associated with the requested file format 'for properly renaming the output file Select Case lNewFileFormat Case wdFormatDocument sNewFileExt = "." Case wdFormatDOSText, wdFormatDOSTextLineBreaks, wdFormatEncodedText, wdFormatOpenDocumentText, wdFormatText, wdFormatTextLineBreaks, wdFormatUnicodeText sNewFileExt = ".txt" Case wdFormatFilteredHTML, wdFormatHTML sNewFileExt = ".html" Case wdFormatFlatXML, wdFormatXML, wdFormatXMLDocument sNewFileExt = ".xml" Case wdFormatFlatXMLTemplate sNewFileExt = "." Case wdFormatFlatXMLTemplateMacroEnabled sNewFileExt = "." Case wdFormatRTF sNewFileExt = ".rtf" Case wdFormatStrictOpenXMLDocument sNewFileExt = "." Case wdFormatTemplate sNewFileExt = "." Case wdFormatWebArchive sNewFileExt = "." Case wdFormatDocument97 sNewFileExt = ".doc" Case wdFormatDocumentDefault sNewFileExt = ".docx" Case wdFormatPDF sNewFileExt = ".pdf" Case wdFormatTemplate97 sNewFileExt = "." Case wdFormatXMLDocumentMacroEnabled sNewFileExt = ".docm" Case wdFormatXMLTemplate sNewFileExt = ".doct" Case wdFormatXMLTemplateMacroEnabled sNewFileExt = "." Case wdFormatXPS sNewFileExt = ".xps" End Select 'Determine the original file's extension for properly renaming the output file sOrigFileExt = "." & Right(sOrigFile, Len(sOrigFile) - InStrRev(sOrigFile, ".")) 'Start Excel On Error Resume Next Set oWord = GetObject(, "Word.Application") 'Bind to existing instance of Word If Err.Number <> 0 Then 'Could not get instance of Word, so create a new one Err.Clear On Error GoTo Error_Handler Set oWord = CreateObject("Word.Application") Else 'Word was already running bWordOpened = True End If On Error GoTo Error_Handler oWord.Visible = False 'Keep Word hidden until we are done with our manipulation Set oDoc = oWord.Documents.Open(sOrigFile) 'Open the original file 'Save it as the requested new file format oDoc.SaveAs2 Replace(sOrigFile, sOrigFileExt, sNewFileExt), lNewFileFormat Word_ConvertFileFormat = True 'Report back that we managed to save the file in the new format oDoc.Close False 'Close the document If bWordOpened = False Then oWord.Quit 'Quit Word only if we started it Else oWord.Visible = True 'Since it was already open, ensure it is visible End If If bDelOrigFile = True Then Kill (sOrigFile) 'Delete the original file if requested Error_Handler_Exit: On Error Resume Next Set oDoc = Nothing Set oWord = Nothing Exit Function Error_Handler: MsgBox "The following error has occurred" & vbCrLf & vbCrLf & _ "Error Number: " & Err.Number & vbCrLf & _ "Error Source: XLS_ConvertFileFormat" & vbCrLf & _ "Error Description: " & Err.Description & _ Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _ , vbOKOnly + vbCritical, "An Error has Occurred!" oWord.Visible = True 'Make excel visible to the user Resume Error_Handler_Exit End Function
Missing File Extensions
Unlike the Excel function, the Word function is currently missing some of the file extensions. I created the general framework, but could not easily find the associated file extensions to some of the file format. You need only complete the missing entry and it will work. So simply update the
sNewFileExt = "."
entries as applicable.
Numeric values are defined by data types like integer or byte. These data types are used for optimizing the processing and memory allocation in Excel. In this guide, we’re going to show you how to convert string into number in Excel VBA.
Download Workbook
Data types in VBA
Like in some other programming languages, VBA uses data types to identify what variables it can store and how they are stored. Most of the data types in VBA define numeric values. Here is a brief list of numeric data types:
Data type | Storage | Range |
Byte | 1 byte | 0 to 255 |
Integer | 2 bytes | -32,768 to 32,767 |
Long | 4 bytes | -2,147,483,648 to 2,147,483,647 |
Single | 4 bytes | -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values |
Double | 8 bytes | -1.79769313486231E308 to-4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values |
LongLong | 8 bytes |
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 Valid on 64-bit platforms only. |
Currency | 8 bytes | -922,337,203,685,477.5808 to 922,337,203,685,477.5807 |
Decimal | 14 bytes | +/-79,228,162,514,264,337,593,543,950,335 with no decimal point; +/-7.9228162514264337593543950335 with 28 places to the right of the decimal |
Since there are many numeric data types, there are many functions to convert a string into number in Excel VBA.
Functions to a convert string into number in Excel VBA
All conversion functions use the same syntax: Each requires a single string argument to convert into a number. For example:
Each function returns an error If the string argument either is not a numeric or is outside the range of the data type being converted.
CInt(«A») returns a type mismatch error, because the «A» is not a numeric value.
CByte(«1250») returns an overflow exception.
Function | Return type | Example |
CByte | Byte | CByte(«65.75») returns 66 |
CCur | Currency | CCur(«$256,000.50») returns 256000.5 |
CDbl | Double | CDbl(128.239856 * 4.8 * 0.04) returns 24.622052352 |
CDec | Decimal | CDec(«15000000.5678») returns 15000000.5678 |
CInt | Integer | CInt(«1234.56») returns 1235 |
CLng | Long | CLng(«1,500,000.88») returns 15000001 |
CLngLng | LongLong | CLngLng(«1,250,500,000.88») returns 1250500001 |
CSng | Single | CSng(«5.67854») returns 5.67854 |
Bonus: Use IsNumeric function to verify value
To avoid type mismatch errors, you can use the IsNumeric function to check if the expression is numeric or not. The function returns Boolean value based on the expression. TRUE if the expression is numeric, FALSE otherwise.
Here is a sample function that can check the data first, and convert the it into an integer if it is numeric. If the argument is not a valid number, the function returns 0.
Function ConvertInt(arg As String) As Integer If IsNumeric(arg) Then ConvertInt = CInt(arg) End Function
g.tomilin Пользователь Сообщений: 36 |
#1 05.02.2018 12:20:04 Добрый день, хочу записать макрос преобразования книги из xls в xlsx. Вот что записал макрорекодер:
Но проблема в том, что файлы могут открывать в разных директориях и иметь разные имена. Пытался использовать ACTIVEBOOK.PATH & ACTIVEBOOK.NAME но файл сохраняется с расширением xls, т.к. видимо name включает и расширение Изменено: g.tomilin — 05.02.2018 17:27:19 Что такое всё? |
||
Jack Famous Пользователь Сообщений: 10846 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Изменено: Jack Famous — 05.02.2018 12:24:12 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Ігор Гончаренко Пользователь Сообщений: 13746 |
#3 05.02.2018 12:43:22
каким способом планируете выбирать файлы? Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Alemox Пользователь Сообщений: 2183 |
тогда диалоговое окно по выбору файлов с последующим их открытием и пересохранением в нужное расширение. Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. |
g.tomilin Пользователь Сообщений: 36 |
Ігор Гончаренко, |
RAN Пользователь Сообщений: 7091 |
#6 05.02.2018 17:20:22
Тады в надстройку код
|
||||
g.tomilin Пользователь Сообщений: 36 |
RAN, только начинаю изучать vba, и у меня вопрос, я так понимаю представленный макрос просто добавляет к ActiveWorkbook.FullName ,букву «x» ? В т.ч. для этого макрорекодер указывает FileFormat:=xlOpenXMLWorkbook |
RAN Пользователь Сообщений: 7091 |
g.tomilin, вы изложили хотелку. |
_Igor_61 Пользователь Сообщений: 3007 |
#9 06.02.2018 07:45:29
Внимательно посмотрите на код от RAN, а потом прочитайте это:
|
||||
g.tomilin Пользователь Сообщений: 36 |
RAN, =)) Спасибо, я же говорю только начинаю изучать. увидел 51 но даже не подумал что в ней зашифрован целый мир Осталось только закрыть и открыть книгу, т.к. у преобразованной книги остается режим совместимости _Igor_61, а где можно помотреть весь перечень таких цифровых комбинаций для VBA? Изменено: g.tomilin — 06.02.2018 09:16:03 |
RAN Пользователь Сообщений: 7091 |
#11 06.02.2018 09:02:58
|
||
_Igor_61 Пользователь Сообщений: 3007 |
#12 06.02.2018 09:35:31 Посмотреть наверное где-то в справке или в интернете. Я об этом от Юрия М. узнал в одной из тем:
|
||
g.tomilin Пользователь Сообщений: 36 |
RAN, нашел кодировки форматов, увидел возможные варианты причин ошибки, но к сожалению через ф1 не понять как закрыть и открыть книгу =) Изменено: g.tomilin — 06.02.2018 10:19:19 |
g.tomilin Пользователь Сообщений: 36 |
#14 06.02.2018 10:21:34 _Igor_61, да я в справке просто 51 набрал и он выдал —
Что такое всё? |
|
g.tomilin Пользователь Сообщений: 36 |
Есть ещё какие-нибудь предложения по вопросу? =) |
sokol92 Пользователь Сообщений: 4445 |
#16 06.02.2018 17:31:04
Тут . Владимир |
||
так: Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
g.tomilin Пользователь Сообщений: 36 |
Ігор Гончаренко, проблема в том что путь как и имя файла неконстанта. |
Дмитрий Щербаков Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
#19 07.02.2018 09:27:20
ну да, ну да. И Вы вообще не знаете куда сохраняли и как назвали файл? А как же Вы тогда кодом его сохраняете, позвольте узнать? Не думаю, что все это происходит при помощи двух неизвестных. Скорее всего это какие-то переменные, которые никто не мешает использовать не только для сохранения, но и для открытия. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Дмитрий Щербаков Пользователь Сообщений: 14181 Профессиональная разработка приложений для MS Office |
#20 07.02.2018 09:39:38 Вот, накидал код — должен работать:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
g.tomilin Пользователь Сообщений: 36 |
#21 07.02.2018 09:51:40 Дмитрий Щербаков, Вот код, может конечно не идеальный но работает. добавил к коду
По поводу множества открытых xls тоже спасибо, буду иметь в виду. Но в практике обычно открывается один файл с ним происходят преобразования, он анализируется, после уже открывается другой файл и т.д. Всем спасибо (особоенно RAN, Ігор Гончаренко, Дмитрий Щербаков, )! Решение найдено. ps Дмитрий Щербаков протестирую ваш код. Дмитрий Щербаков, с if красивее и удобнее, спасибо =) Изменено: g.tomilin — 07.02.2018 11:09:52 Что такое всё? |
||
g.tomilin Пользователь Сообщений: 36 |
#22 07.02.2018 11:28:36 RAN,
Что такое всё? |
||
эквивалентно Dim OldName as String тут Изменено: Ігор Гончаренко — 07.02.2018 13:06:19 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
g.tomilin Пользователь Сообщений: 36 |
Ігор Гончаренко,Спасибо за объяснение все понятно. |
RAN Пользователь Сообщений: 7091 |
#25 07.02.2018 18:47:35 Именно. PS
Не могли бы вы прокомментировать, что делают, и зачем сделаны добавки? Изменено: RAN — 07.02.2018 18:53:47 |
||
g.tomilin Пользователь Сообщений: 36 |
#26 08.02.2018 09:15:57 RAN, не верно скопировал Private Sub CommandButton1_Click() Т.е. если просто пересохранить файл в xlsx то остается режим совместимости, поэтому нужно закрыьт и заново открыть преобразованную книгу. Изменено: g.tomilin — 08.02.2018 09:38:01 Что такое всё? |