Тема: vla-select для определения ячейки в таблице

Подскажите пожалуйста в чем ошибка. Пытаюсь определить ячейку в таблице с помощью функции vla-select. Пример взял из книги Полещука.

  (setq Object (vlax-ename->vla-object (car (entsel))))
     (vla-select Object   ;Таблица                
              vlax-3D-point (getpoint))   ;Точка определяющая ячейку
              (vlax-3D-point '(0.0 0.0 1))   ;Вектор поиска (не понял что это такое)
              0   ;Ориентация (не понял что это такое)
              20   ;Ширина прицела (Должна ли она быть больше ширины ячейки или нет?)
              5   ;Высота прицела (Должна ли она быть больше высоты ячейки или нет?)
              :vlax-true 'row 'col
   )

В результате вылетает ошибка: Ошибка Automation. Отсутствует описание.

Re: vla-select для определения ячейки в таблице

Попробуй

;; Begin code here
;; Written by Lee Ambrosius
;; Date: 3/24/04 
;; Checks for tables in current view to match up with HitTest
;; This avoids the need for the user to select the table first.

;; Program is provided AS-IS with no expressed written warranty
;; This example demonstrates a couple of the new Table ActiveX properties
;; HitTest, GetCellType, GetText and SetText

(defun c:selTableCell ( / vector table pick row col cellValueOrg)
  (vl-load-com)
 (setq vHeight (getvar "viewsize"))
 (setq vWidth (* (/ (nth 0 (getvar "screensize")) (nth 1 (getvar "screensize"))) vHeight))

 (setq lwrLeft (list (- (nth 0 (getvar "viewctr")) (/ vWidth 2)) (- (nth 1 (getvar "viewctr")) (/ vHeight 2)) 0))
 (setq uprRight (list (+ (nth 0 (getvar "viewctr")) (/ vWidth 2)) (+ (nth 1 (getvar "viewctr")) (/ vHeight 2)) 0))

 (setq vector (vlax-make-safearray vlax-vbDouble '(0 . 2)))
 (vlax-safearray-fill vector '(1 1 1))
 (setq vector (vlax-make-variant vector))

 (prompt "\nSelect Cell to edit: ")
 (setq pick (vlax-3d-point (getpoint)))

 (if (/= pick nil)
   (progn
     (if (setq SS_TABLES (ssget "C" lwrleft uprright (list (cons 0 "ACAD_TABLE"))))
       (progn
         (setq cnt 0 eMax (sslength SS_TABLES))

         (while (> eMax cnt) 

           (setq table (vlax-ename->vla-object (ssname SS_TABLES cnt)))

           ;; Return values for what cell was picked in
           (setq row 0 col 0)

           ;; Check to see if a valid cell was picked
           (if (= (vla-hittest table pick vector 'row 'col) :vlax-true)
             (progn
               ;; Check to see what the Cell Type is (Text or Block)
               (if (= (vlax-invoke-method table 'GetCellType row col) acTextCell)
                 (progn
                   ;; Let's get the value out
                   (setq cellValueOrg (vlax-invoke-method table 'GetText row col))

                   ;; Change the current value
                   (vlax-invoke-method table 'SetText row col "Revised Text")
                   (vlax-invoke-method table 'Update)
                   (alert "Cell text was changed")

                   ;; Restore the original value
                   (vlax-invoke-method table 'SetText row col cellValueOrg)
                   (vlax-invoke-method table 'Update)
                   (alert "Cell text was changed back to the original value.")
                   (setq cnt eMax)
                  )
                )
              )
            )
            (setq cnt (1+ cnt))
          )
        )
      )
    )
  )
 (princ)
)
;; End Code here

~'J'~

Re: vla-select для определения ячейки в таблице

Спасибо за помощь. Все намного проще решается функцией vla-hittest.

Re: vla-select для определения ячейки в таблице

В книге Полещука ошибка (ну или опечатка). Ориентация как и вектор поиска должна задавться трехмерной точкой. В примере из книги надо вместо 0 писать (vlax-3d-point '(0.0 0.0 1.0)). Работает как часы

Re: vla-select для определения ячейки в таблице

Александр Пекшев пишет:

В книге Полещука ошибка (ну или опечатка).

Александр Пекшев,
Согласен. Добавил в список опечаток.