【问题标题】:What is a valid "letter" for named ranges in Excel?Excel 中命名范围的有效“字母”是什么?
【发布时间】:2017-02-16 21:35:23
【问题描述】:

根据 Excel 文档:Learn about syntax rules for names

有效字符 名称的第一个字符必须是字母, 下划线字符 (_) 或反斜杠 ()。中的剩余字符 名称可以是字母、数字、句点和下划线字符。

但究竟什么是字母?
我认为这仅表示 ASCII 字母,例如:A-Z 和 a-z
但显然我错了,因为还有以下工作(在我的英文 Excel 2013 上):

  • 德语变音符号:Ö,ö,Ü,ü 等
  • 法语口音:é、ê 等

那么如何在 VBA 中检查字符串中的哪些字符是有效的,哪些不是呢?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我运行了一小段代码:

    Sub WhatsInAName()
        Dim i As Long, CH As String, r As Range, msg As String
        Dim K As Long
        Set r = Range("A1")
        On Error Resume Next
        K = 1
    
        For i = 1 To 255
            CH = Chr(i)
            r.Name = CH
            If Err.Number = 0 Then
                Cells(K, 1) = i
                K = K + 1
            Else
                Err.Number = 0
            End If
        Next i
    
        On Error GoTo 0
    
    End Sub
    

    应该记录有效name starters的ascii代码。我得到了这个:

    65 66 68 69 70 71 72 73 74 75 76 77 78 79 80 81 83 84 85 86 87 88 89 90 92 95 97 98 100 101 102 103 104 105 106 107 108 109 110 111 112 113 115 116 117 118 119 120 121 122 131 133 134 135 137 138 140 142 145 146 147 148 150 151 153 154 156 158 159 161 164 167 168 170 173 175 176 177 178 179 180 181 182 183 184 185 186 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

    我不知道为什么缺少 67

    编辑#5:

    这是第一个字符之后之后的有效字符列表:

    32 46 48 49 50 51 52 53 54 55 56 57 63 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 92 95 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 128 131 133 134 135 136 137 138 140 142 145 146 147 148 150 151 152 153 154 156 158 159 161 164 167 168 170 173 175 176 177 178 179 180 181 182 183 184 185 186 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

    感谢马丁·特鲁默。

    【讨论】:

    • 67 丢失,因为“c”对于第一个字符无效(起始字符有更严格的规则)。所以你的测试应该使用下划线作为你的测试名称的第一个字符。
    • @MartinTrummer 你是对的! ..........列表正确地省略了 CR
    • 不错 (+1),但我想知道如果您将 Unicode 纳入其中,是否还有更多可能。
    • 当然——使用 ChrW 和更大的 for 循环范围是要走的路。答案可能取决于运行测试的 Excel 版本。
    【解决方案2】:

    事实证明,这个问题的答案相当复杂。来自用户的answer Gary's Student 已经很接近了,但这里还有更多需要考虑的事情:

    • 单字符名称: 例子:
      • 允许使用“a”
      • “c”是不允许的
    • 开头的字符:
      例子:
      • “cX”是允许的
      • “?X”是不允许的
    • 开始后的字符
      例子:
      • “_?”被允许(“?”、“?_” 不允许)
    • 组合:
      • “R1048576C1”无效
      • “R1048577C1”有效
      • “\xx”有效
      • “\x”无效
    • unicode
    • 工作簿名称与工作表名称:
      例如工作表上允许使用“\a”,但工作簿上不允许使用“\a”

    我制作了一个GitHub project excel-names,其中包括一个 Excel 表格,其中包含有效字符列表(也是 unicode)和一些您可以使用的 VBA 代码。

    此外,该项目包括考虑完整 Excel 名称(不仅仅是单个字符)的函数:阅读the documentation 了解完整详细信息

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 2016-07-09
      • 1970-01-01
      • 2010-12-02
      • 2019-12-05
      • 2017-10-01
      • 2023-03-02
      • 1970-01-01
      • 2012-05-04
      相关资源
      最近更新 更多