ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 246|回复: 4

如何制作带箭头的站牌

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-2 21:48 | 显示全部楼层 |阅读模式
image.png


数据源

   StationArr = Array("陈官营", "深安大桥南", "兰州城市学院", "兰州海关", "马滩", "土门墩", "兰州西站北广场", "西站什字", "七里河", "小西湖", "文化宫", "西关", "省政府", "东方红广场", "兰州大学", "五里铺", "省气象局", "携星墩", "焦家湾", "东岗")
   DistArr = Array(0, 1579, 2340, 955, 2073, 2007, 907, 1614, 1060, 1376, 890, 1066, 969, 1456, 1426, 1293, 1303, 1163, 1116, 933)


  1. Sub dffdsaf()
  2.    'Arr = BetweenStation("兰州城市学院", "文化宫")
  3.    Arr = BetweenStation("兰州大学", "兰州城市学院")
  4.    ''
  5.   Dim Sht As Worksheet, Rng As Range
  6.       Set Sht = Application.ActiveSheet
  7.       With Sheet4
  8.           .Cells.Clear
  9.           .Cells.Font.Size = 9
  10.           Set Rng = .Cells(5, 2)
  11.       End With
  12.       With Application.WorksheetFunction
  13.           Rng.Resize(3, UBound(Arr)) = .Transpose(Arr)
  14.       End With
  15. End Sub

  16. Function BetweenStation(StationA, StationB)
  17.      StationArr = Array("陈官营", "奥体中心", "兰州城市学院", "兰州海关", "马滩", "土门墩", "兰州西站北广场", "西站什字", "七里河", "小西湖", "文化宫", "西关", "省政府", "东方红广场", "兰州大学", "五里铺", "省气象局", "携星墩", "焦家湾", "东岗")
  18.    ''
  19.    DistArr = Array(0, 1579, 2340, 955, 2073, 2007, 907, 1614, 1060, 1376, 890, 1066, 969, 1456, 1426, 1293, 1303, 1163, 1116, 933)
  20.    Dim Rr As Integer, Kk
  21.    Dim Arr()
  22.    'Dim StationA, StationB
  23.      Dim Kk1, Kk2
  24.      Dim Dist As Integer
  25.      For ii = 0 To UBound(StationArr)
  26.            If StationA = StationArr(ii) Then
  27.                 Kk1 = ii
  28.            End If
  29.            ''
  30.            If StationB = StationArr(ii) Then
  31.                 Kk2 = ii
  32.            End If
  33.      Next ii
  34.      ''
  35.      If Kk1 < Kk2 Then
  36.         ReDim Arr(Kk2 - Kk2 - 1, 2)
  37.         For ii = Kk1 To Kk2
  38.               Debug.Print StationArr(ii)
  39.               
  40.         Next ii
  41.      ElseIf Kk1 > Kk2 Then
  42.         ReDim Arr(Kk1 - Kk2 - 0, 2)
  43.         
  44.         For ii = Kk1 To Kk2 Step -1
  45.               Arr(Kk1 - ii, 0) = StationArr(ii)
  46.               ''
  47.               If ii = Kk1 Then
  48.                   Dist = 0
  49.               Else
  50.                   Dist = Dist + DistArr(ii)
  51.               End If
  52.               ''
  53.               Arr(Kk1 - ii, 1) = Dist
  54.               Arr(Kk1 - ii, 2) = retuDist(Dist)
  55.               
  56.         Next ii
  57.      End If
  58.      BetweenStation = Arr
  59.      
  60. End Function

  61. Function retuDist(Dist As Integer)

  62.                  Select Case Dist
  63.                       Case Is = 0
  64.                            retuDist = "-"
  65.                       Case Is <= 4000
  66.                            retuDist = 2
  67.                       Case Is <= 8000
  68.                            retuDist = 3
  69.                       Case Is <= 12000
  70.                            retuDist = 4
  71.                       Case Is <= 18000
  72.                            retuDist = 5
  73.                       Case Is <= 24000
  74.                            retuDist = 6
  75.                       Case Is <= 32000
  76.                            retuDist = 7
  77.                       Case Is <= 40000
  78.                            retuDist = 8
  79.                       Case Else
  80.                  End Select
  81. End Function
复制代码




结果
image.png


TA的精华主题

TA的得分主题

发表于 2024-9-3 08:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-3 22:23 来自手机 | 显示全部楼层
本帖最后由 ning84 于 2024-9-3 22:25 编辑
wengjl 发表于 2024-9-3 08:43


谢谢回复,进一步学习chrw和chr函数

在VBA中,ChrW 函数与 Chr 函数类似,但它返回的是Unicode字符。对于箭头等特殊字符,它们在Unicode字符集中有对应的编码。以下是一些箭头符号及其对应的 ChrW 函数代码:
1.左箭头(Left Arrow) - ChrW(8592)
2.右箭头(Right Arrow) - ChrW(8594)
3.下箭头(Down Arrow) - ChrW(8595)
4.上箭头(Up Arrow) - ChrW(8593)
你可以使用这些代码来在VBA中插入相应的箭头符号。例如:
Dim myString As String
myString = "←" & " " & "→" ' 使用 ChrW(8592) 和 ChrW(8594)
或者直接使用Unicode字符:
Dim myString As String
myString = ChrW(8592) & " " & ChrW(8594) ' 左箭头和右箭头
请注意,直接使用Unicode字符(如 "←" 和 "→")可能在某些环境中更直观和方便。


在VBA(Visual Basic for Applications)中,Chr 函数用于返回对应于指定字符代码的字符。这个函数非常有用,尤其是当你需要在代码中插入特殊字符时。
以下是一些常见的特殊字符及其对应的 Chr 函数代码:
1.回车(Carriage Return, CR) - Chr(13)
2.换行(Line Feed, LF) - Chr(10)
3.回车换行(Carriage Return + Line Feed, CRLF) - Chr(13) & Chr(10)
4.水平制表符(Horizontal Tab, HT) - Chr(9)
5.垂直制表符(Vertical Tab, VT) - Chr(11)
6.退格(Backspace, BS) - Chr(8)
7.空字符(Null Character) - Chr(0)
8.响铃(Bell, BEL) - Chr(7)
9.双引号(Double Quote) - Chr(34)
10.单引号(Apostrophe) - Chr(39)
使用这些特殊字符时,你可以将它们插入到字符串中,例如:
Dim myString As String
myString = "Hello" & Chr(13) & "World" ' 会在“Hello”和“World”之间插入一个回车符
请注意,不同的操作系统和应用程序可能对这些特殊字符的处理方式有所不同。例如,Windows 系统中通常使用 Chr(13) & Chr(10) 来表示新的一行,而在 Unix/Linux 系统中,通常只需要 Chr(10)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-4 10:00 来自手机 | 显示全部楼层
learn  carry out   Sentence

在Excel VBA中,Callout是一种特殊的形状,用于在图表或其他形状上添加注释或标签。Callout可以指向图表中的特定数据点、趋势线或其他元素,并提供有关这些元素的详细信息。以下是一些关于如何在Excel VBA中使用Callout的基本步骤:

1. 打开Excel,然后按Alt + F11键打开VBA编辑器。

2. 单击“插入”>“模块”,在新模块中粘贴以下代码:

```vba
Sub AddCallout()
    Dim ws As Worksheet
    Dim cht As Chart
    Dim myCallout As Shape
   
    ' 设置工作表和图表名称
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set cht = ws.ChartObjects("Chart 1").Chart
   
    ' 添加Callout标注线
    Set myCallout = cht.Shapes.AddCallout(Left:=100, Top:=100, Width:=100, Height:=50, Type:=msoCalloutStyleRectangular)
   
    ' 设置Callout标注线的文本
    myCall.out.TextFrame.Characters.Text = "这是一个Callout标注线"
   
    ' 设置Callout标注线的字体和颜色
    With myCallout.TextFrame.Characters.Font
        .Name = "Arial"
        .Size = 12
        .Color = RGB(255, 0, 0)
    End With
End Sub
```

3. 修改代码中的工作表名称、图表名称和其他参数,以匹配您的实际需求。

4. 按F5键运行宏,这将在指定的图表上添加一个Callout标注线。

注意:此示例使用了`msoCalloutStyleRectangular`样式。您可以根据需要更改Callout样式,例如使用`msoCalloutStyleOval`(椭圆形)或`msoCalloutStyleCorner`(圆角矩形)。此外,您还可以调整Callout的位置、大小和其他属性以满足您的需求。

在实际应用中,您可能需要根据数据点的位置动态计算Callout的位置。这可以通过获取数据点的坐标并将其用作Callout的左上角位置来实现。此外,您还可以通过编程方式设置Callout的文本、字体、颜色等属性。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-4 11:56 来自手机 | 显示全部楼层
在 VBA 中,Callout.Line.Style 属性用于设置或返回 callout 线条的样式。这个属性是 Shape 对象的 Callout 属性的一部分,它允许你自定义 callout 线条的外观。
以下是一些可用的 msoLine 常量,你可以用它们来设置 Callout.Line.Style 属性:
msoLineSingle:单线样式(默认)。
msoLineThinThin:两条细线,中间有间隔。
msoLineThickThin:一条粗线,两边各有一条细线。
msoLineThinThick:两条细线,中间有一条粗线。
msoLineDash:虚线。
msoLineDashHeavy:粗虚线。
msoLineDotDash:点划线。
msoLineDashDotDot:点划点划线。
msoLineDashDotHeavy:点划粗线。
msoLineLongDash:长虚线。
msoLineLongDashHeavy:粗长虚线。
msoLineDouble:双线。
msoLineSolid:实线(与 msoLineSingle 相同)。
以下是如何在 VBA 中设置 callout 线条样式的示例:
Sub SetCalloutLineStyle()
    Dim shp As Shape
    ' 在工作表中添加一个 callout
    Set shp = ActiveSheet.Shapes.AddCallout(Type:=msoCalloutOneBorder, Left:=100, Top:=100, Width:=200, Height:=50)
   
    ' 设置 callout 的文本
    shp.TextFrame.TextRange.Text = "这是一个 callout 注释"
   
    ' 设置 callout 线条的样式为虚线
    shp.Callout.Line.Style = msoLineDash
   
    ' 还可以设置线条的颜色、粗细等属性
    shp.Callout.Line.ForeColor.RGB = RGB(255, 0, 0) ' 红色线条
    shp.Callout.Line.Weight = 2 ' 线条粗细
End Sub
在这个例子中,我们首先添加了一个 callout,然后设置了它的文本。接着,我们使用 msoLineDash 常量来将 callout 线条的样式设置为虚线。此外,我们还设置了线条的颜色为红色,并将线条粗细设置为 2磅。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 19:27 , Processed in 0.036652 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表