AutoCAD二次开发(VBA)

AutoCAD二次开发(VBA)
AutoCAD二次开发(VBA)

第14 章VBA开发在采矿CAD绘图中的应

AutoCAD在不但提供了强大的绘图功能,同时也提供了一个功能强大的集成开以工具——Microsoft Visual Basic for Applications(VBA)。VBA是一个AutoCAD应用集成开发环境,它提供了高质量的用户化编程能力,能够使AutoCAD数据与其它VBA应用程序,VBA 的加入扩展了AutoCAD集成用户化工具的能力,它集成了AutoLISP,Visual LISP和ObjectARX API等工具。这样,就为用户访问AutoCAD软件的多种技术框架提供了新的选择和新的开放机会,可以按用户所需求的工作方式开发应用程序。

VBA开发环境是一个可视化开发环境。使用VBA可以通过拖拽图标的方法,简单而可视化地建立用户界面。可以使用AutoCAD工具栏,也可以使用标准VBA界面工具创建新的工具栏。AutoCAD软件中的ActiveX Automation对象模型十分有用。Autodesk开放了每一个AutoCAD对象模型,这些对象模型显示了每一个对象的方法和属性,并能够依用户的愿望去编程或用户化AutoCAD软件。

学习本章内容最好具有Visual Basic6.0基础(主要是相关控件的使用方法与Basic语言语法结构知识),如没有相关基础知识,可在学习本章之前参考相关书籍或在学习本章内容过程中同步使用相关参考书。通过本章的学习,应了解和掌握以下内容: 了解VBA。

了解AutoCAD对象模型。

掌握绘制AutoCAD图形对象方法。

掌握编辑图形对象方法。

掌握绘制文字方法。

掌握标注方法。

掌握创建块与插入块。

14.1 VBA基础

14.1.1VBA管理器

在当前AutoCAD进程中加载的所有VBA工程都可以用“VBA管理器”对话框来管理。这是一个AutoCAD的管理工具,可以使用它来加载、卸载、保存、新建、嵌入和提取VBA 工程。“VBA管理器”对话框如图14-1所示。

图14-1 “VBA管理器”对话框

可以在AutoCAD的菜单栏中选择菜单【工具】→【宏】→【VBA管理器】来启动“VBA 管理器;也可以在AutoCAD命令提示中输入“vbrun”命令来启动。

14.1.2加载已有的工程

当把工程加载到AutoCAD图形中时,所有的公用子程序也都成为可用的。内嵌在图形中的工程当图形打开时也被加载,而保存在*.dvb文件中的工程则必须另外单独加载。加载已有的VBA工程文件步骤如下:

(1)在“VBA管理器”对话框中单击【加载】按钮,弹出“打开VBA工程”对话框,如图14-2所示。

图14-2 “打开VBA工程”对话框

(2)在“打开VBA工程”对话框中选择想要加载的工程文件。在VBA管理器中只允许要开有效的dvb文件。

也可以在命令提示行输入“vbaload”命令来加载工程文件,该命令同样弹出“打开VBA工程”对话框。一个工程加载后,此工程要引用的其他所有工程也都会被自动加载。另外,AutoCAD再次启动时,会自动加载名称为acad.dvb的工程文件。

每次加载工程时,都会显示启用或者禁用工程内程序代码的选项提示,作为防范病毒的措施,如图14-3所示。如果启用了带病毒的宏,程序中的病毒就会开始运行;

如果禁用了该宏,工程仍然会被调入,但是该工程中的所有程序均不能执行。

图14-3 工程加载提示

14.1.3创建新工程

新工程可以在任何时候创建,这时它是一个独立、完整的工程。用户可以将它保存到工程文件中,也可以将它嵌入到图形中。

建立新的工程步骤如下:

(1)“VBA管理器”对话框;

(2)单击【新建】按钮,建立新工程。

由于篇幅有限卸载工程、嵌入工程、提取工程以及宏的相关知识自行学习。

14.2 VBA IDE开发环境

在AutoCAD中加载了工程,就可以使用VBA交互式开发环境VBA IDE来编辑宏工程的程序代码、窗体和部件引用等元素,也可以在VBA IDE中删除错误、调试和运行工程。

14.2.1打开VBA IDE

可以使用下面的二种方法之一打开VBA IDE开发环境:

(1)在命令提示行中输入“vbaide”命令;

(2)从AutoCAD的【工具】菜单中选择菜单【宏】→“Visual Basic编辑器”;

打开的VBA IDE编辑环境如图14-4所示,在VBA IDE中可以对所有已加载的工程进行编辑。

代码窗口

工程窗口

图14-4 VBA IDE编辑环境

14.2.2工程元素

每个工程都由许多不同的元素构成的。一个工程可以包含的元素有对象、窗体、标准模块、类模块和引用等。

◆对象。对象元素是指VBA工程的程序代码将要存取的对象或者文件,例如,对

AutoCAD VBA工程而言,ThisDrawing对象代表的是当前的AutoCAD图形;

◆窗体。窗体元素是放置其他对象的容器,它常常用于创建工程的自定义对话框;

◆标准模块。标准模块也称为程序代码模块,或者简称模块。程序代码模块中包含程

序代码行和函数等;

◆类模块。类模块元素是指所有包含本身的对象,这些对象被定义为类别;

◆引用。引用元素是指对其他工程或者程序的使用参考。

在VBA IDE编辑环境可以进行添加新元素、导入元素和编辑元素,具体操作方法及步骤请自行学习。

14.3 ActiveX基础

基于AutoCAD的VBA应用程序就是高级程序语言的计算功能与AutoCAD的绘图功能结合,使有VBA程序语句来控制对AutoCAD图形的操作。要很好地使用VBA开发AutoCAD 应用程序,就必须熟悉与要开发的应用程序类型相关的AutoCAD实体和对象集合、它们的属性和操作方法,以及都有哪些资源可以使用。引外还需要了解ActiveX相关语法知识。在本节学习过程中要注意理解ActiveX对象模型。

14.3.1AutoCAD对象模型

对象是AutoCAD ActiveX接口的主要单位,每一个开放的对象均代表一个AutoCAD的明确组件,VBA应用程序就是通过AutoCAD的这些对象来控制AutoCAD图形的。AutoCAD ActiveX接口有以下五种类型的对象:

◆AutoCAD图形实体。例如直线、椭圆、圆弧、文字与标注等;

◆AutoCAD非图形实体。如线型、标注样式、文字样式、表格样式等;

◆AutoCAD结构实体。如图层与图块等实体;

◆AutoCAD视图实体。如视图和视口等;

◆图形和AutoCAD VBA应用程序本身。AutoCAD的对象是分层的,这个分层结构

就是应用程序能够操作的对象模型,其中根对象是Application对象,对对象的操作是依对象模型的分层关系进行逐级操作的,对象分层结构如图14-5所示。

图14-5 对象分层结构

14.3.1.1Application对象

Application对象是AutoCAD ActiveX Automation对象模型的根对象,在Application对象中可以存取任何其他的对象,也可以设置对象的属性和使用方法。此外,Application对象还可以通过Documents集合来访问AutoCAD图形,通过MenuBar和MenuGroups集合来访问AutoCAD菜单和工具条,以及通过VBA的属性来访问VBA IDE。对象的结构如图14-6所示。

图14-6 Application对象

14.3.1.2Document对象

Document对象也就是AutoCAD图形,用户

可以通过它来引用AutoCAD的图形对象和非图

形对象。所有Document对象都属于Documents

集合。用户通过Documents集合可以存取所有图

形对象,例如直线、圆和圆弧等,图形对象的存

取是通过Documents集合下的ModelSpace和

PaperSpace集合来实现的。用户通过Documents

集合也可以存取大部分的非图形对象,例如图

层、线型和文字样式等,这些非图形对象的存取

是通过Documents集合下的Layers、Linetypes

和TextStyles等集合来实现的。Documents集合

的结构如图14-7所示。

14.3.1.3图形对象与非图形对象

图形对象也就是图形实体,是组成AutoCAD

图形的主要元素,它在AutoCAD中是可以看到

的对象,如直线、圆、圆弧文字等。

在VBA应用程序中创建这些图形对象,需

要使用Add方法对象,例如创建一个新的直线对

象,需要使用AddLine方法,创建一个圆弧对象,

需要使用AddArc方法;在VBA应用程序中编

辑这些图形对象,可以使用对象本身的方法和属

性,每一个图形对象都有方法可以让应用程序执

行大部分的AutoCAD编辑命令,例如Move、

Erase和Mirror方法等。

图14-7 Documents集合非图形对象属于AutoCAD图形的一部分,

但是在绘图窗口中是不可见的,例如Layers、Linetypes和SelectionSets对象等。

在VBA应用程序中要创建这些非图形对象,需要使用上一级的Collection对象的Add

方法。另外,每一个非图形对象均有特殊用途的方法和属性,都有可以设置及存取扩展实体

数据和删除自己的方法。

14.3.1.3Preferences、Plot和Utility对象

Preferences集合是AutoCAD对象模型下的一个重要对象集合,它的层结构如图14-8所示。

图14-8 Preferences集合

Plot对象提供对AutoCAD中“页面设置”对话框设置值的存取,应用程序还能够通过该对象以不同的方法来打印图形。

Utility对象提供应用程序中使用的输入函数和转换函数,它在对象模型的层次结构如图14-9所示。

如图14-9 Preference、Plot和Utility对象

14.3.2引用对象

引用对象是开发程序必需的工作。可以直接引用对象,也可以先定义一个变量,然后通过变量来引用对象。如果是直接引用对象,需要把对象引入到方法调用语句中。例如,在模型空间中生成一条直线,需要首先定义直线的起点和终点坐标,然后调用AddLine方法来创建直线对象。

Dim Spoint(0 To 2) As Double

Dim Epoint(0 To 2) As Double

Dim LineObj As AcadLine

Spoint(0) = 0

Spoint(1) = 0

Spoint(2) = 0

Epoint(0) = 100

Epoint(1) = 100

Epoint(2) = 0

Set LineObj = ThisDrawing.ModelSpace.AddLine(Spoint, Epoint)

如果是通过变量来引用对象,需要把变量定义为所需的对象类型,然后将变量设置为适当的对象。它的格式一般为:

Dim Variablename As ObjectType

Set Variablename = Thisdrawing.< Object >

14.3.3存取Application对象

Thisdrawing对象提供了连接Document对象的功能,而根对象(Application对象)在对象模型结构层次中是位于Document对象之上的,因此如何存取根对象就成了一个主要问题。这时需要用Document对象的一个名为Application的属性,可以用该属性引用Application 对象。

14.3.4使用集合对象

集合对象是事先已经定义好的对象,它包含类似于对象的所有引用,也就是对象的所有引用的上一级对象,具有Collection对象的集合如表14-1所示。

表14-1 具有Collection对象的集合

集合名称描述

Documents 当前AutoCAD中打开的全部图形

ModelSpace 模型空间中的全部图形对象

PaperSpace 当前图纸空间布局中的全部图形对象

Block 特殊块内的全部实体

Blocks 图形中的全部块对象

Dictionaries 图形中的全部字典

DimStyles 图形中的全部标注样式

Groups 图形中的全部对象组

Hyperlinks 指定实体的全部超级链接

Layers 图形中的全部图层

Layouts 图形中的全部布局

MenuBar 当前显示在AutoCAD中的全部菜单

MenuGroups 当前已加载的全部菜单和工具栏

RegisteredApplications 图形中全部已注册的应用程序

SelectionSets 图形中的全部选择集

TextStyles 图形中的全部文字样式

UCSs 图形中的全部用户坐标系

Views 图形中的全部视图

Viewports 图形中的全部视口

14.3.4.1存取集合

几乎所有的集合对象都是通过Document对象来存取的。Document对象包含每一个集合对象的属性,用户可以对这些属性进行编辑和使用。例如,在下面的程序中定义了一个变量,然后将变量设置为当前图形的Layers集合,将来对该变量的使用,就是对AutoCAD当前图形所有图层的使用。

Dim LayerCollection As AcadLayers

Set LayerCollection = https://www.360docs.net/doc/d017266280.html,yers

例外的是,Documents、MenuBar、MenuGroups这几个集合对象是经过Application对象来存取的,Application对象同样包含了每一个集合的属性。

14.3.4.2向集合对象中添加新成员

要在集合对象中添加新成员,需要使用Add方法。例如,在下面的程序中创建一个新图层并将它添加到Layers集合中。

Dim NewLayer As AcadLayer

Set NewLayer = https://www.360docs.net/doc/d017266280.html,yers.Add("新图层")

14.3.4.3删除集合对象中成员

要在集合对象中删除成员,需要使用Delete方法。例如,在下面的程序中删除图层集合中的“新图层”。

Dim NewLayer As AcadLayer

Set NewLayer = https://www.360docs.net/doc/d017266280.html,yers.Add("新图层")

NewLayer.Delete

14.4 编写程序

要想能够快速、顺利地编写应用程序,需要自学掌握以下内容:

属性、方法和事件的概念;

掌握引用对象的方法(通过父对象依次引用);

数据类型的概念、创建方法及使用方法;

数组的定义与使用;

If...Then...Else 语句;

For...Next 语句;

Val()函数;

具备了上述基本知识就可以在VBA IDE环境中轻松编写应用程序了,在编写采矿应用程序时,要对图形进行分析,在AutoCAD二次开发过程中,针对固定式图形往往能够取得较好的效果,比如编写“巷道断面”应用程序,编写“采煤工作面布置图”应用程序等。

14.4.1新建图形

新建图形需要用到Documents对象的Add方法。下面的程序使用Add方法,以默认的模板文件建立一个新的图形。

Dim NewObject As AcadDocument

Set NewObject = ThisDrawing.Application.Documents.Add

14.4.2打开图形

要对已有的图形进行操作,必须先打开它。需要使用到Documents对象的Open方法。下面的程序使用Open方法来打开一个已有的图形文件“Mine.dwg”,其中Visual Basic的Dir 函数用来在打开图形之前检查图形文件是否存在,如果不存在则显示警告信息。使用此例子时应该改变图形文件的名称和路径,指定此图形文件在自己系统中存在的实际位置。

Dim FileNameStr As String

FileNameStr = "c:\MyDocument\Mine.dwg"

If Dir(FileNameStr) <> "" Then

ThisDrawing.Application.Documents.Open FileNameStr

Else

MsgBox "文件" & FileNameStr & "不存在"

End If

14.4.2改变AutoCAD窗口的位置和尺寸

在VBA程序中,可以使用Application对象的WindowTop、WindowLeft、Width和Height 属性来定位AutoCAD窗口在屏幕左上角的位置和宽度以及高度。下面的程序将AutoCAD 窗口定位在距屏幕左边和顶边均为10个像素的位置,并将窗口的宽度与高度均设置为500个像素。

ThisDrawing.Application.WindowTop = 10

ThisDrawing.Application.WindowLeft = 10

ThisDrawing.Application.Width = 500

ThisDrawing.Application.Height = 500

14.4.3最大化和最小化AutoCAD窗口

可以通过设置Application对象的WindowState属性来最大化或者最小化AutoCAD窗口。该属性有三个可选值:acMax、acMin、acNorm,分别对应AutoCAD窗口的最大状态、最小状态和正常状态。

ThisDrawing.Application.WindowState = acMax

ThisDrawing.Application.WindowState = acMin

ThisDrawing.Application.WindowState = acNorm

14.4.4计算和信息查询

使用Utility对象所提供的方法,可以快速地解决一些数学计算问题,或者计算出图形上的点。使用Utility对象所提供的方法,可以进行如下工作:

◆AngleFromXAxis方法:找出线与X轴的夹角;

◆AngleToString方法:将字符串表示的角度转换为实数值;

◆DistanceToReal方法:将由字符串表示的距离值转换为单精度的实数值;

◆CreateTypeArray方法:建立包含整数阵列、浮点数阵列、单精度阵列等的Variant;

◆PolarPoint方法:查找出与已知点成指定角度和距离的点;

◆TranslateCoordinates方法:将某点从一个坐标系统转换为另一种坐标系统。

14.4.4.1计算点距离

点距离的计算在应用程序中使用很多,查两条平等直线之间的距离就需要通过点距离计算。

下面的程序使用了GetDistance方法来取得两点之间的距离,然后使用MsgBox函数将计算结果显示出来。

Dim TwoPDist As Double

Me.Hide

TwoPDist = ThisDrawing.Utility.GetDistance(, "指定两个点")

MsgBox "这两个点之间的距离为:" & TwoPDist

14.4.4.2计算定义面积

在应用程序中计算面积,需要使用对象的Area属性,该属性可计算出圆弧、圆、椭圆、椭圆弧、面域、多段线或者封闭的区域的面积。计算出来的面积会随查询对象的类型不同有所不同:

◆封闭的多段线和多边形:对于有宽度的多段线或多边形,面积是以宽度的中心线为

边界来计算的;

◆非封闭对象:假设在非封闭对象的起点和终点间有一直线连接,所组成的封闭区域

的面积即为非封闭的面积;

◆面域:面域的面积等于面域中对象的共有部分的面积。

可以计算一个没有边界的封闭区域的面积,该区域由指定的二维或者三维点来定义,而这些点必须位于同一个平面上。计算由指定点组成的区域面积的步骤如下:(1)使用GetPoint方法取得用户的指定点;

(2)使用用户指定的点来创建无宽度的多段线,通常使用AddLightWeightPolyline方法创建无宽度的多段线;

(3)使用Area属性取得新建立的多段线的面积;

(4)使用Erase方法删除多段线。

下面的程序接受用户输入8个点,然后使用这8个点来创建封闭多段线。再计算面积,将结果显示在信息框中。

Dim P1 As Variant

Dim P2 As Variant

Dim P3 As Variant

Dim P4 As Variant

Dim P5 As Variant

Dim P6 As Variant

Dim P7 As Variant

Dim P8 As Variant

Me.Hide

'提示输入点

P1 = ThisDrawing.Utility.GetPoint(, vbCrLf & "第1点:")

P2 = ThisDrawing.Utility.GetPoint(, vbCrLf & "第2点:")

P3 = ThisDrawing.Utility.GetPoint(, vbCrLf & "第3点:")

P4 = ThisDrawing.Utility.GetPoint(, vbCrLf & "第4点:")

P5 = ThisDrawing.Utility.GetPoint(, vbCrLf & "第5点:")

P6 = ThisDrawing.Utility.GetPoint(, vbCrLf & "第6点:")

P7 = ThisDrawing.Utility.GetPoint(, vbCrLf & "第7点:")

P8 = ThisDrawing.Utility.GetPoint(, vbCrLf & "第8点:")

'根据这些点创建二维多段线

Dim PolyObj As AcadLWPolyline

Dim PLPoint(0 To 15) As Double

PLPoint(0) = P1(0)

PLPoint(1) = P1(1)

PLPoint(2) = P2(0)

PLPoint(3) = P2(1)

PLPoint(4) = P3(0)

PLPoint(5) = P3(1)

PLPoint(6) = P4(0)

PLPoint(7) = P4(1)

PLPoint(8) = P5(0)

PLPoint(9) = P5(1)

PLPoint(10) = P6(0)

PLPoint(11) = P6(1)

PLPoint(12) = P7(0)

PLPoint(13) = P7(1)

PLPoint(14) = P8(0)

PLPoint(15) = P8(1)

Set PolyObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(PLPoint)

PolyObj.Closed = True

ThisDrawing.Application.ZoomAll

MsgBox "这些点定义区域的面积为:" & PolyObj.Area, , "计算定义面积"

14.4.5用户输入

开发的应用程序在运行时,通常要用到用户输入的参数:字符串、点坐标值、长度值等,或者是选项的关键字,例如上述需要用户指定的二维多段线的各点。在获得了输入信息后,再进行下上步工作。取得用户的输入需要用到Utility对象的一些方法和属性。Utility 对象的有关用户输入的方法主要有:

◆GetAngle:取得角度值;

◆GetCornet:取得对角点;

◆GetDistance:取得两点间的距离;

◆GetEntity:取得实体对象;

◆GetInput:取得用户的输入;

◆GetInteger:取得整数;

◆GetKeyword:取得关键词;

◆GetOrientation:取得方向;

◆GetPoint:取得点坐标;

◆GetReal:取得实数;

◆GetRemoteFile:取得远程文件名;

◆GetString:取得字符串;

◆GetSubEntity:取得子对象。

下面就用以GetString方法和GetPoint方法分别编写应用程序。

1.GetString方法

GetString方法提示用户在AutoCAD的命令输入一个字符串。该方法需要两个参数,第一个参数控制输入字符串的空格,如果设置为0,表示不接受空格,一旦出现空格就可以终止输入;如果设置为1,则字符串可以包含空格,需要使用回车键来终止输入;第二个参数是提示字符。

下面的程序显示“请输入你的姓名:”的提示,需要按下回车键来结束输入,输入的字符串允许带有空格,输入的字符串存储在InPutStr变量中,并用信息框显示:Dim InPutStr As String

Me.Hide

InPutStr = ThisDrawing.Utility.GetString(1, vbCrLf & "请输入你的姓名:")

MsgBox "输入的姓名是:" & InPutStr

2.GetPoint方法

GetPoint方法提示用户在AutoCAD的命令提示中输入点坐标。该方法需要用两个参数:起点坐标(可选)和提示字符串。如果有起点,AutoCAD从该点到取得的点绘制一条伸缩线,如果需要控制用户输入格式,则在使用该方法之前调用InitializeUserInptu方法。

下面的程序提示输入两个点,然后使用这两个点作为起点和终点绘直线。

Dim SP As Variant

Dim EP As Variant

Dim Hint1 As String

Dim Hint2 As String

Hint1 = vbCrLf & "输入直线起点:"

Hint2 = vbCrLf & "输入直线终点:"

Me.Hide

'取得第一点,基准点缺省

SP = ThisDrawing.Utility.GetPoint(, Hint1)

'使用上面取得的输入点作为基准点,再取得一点

EP = ThisDrawing.Utility.GetPoint(SP, Hint2)

'使用两点绘制一直线

ThisDrawing.ModelSpace.AddLine SP, EP

ThisDrawing.Application.ZoomAll

14.4.6使用AutoCAD命令行

进行设置AutoCAD环境或者绘图等其他操作,最简单的方法是使用SendCommand方法将命令传送到AutoCAD的命令提示行。

SendCommand方法需要一个参数,该参数即为要传送的命令字符串,该字符串里必须包含有命令所需要的参数,并且按照命令的执行顺序依次排列。其中字符串中的空格相当于ASCII码,表示在键盘上按下了Enter键。与AutoLISP环境不同,在VBA程序中,如果调用SendCommand,但没有参数是无效的。

下面的程序先在点(10,10,0)和点(20,22,0)之间绘制一直线,然后以点(20,22,0)为圆心,绘制一个半径为5的圆,最后以点(20,30,0)为起点,以字高为5,倾斜30°绘制文字。

ThisDrawing.SendCommand "_line 10,10,0 20,22,0 "

ThisDrawing.SendCommand "_circle 20,22,0 5 "

ThisDrawing.SendCommand "_text 20,30,0 5 30 ' 采矿工程'"

使用SendCommand方法需要注意的是,在每个字符串的结尾都有一个空格,这是相当于输入命令以后,按下Enter键,开始执行命令。

14.4.7基本图形绘制

与直接使用AutoCAD一样,在VBA应用程序对图形的操作中,首先是绘制图形对象,只有有了图形对象,才能进行其他的操作,例如编辑、打印等。

在VBA应用程序中,可以绘制和编辑几乎所有的AutoCAD实体对象,从最简单的点和直线到多段线和文字,以及关联的剖面线对象等。可以将实体对象添加到当前的模型空间中,也可以将实体对象创建在图纸空间或者块中。

在直接使用AutoCAD绘图时,用户可以使用几种不同的方法来绘制相同的实体对象,但是,在ActiveX Automation中,绘制一个实体只有一种方法。使用CreateObject或Dim和New关键字绘制实体对象的VB和VBA方法只能用来创建AutoCAD Application对象,所有其他AutoCAD实体对象都必须使用AutoCAD环境中提供的Add或Add方式来绘制。

所有的图形对象都是创建在ModelSpace集合、PaperSpace集合或者Block集合上的对象,这三个集合分别对应AutoCAD的模型空间、图纸空间和块。ModelSpace集合是由对象的ModelSpace属性返回;而PaperSpace集合则是由对象的PaperSpace属性返回。在这些空间上绘制图形,用户可以直接使用这些集合对象,这时需要将实体对象设置到当前激活图层。

14.4.7.1绘制点对象

1.点样式

点的样式以及点的大小是可以设置的。AutoCAD提供了20种点样式,点的大小尺寸可以是相对于屏幕坐标,也可以是相对于绝对坐标。系统变量是PDMODE和PDSIZE用于控制点对象的样式和大小。

2.绘制点对象

Dim PointObj As AcadPoint

Dim pP(0 To 2) As Double

'点的位置

pP(0) = 12

pP(1) = 12

pP(2) = 0

'绘制点

Set PointObj = ThisDrawing.ModelSpace.AddPoint(pP)

'设置系统变量,设置点的样式与大小

ThisDrawing.SetVariable "pdmode", 34

ThisDrawing.SetVariable "pdsize", 4

14.4.7.2绘制直线

直线是AutoCAD中最基本的对象,可以是单段线段,也可以是连续折线段。使用指定

坐标点的方式绘制直线较方便。默认的直线线型是CONTINUOUS,但在实际图形中,许多对象需要使用其他的线型,在编写应用程序时也可以设置线型。

Dim LineObj As AcadLine

Dim SP(0 To 2) As Double

Dim EP(0 To 2) As Double

'起点坐标

SP(0) = 0

SP(1) = 0

SP(2) = 0

'终点坐标

EP(0) = 100

EP(1) = 50

EP(2) = 0

'绘制直线

Set LineObj = ThisDrawing.ModelSpace.AddLine(SP, EP)

可以使用LineObj对象的Linetype属性改变线型,以满足编写应用程序需求。

Dim LTname As String

LTname = "Center"

'加载线型文件“acadiso.lin”

acadDoc.Linetypes.Load LTname, App.Path & "\acadiso.lin"

LineObj.Linetype = "Center"

LineObj.LinetypeScale = 5

LineObj.Update

14.4.7.3绘制圆

绘制圆需要使用AddCircle方法,该方法需要两个参数。第一个参数是设置圆的圆心坐标,第二个参数设置圆的半径。

下面的程序绘制一个圆心坐标为(10,10,0)、半径为100的圆。

Dim CenP(0 To 2) As Double

Dim R As Double

CenP(0) = 10

CenP(1) = 10

CenP(2) = 0

R = 100

Call ThisDrawing.ModelSpace.AddCircle(CenP, R)

14.4.7.4绘制圆弧

绘制圆弧需要使用AddArc方法,该方法需要四个参数。第一个参数为圆心坐标,第二个参数为圆弧半径,第三个参数为圆弧起始角度,第四个参数为圆弧的终止角度。

下面的程序要绘制一个1/4圆,圆心坐标为(100,0,0),圆弧半径为100,起始角度为0°,终止角度为90°。这里需要注意的是,在编写应用程序给定角度时,需要按弧度给变量赋值。

Dim ArcObj As AcadArc

Dim CenP(0 To 2) As Double

Dim R As Double

Dim SAng As Double

Dim EAng As Double

CenP(0) = 100

CenP(1) = 0

CenP(2) = 0

R = 100

SAng = 0

EAng = 3.14159265 / 2

Set ArcObj = ThisDrawing.ModelSpace.AddArc(CenP, R, SAng, EAng)

14.4.7.5绘制椭圆

绘制椭圆需要使用AddEllipse方法,该方法需要三个参数。第一个参数为椭圆中心坐标,第二个参数为主轴上一点,第三个参数为椭圆两轴的半径比例,它是一个小于1的数值。

Dim CenP(0 To 2) As Double

Dim MajAxisP(0 To 2) As Double

Dim Radt As Double

'定义椭圆参数

CenP(0) = 100

CenP(1) = 100

CenP(2) = 0

MajAxisP(0) = 130

MajAxisP(1) = 100

MajAxisP(2) = 0

Radt = 0.6

Call ThisDrawing.ModelSpace.AddEllipse(CenP, MajAxisP, Radt)

请自行运行程序查看程序运行结果。

14.4.7.6绘制多段线

多段线是由多条线段组成的组合对象,这些线段可以是直线段,也可以是圆弧段。在VBA程序中,有两种方法绘制多段线对象:AddPolyline和AddLightWeightPolyline,其中,AddPolyline方法可以绘制二维或三维多段线,它的参数是一个多段线顶点的三维坐标;AddLightWeightPolyline方法只能绘制二维多段线,它的参数是多段线顶点的二维坐标。

下面的程序是应用AddLightWeightPolyline方法,以二维坐标点(10,10)、(20,20)、(30,30)、(40,40)与(50,50)为顶点绘制一条二维多段线,在开发采矿工程专业图形时,通常使用AddLightWeightPolyline方法绘制二维多段线。

Dim LWPLinObj As AcadLWPolyline

Dim Pp(0 To 9) As Double

Pp(0) = 10: Pp(1) = 10

Pp(2) = 20: Pp(3) = 20

Pp(4) = 30: Pp(5) = 30

Pp(6) = 40: Pp(7) = 40

Pp(8) = 50: Pp(9) = 50

Set LWPLinObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(Pp)

14.4.7.7绘制样条曲线

样条曲线在AutoCAD中是绘制在世界坐标系(WCS)中的XY平面上的。这种曲线在绘制煤层底板等高线及在编制煤矿瓦斯地质图中应用广泛。绘制样条曲线需要使用AddSpline方法,该方法需要三个参数。第一个参数为样条曲线顶点的坐标,第二个参数和

第三个参数分别是样条曲线起点和终点的切点坐标。

下面的程序使用三点在模型空间中绘制样条曲线。其中样条曲线的起始相切点为(2,3,0),终点切点为(3,1,0)。

Dim SpLinObj As AcadSpline

Dim STanP(0 To 2) As Double

Dim ETanP(0 To 2) As Double

Dim VetPoints(0 To 8) As Double

STanP(0) = 2

STanP(1) = 3

STanP(2) = 0

ETanP(0) = 3

ETanP(1) = 1

ETanP(2) = 0

VetPoints(0) = 0.6

VetPoints(1) = 0.9

VetPoints(2) = 0

VetPoints(3) = 4.5

VetPoints(4) = 6

VetPoints(5) = 0

VetPoints(6) = 12

VetPoints(7) = 1

VetPoints(8) = 0

Set SpLinObj = ThisDrawing.ModelSpace.AddSpline(VetPoints, STanP, ETanP)

14.4.7.8创建剖面线

剖面线是以某种图案按一定的方式填充图形中的指定区域的对象。在VBA应用程序中创建剖面线的过程通常是这样的:首先创建Hatch对象,然后为其指定外部回路,也就是剖面线最外层边界;最后指定要绘制剖面线的区域。要创建Hatch对象,需要使用AddHatch 方法,该方法需要三个参数,分别设置Hatch对象的图案类型、图案名称和关联性。使用AddHatch方法最重要的是构建一个封闭的边界,例如编写应用程序绘制“喷射混凝土支护巷道断面图”,其中喷射混凝土的图示表示中需要使用Hatch方法,在构建封闭区域时较为麻烦。

1.剖面线的关联性

与直接使用AutoCAD绘制剖面线一样,用户的VBA程序也可以创建关联式或者非关联式的剖面线。关联式剖面线与它们的边界是相互联系的,在边界修改时剖面线也自动更新;而非关联式剖面线与边界是相互独立的。关联性是在剖面线创建时设置的,一旦创建剖面线后,用户可以删除关联性,但是不能再创建关联性。

要创建关联式剖面线,需要在使用AddHatch方法时,将它的第三个参数(Associativity)设置为TRUE,如果要创建非关联式剖面线,则需要将第三个参数设置为FLASE。

2.剖面线图案类型

用图案填充区域可以使用AutoCAD提供的实体填充和标准的预定义的剖面线图案,也可以使用定制的图案。在使用AddHatch方法时,第一个参数即是指定剖面线图案的类型。该参数有三个常数可选:

◆AcHatchPatternTypePredefined:使用AutoCAD提供的定义在acad.pat文件中的图案;

◆AchatchPatternTypeUserDefined:使用当前线型定义的剖面线的图案;

AcHatchPatternTypeCustomDefined:使用用户定义的PA T文件中的图案。

3.剖面线图案名称

在使用AutoCAD方法时,第二个参数即是指定剖面线图案的名称。该名称在所选的图案类型中必须是有效的名称。

14.4.7.9定义剖面线边界

在创建了Hatch对象后,就可以添加剖面线的边界。剖面线的边界可以是直线、弧、圆、二维多段线等,以及多个对象的组合。

第一个添加的边界必须是最外侧边界,它定义了剖面线的最外面范围。要加入最外侧边界,需要使用剖面线对象的AppendOuterLoop方法。在定义最外侧边界线后,可以继续加入内部世界,这时需要使用剖面线对象的AppendInnerLoop方法。

AppendOuterLoop方法和AppendInnerLoop方法均需要一个参数,该参数是构成回路的图形对象数据矩阵。内部边界定义的是剖面线内孤立的对象,称为孤岛。Hatch对象如何处理这些岛是根据剖面线对象的HatchStyle属性的设置值而定。HatchStyle属性可以设置的值及描述如表14-2所示。

表14-2 剖面线样式

HatchStyle 描述

Normal 指定标准样式或正常。此样式由最外面区域边界向内创建剖面线。如果AutoCAD碰到内部边界,会关闭剖面线,直到碰到另一个边界。

Outer 填满最外面区域。此样式也是从区域最外边界向内创建剖面线,但是一旦遇到内部边界即关闭剖面线,不再向里填充。

Ignore 忽略内部边界。此样式使剖面线通过所有的内部对象。

当完成定义剖面线后,必须要先计算后才能显示,这需要执行Evaluate方法。下面的应用程序是在模型空间中绘制关联的剖面线。

Dim HatchObj As AcadHatch

Dim PatternName As String

Dim PatternType As Long

Dim PolyObj2(0 To 0) As AcadEntity

Dim VetPoint2(0 To 14) As Double

'定义多段线顶点的图案名称

VetPoint2(0) = 50

VetPoint2(1) = 50

VetPoint2(2) = 0

VetPoint2(3) = 80

VetPoint2(4) = 50

VetPoint2(5) = 0

VetPoint2(6) = 80

VetPoint2(7) = 60

VetPoint2(8) = 0

VetPoint2(9) = 50

VetPoint2(10) = 60

VetPoint2(11) = 0

VetPoint2(12) = 50

VetPoint2(13) = 50

VetPoint2(14) = 0

PatternName = "solid"

PatternType = 0

'创建多段线

Set PolyObj2(0) = ThisDrawing.ModelSpace.AddPolyline(VetPoint2)

'创建剖面线对象

Set HatchObj = ThisDrawing.ModelSpace.AddHatch(PatternType, PatternName, True)

'给剖面线对象赋边界

HatchObj.AppendOuterLoop (PolyObj2)

HatchObj.Evaluate

14.4.8编辑图形对象

14.4.8.1偏移对象

如果要偏移对象,需要使用Offset方法。对象的Offset方法需要一个重要的参数(距离值)。如果距离值为正值,则向外偏移绘制一个较大的曲线,即新对象的曲率半径比原对象的大;如果距离是负值,那么AutoCAD会以原对象偏移绘制出一个“较小”的曲线,也就是新对象曲率半径更小;如果距离值无效,则会返回一个错误。

下面的程序先创建一条多段线和一个圆,然后偏移这两个对象。

Dim CircleObj As AcadCircle

Dim CenP(0 To 2) As Double

Dim R As Double

Dim PLineObj As AcadLWPolyline

Dim PLPoints(0 To 11) As Double

CenP(0) = 30: CenP(1) = 30

R = 10

PLPoints(0) = 30: PLPoints(1) = 30

PLPoints(2) = 31: PLPoints(3) = 41

PLPoints(4) = 22: PLPoints(5) = 22

PLPoints(6) = 35: PLPoints(7) = 32

PLPoints(8) = 37: PLPoints(9) = 39

PLPoints(10) = 33: PLPoints(11) = 32

Set CircleObj = ThisDrawing.ModelSpace.AddCircle(CenP, R)

Set PLineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(PLPoints)

PLineObj.Closed = True

'偏移多段线和圆

Dim OffsetCircle As V ariant

Dim OffsetPline As Variant

OffsetCircle = CircleObj.Offset(2.5)

OffsetPline = PLineObj.Offset(1)

14.4.8.2镜像对象

镜像对象需要使用Mirror方法。与AutoCAD中的镜像不同,这个方法会保留原来的对象。如果要删除原来的对象,需要另外使用Erase方法。

Mirror方法需要两个坐标参数。这两个坐标值定义镜像线的端点,对称于此镜像线绘制

出对象的副本。在下面的程序中先创建一条多段线,然后镜像该多段线。

Dim PlineObj As AcadLWPolyline

Dim PLPoint(0 To 7) As Double

PLPoint(0) = 0: PLPoint(1) = 0

PLPoint(2) = 1000: PLPoint(3) = 0

PLPoint(4) = 1000: PLPoint(5) = 1000

PLPoint(6) = 0: PLPoint(7) = 1000

Set PlineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(PLPoint)

PlineObj.Closed = True

PlineObj.Update

Dim MirrP1(0 To 2) As Double

Dim MirrP2(0 To 2) As Double

MirrP1(0) = 0

MirrP1(1) = -50

MirrP1(2) = 0

MirrP2(0) = 10

MirrP2(1) = -50

MirrP2(2) = 0

PlineObj.Mirror MirrP1, MirrP2

14.4.8.3阵列对象

1.环形阵列

所有的图形都可以进行环形阵列,如果要创建环形阵列,需要使用该对象提供的ArrayPolar方法,该方法需要三个参数。环形阵列创建的对象数目、阵列角度和阵列的中心点坐标。其中对象的数目必须是大于1的正整数;阵列角度为非0的数值,单位是弧度,正值为逆时针阵列,负值则为顺时针阵列,如果角度等于0,则会产生错误;中心点是包含三个单精度数的Variant数据阵列,这些单精度代表指定环形阵列中心点的三维WCS坐标值。

AutoCAD自动计算阵列中心点到原来对象上的参考点的距离。VBA的环形阵列方法ArrayPolar与AutoCAD的Array命令的区别在于它不支持阵列操作时旋转对象。

下面的程序先创建一个椭圆,然后对椭圆进行环形阵列,共创建10个椭圆,其中环形阵列的基点为(300,40,0),阵列角度为270°。

Dim ElliseObj As AcadEllipse

Dim EllCenP(0 To 2) As Double

Dim EllMajAxisP(0 To 2) As Double

Dim EllAxisScale As Double

Dim RotateP(0 To 2) As Double

Dim ArrayNumber As Integer

Dim ArrayAngle As Double

Dim ArrayResult As V ariant

EllCenP(0) = 20

EllCenP(1) = 40

EllCenP(2) = 0

EllMajAxisP(0) = 25

EllMajAxisP(1) = 40

EllMajAxisP(2) = 0

如何维护老客户与开拓新增客户

如何维护老客户与开拓新增客户 导读: 准客户开发只有两种途径,一是自己开发,一是客户帮你开发,所以请你每天去回访你的客户。 “建立影响力中心,充分运用转介绍,促使你的寿险事业如日中天。因为: 第一,推荐你的同事或街坊拥有保险保障,你们单位你们小区就能成为保险公司的"大户"; 第二,帮助你的亲朋好友拥有保险的利益,其实就是帮助你自己,因为他们的问题同样会成为你的困扰。如果他不向保险公司投保,就等于向你投保,而且完全免费!请问你愿意这种情况发生吗?” 保险服务包括售前服务、售中服务和售后服务,也就是说,客户服务工作贯穿我们从事保险工作的始终。如何才能做到、做好客户服务工作?我们必须首先从心态和行为上做——保险生活化,生活保险化。 显然,售后服务是维护老客户的必备方式和有效手段,维护好老客户其实正是增添新客户的高效前提!售后服务的另一种说法叫做“客户回访”,准客户开发只有两种途径,一是自己开发,一是客户帮你开发,所以请你每天去回访你的客户。

一个成功的代理人每天都会拨出专门的时间去拜访他的客户,让客户帮助自己开发准客户,所以他会越做越轻松,越做越有成就感。一个失败的代理人每天都会拨出全部的时间去拜访他的准客户,只能依赖自己开发准客户,所以他会越做越辛苦,越做越有挫折感。 做好客户回访的关键其实并非在如何回访?因为人的不同,方式方法亦不一而同,关键在于“去”回访,在于行动,在于走出去,走进客户。保险营销员在其职业生涯当中,常常会出现三大致命伤,首先是”懒”,这其实就是失败的开始;其次是“傲”,这是保险业务员职业生涯中的第一大病,其实,每个代理人,在发展的过程中,要学会谦逊,在获得成绩时,掌声愈大、腰要愈软;三是“伪”,这是人际关系的致命伤。 作为一个成功的寿险营销员,要做到“人生三勤”。即勤能补拙、勤能补运、勤能补情。 勤能补拙。笨鸟先飞,成事靠准备,不是靠智慧。勤能补运(时)。客户被拜访99次,第100次被你访到,幸运成交。勤能补情。多与顾客接触,能增近感情。 加强客户回访,要成为我们日常工作的好习惯。成功的人都有好习惯,好习惯是勉强来的,勉强成习惯,习惯成自然。因此,加强客户回访,不断给客户以保险的观念与理财分析,你的诚心,必将能打动客户。我们要让客户明白,买保险不仅要买单一的保险产品,更要买组合型的产品,买全方位的保障。我们要让客户明白,不仅自己要买保险,自己身边的关系人也必须要购买保险。保险应当成为人们生活当中的必须品,人人都该拥有足够的保险保障,从而获得自立、自尊的尊贵生活。保险从业人员应充分运用保险的这一独特功用,为更多的客户提供保险保障服务,从而使我们自己的寿险从业生涯走向良性循环。

客户的维护与开发

读《怎样做好客户保持》后感 -------胡玉彬 客户是一个公司的根本,也是企业赖以发展的源泉,一个企业的持续发展,除了正常的管理,经营;客户的开发和维护显然是重中之重。 开发一个客户和维护一个客户,大家都知道,从经济学角度来讲,很明显,维护客户能够大大的节约成本,正如文中所讲“开发一个新客户所需要花费的成本是维护一个老客户的5-10倍,客户保持比吸引新客户更能够降低成本”。 我们只需要花开发新客户1/3的精力,1/5的成本,不仅能维护好客户,还能在现有客户的基础上越做越大,因为,客户也要发展。一个一点不图发展的客户,不是一个好客户。我们要在有限的资源和精力情况下,最大效益的保持最有价值的客户。 根据已经成交的客户使用情况,整理归纳,有一个清晰明了的客户信息数据库,知道哪些是现有最大客户利益化,哪些是最有潜力,哪些是长期维护的客户,根据不同客户的情况,有自己的一套维护体系,有限的资源,有效的时间,效果最好。 中国的社会,归根到底,是人情的社会,所以要重视与客户情感的建立,正如文中所言“把客户感情的维护与企业提供的产品和服务紧密的联系在一起”,这样才能大大提高客户对公司,对产品的认可度和依赖度。 客户的维护,没有客户开发那样有难度,有刺激,和成就感,相

比而言,维护客户相对比较平淡和持久。这就更要求我们自己要注意细节,注意自己内心对客户的理解和尊敬,客户是自己的衣食父母,只有在日久的维护中,始终能保持一颗关心,帮助客户的心态,才能真正让客户感觉到,我们是在和他们共成长,才会有牢靠的客情关系。 用真心和耐心去维护客户,用信心和激情去开发客户,在维护中学习,从开发中反思,做出属于自己的品牌营销!

客户二次开发技巧

学习导航 通过学习本课程,你将能够: ●学会让顾客记住并信任自己; ●了解顾客二次开发的步骤; ●掌握顾客二次开发的方法。 客户二次开发技巧 一、如何让顾客记住并信任你 客户二次开发最基本的前提是信任,只有当顾客信任并记住自己时,顾客才有可能继续进行交流、接触。 导购要想使顾客记住自己及自己店面的产品,并得到顾客的信任,需要做好以下方面的工作: 第一,建立完备的客户档案,这是工作人员向顾客进行回访、举办惊喜活动和提供优惠产品的依据; 第二,要保证送货及时、安装优质; 第三,要及时、有效地对顾客进行事后电话反馈; 第四,需要定时做回访,回访过程中的活动与奖品可以有效地使顾客记住并信任自己; 第五,在顾客较多的情况下,工作人员可以利用短信平台,给顾客适时地送去祝福和问候,需要注意的是,短信的发送频率不要太高,以免给顾客带来不便; 第六,偶尔进行电话回访,询问顾客对本店产品的满意度与近期需求,此外,这种回访还可以利用短信系统的群发功能,虽然费用较高,但却有利于产品的二次介绍与店面的口碑宣传,可以为公司带来极大的效益。 二、二次开发的方法 家居建材是一种耐用消费品,顾客对于同一类产品的重复购买率较低。 因此,对于家居建材行业而言,在顾客二次开发过程中需要运用一定的方式: 1.给出顾客整体性建议 顾客购买产品时,工作人员可以根据其所购买的产品以及自己的专业知识取得顾客的信任,然后以专业人员或朋友的身份向其介绍周边的其他配套产品,并提出整体性建议。 提出建议时,导购一定要得到顾客的信任,使他相信自己不是让他向外掏钱,否则会引起顾客的反感。一般来说,可以在向顾客进行一次比较完整的服务后,适时提出建议。 【案例】 驯兽员的故事

客户关系管理与深度拓展

客户关系管理与深度拓展

客户关系管理与深度拓展课后测试 测试成绩:100.0分。恭喜您顺利通过考试! 单选题 1. 拜访客户最主要的目的是()√ A 市场维护 B 销售产品 C 信息收集 D 指导客户 正确答案: B 多选题 2. 以下关于电话邀约的描述正确的是()√ A 不提前给别人下定义 B 不提敏感性话题 C 四不说 D 保持高姿态,不求人、不逼人 正确答案: A B C D 3. 拜访客户的目的主要有()√ A 销售产品 B 市场维护 C 信息收集 D 指导客户 正确答案: A B C D 4. 银行制定产品营销计划,开展主题活动的目的是()√ A 促进业绩提升

B 维护客户关系 C 营销客户欲望 D 加深客户之间的交流 正确答案: A B C 5. 银行经常会开展主题活动,主题一般可以从哪些方面进行选择?()√ A 客户 B 产品 C 时间 D 地点 正确答案: A B C 6. 客户群体的筛选方式主要有()√ A 按任务指标 B 按区域划分 C 按产业特点 D 按客户的体量 E 按客户经理习惯 正确答案: A B C D E 7. 电话邀约的目的主要有()√ A 见面 B 销售产品 C 情感维护 D 信息收集 正确答案: A C 8. 客户经理要学会运用客户关系平台,借力营销,这里的力指的是()√ A 领导之力

B 同事之力 C 客户之力 D 环境之力 正确答案: A B C 判断题 9. 客户经理进行营销的目的是为了卖银行的产品,因此,将银行产品卖出去之后,整个营销过程就结束了。√ 正确 错误 正确答案:错误 10. 对于银行来说,希望客户购买理财产品的期限越长越好。√ 正确 错误 正确答案:错误 测试成绩:80.0分。恭喜您顺利通过考试! 单选题 1. 拜访客户最主要的目的是()√A 市场维护 B 销售产品 C 信息收集 D 指导客户正确答案:B 2. 我们可以将主题活动分为三部分,事前、事中和事后,一般来说,事前的准备工作所占的比重为()× A 0.1 B 0.2 C 0.7 D 0.8 正确答案: C 多选题 3. 我们在维护客户的时候,月初主要拜访哪种类型的客户?()√ A 高端客户

客户的开发与维护

大客户的开发与维护第一章针对大客户的销售流程 一.现代大客户采购流程分析 1.“谢绝推销”的启示 市场经济,客户自我意识强了,买方市场 2.客户关心的是什么 能否提高生产力 能否提高办公效率 技术是否先进 花费是否物超所值 产品是否可靠(产品,个人及公司) 例子:ERP项目在中国为什么不广泛 小组讨论:1)在你的工作中是否经常碰到“谢绝推销”?2)你认为“谢绝推销”的根源是什么? 3)你认为都有哪些解决方法或途径? 3.研究客户购买流程 无意识阶段 选择阶段 购买阶段 受用阶段 二.客户满意式销售流程 案例分析:美国戴尔计算机公司的成功 1.建立客户满意式销售流程的思路 以客户的流程考虑问题 合作关系,双赢结果,同舟共济 客户为专业的客户,专业人士之间的对话 2.客户满意式销售流程分析 了解或挖掘需求阶段 推荐产品阶段 完成购买阶段 售后服务阶段 第二章针对大客户的销售模式 一.调查结论:大客户销售人员的成绩是天份吗? 1.成功销售人员的特点 诚信 专业(形象及知识) 善于聆听 了解客户 2.成功销售人员的突出技能:四个善于 善于提问 善于聆听 善于回答 善于解决问题

案例分析:为什么老金总能攻破大客户,小王却不行? 小组讨论:老金的法宝真是这样吗?老金是真心爱顾客吗? 3.性情论批判 结论:销售能力重在培养 二.影响大客户销售业绩的六大因素分析 1.产品 2.质量 3.价格 4 .职业态度 仪表与装束 礼貌与规矩 克服不良习惯 成功的渴望 强烈自信 锲而不舍的精神 案例分析:一位房地产销售员损失佣金1500美元 现场提问:这个销售员的教训说明了什么? 5.相关知识 1).自信来源于知识 2).产品知识 应当掌握哪些技术和生产知识 案例分析:小李为什么会输得这样惨? 小组讨论或提问:结合本公司情况发表感想 3).市场学知识-购物心理 有买才有卖 现代客户的两种需求:隐藏需求和明显需求 启示:客户以明显需求来购物,开发客户,使之转化成名显需求4).营销知识:营销理论,销售技巧等6.沟通技巧 通用沟通技巧 SPIN提问式的沟通 三. 建立高绩效的大客户销售模型 1.硬态三角形分析 产品,质量,价格 2.软态三角形分析 职业态度,相关知识,沟通技巧 3.高绩效销售公式 第三章针对大客户的SPIN顾问式销售方略 一. 传统销售线索和现代销售线索 1.传统销售线索: 了解需求—推荐产品—购买 2.现代销售线索: 客户还没想买—引导需求,SPIN提问 二.什么是SPIN提问方式 1.Situation question 询问客户现状的问题

相关文档
最新文档