Сообщество программистов Autodesk в СНГ

ADN Club => VBA => Тема начата: wavaw от 21-05-2017, 11:14:47

Название: формат данных таблицы
Отправлено: wavaw от 21-05-2017, 11:14:47
здравствуйте.
подскажите, пожалуйста, как привести формат ячеек таблицы к виду "2 цифры после запятой"

Код - Visual Basic [Выбрать]
  1. 'Добавляем таблицу
  2.        pptabl(0) = pGaz(0) - 1.85 * MyScale
  3.         pptabl(1) = pp(1) ' - 75 * MyScale
  4.        Set MyTable = ThisDrawing.ModelSpace.AddTable(pptabl, 5, 1, 1#, 1#)
  5.         MyTable.StyleName = "V"
  6.         MyTable.SetColumnWidth 0, 3.7 * MyScale
  7.         MyTable.SetRowHeight 0, 15 * MyScale
  8.         MyTable.SetRowHeight 1, 15 * MyScale
  9.         MyTable.SetRowHeight 2, 15 * MyScale
  10.         MyTable.SetRowHeight 3, 15 * MyScale
  11.         MyTable.SetRowHeight 4, 15 * MyScale
  12.         MyTable.SetTextHeight 0, 2# * MyScale
  13.         MyTable.SetTextHeight 1, 2# * MyScale
  14.         MyTable.SetTextHeight 2, 2# * MyScale
  15.         MyTable.SetTextHeight 3, 2# * MyScale
  16.         MyTable.SetTextHeight 4, 2# * MyScale
  17.         MyTable.SetTextRotation 0, 0, acDegrees090
  18.         MyTable.SetTextRotation 1, 0, acDegrees090
  19.         MyTable.SetTextRotation 2, 0, acDegrees090
  20.         MyTable.SetTextRotation 3, 0, acDegrees090
  21.         MyTable.SetTextRotation 4, 0, acDegrees090
  22.        
  23.         'Устанавливаем невидимость границ ячеек
  24.        MyTable.SetGridVisibility acHorzBottom, acTitleRow, False
  25.         MyTable.SetGridVisibility acHorzTop, acTitleRow, False
  26.         MyTable.SetGridVisibility acVertLeft, acTitleRow, False
  27.         MyTable.SetGridVisibility acVertRight, acTitleRow, False
  28.         MyTable.SetGridVisibility acHorzInside, acTitleRow, False
  29.         MyTable.SetGridVisibility acVertInside, acTitleRow, False
  30.        
  31.         MyTable.SetGridVisibility acHorzBottom, acHeaderRow, False
  32.         MyTable.SetGridVisibility acHorzTop, acHeaderRow, False
  33.         MyTable.SetGridVisibility acVertLeft, acHeaderRow, False
  34.         MyTable.SetGridVisibility acVertRight, acHeaderRow, False
  35.         MyTable.SetGridVisibility acHorzInside, acHeaderRow, False
  36.         MyTable.SetGridVisibility acVertInside, acHeaderRow, False
  37.        
  38.         MyTable.SetGridVisibility acHorzBottom, acDataRow, False
  39.         MyTable.SetGridVisibility acHorzTop, acDataRow, False
  40.         MyTable.SetGridVisibility acVertLeft, acDataRow, False
  41.         MyTable.SetGridVisibility acVertRight, acDataRow, False
  42.         MyTable.SetGridVisibility acHorzInside, acDataRow, False
  43.         MyTable.SetGridVisibility acVertInside, acDataRow, False
  44.         'Конец
  45.        
  46.         'Запись значений в ячейки таблицы
  47.        MyTable.SetCellValue 0, 0, "-"
  48.         MyTable.SetCellValue 1, 0, CSng(отметкаЗемляФактическая)
  49.         MyTable.SetCellValue 2, 0, CSng(отметкаДноТраншеи)
  50.         MyTable.SetCellValue 3, 0, CSng(отметкаВерхаТрубы)
  51.         MyTable.SetCellValue 4, 0, CSng(глубинаТраншеи)
  52.         'конец

(https://s3.postimg.org/m0q8q9zfz/image.jpg) (https://postimg.org/image/m0q8q9zfz/)
Название: Re: формат данных таблицы
Отправлено: Александр Ривилис от 21-05-2017, 15:15:25
Это вопрос на знание VBA, а не AutoCAD.
Для преобразования числа в строку есть функция FormatNumber.
Пример:
Код - Visual Basic [Выбрать]
  1. Sub TestFoprmat()
  2. s = FormatNumber(123.12345, 2)
  3. MsgBox (s)
  4. End Sub

(https://lh3.googleusercontent.com/-jXdEhYWu3TA/WSGEuwwKNNI/AAAAAAAAJG8/P9mMVf1tqnkO12S3cf1Bevdm16YtuTByQCHM/s0/clipboard5.png)
Название: Re: формат данных таблицы
Отправлено: wavaw от 21-05-2017, 20:21:25
проблема не в самом ВБА, а именно в том, что по дефолту ячейки таблицы получаются такие, что "округляют" до 6 знака после запятой. хоть значения попадают ровно с округлением до сотых.

Код - Visual Basic [Выбрать]
  1. 'Запись значений в ячейки таблицы
  2.        s = FormatNumber(отметкаЗемляФактическая, 2)
  3.         MsgBox (s)
  4.         MyTable.SetCellValue 0, 0, "-"
  5.         MyTable.SetCellValue 1, 0, CSng(s)
  6.         MyTable.SetCellValue 2, 0, CSng(отметкаДноТраншеи)
  7.         MyTable.SetCellValue 3, 0, CSng(отметкаВерхаТрубы)
  8.         MyTable.SetCellValue 4, 0, CSng(глубинаТраншеи)
  9.         'конец


(https://s1.postimg.org/pig008euz/image.jpg) (https://postimg.org/image/pig008euz/)
Название: Re: формат данных таблицы
Отправлено: Александр Ривилис от 21-05-2017, 20:40:24
А если вместо
Код - Visual Basic [Выбрать]
  1. MyTable.SetCellValue 1, 0, CSng(s)
ты напишешь
Код - Visual Basic [Выбрать]
  1. MyTable.SetCellValue 1, 0, s
?
Название: Re: формат данных таблицы
Отправлено: wavaw от 21-05-2017, 21:20:24
ошибки не последовало, но никаких значений в таблицу не вписалось - пустые ячейки получились

Код - Visual Basic [Выбрать]
  1. 'Запись значений в ячейки таблицы
  2.        s = FormatNumber(отметкаЗемляФактическая, 2)
  3.         'MsgBox (s)
  4.        MyTable.SetCellValue 0, 0, "-"
  5.         MyTable.SetCellValue 1, 0, s
Название: Re: формат данных таблицы
Отправлено: Александр Ривилис от 21-05-2017, 22:15:26
А если вместо
Код - Visual Basic [Выбрать]
  1. MyTable.SetCellValue 1, 0, s
Код - Visual Basic [Выбрать]
  1. MyTable.SetText 1, 0, s
?
Ну и для других ячеек аналогично.