Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用vba修剪值时类型不匹配(错误13)_Excel_Vba_Trim_Type Mismatch - Fatal编程技术网

Excel 使用vba修剪值时类型不匹配(错误13)

Excel 使用vba修剪值时类型不匹配(错误13),excel,vba,trim,type-mismatch,Excel,Vba,Trim,Type Mismatch,我有一份来自另一家公司的数据报告。我需要使用的一个字段在每行中有大约30个额外的尾随空格(我不知道为什么)。我只需要处理一些列,所以我所做的就是一次一列地从列中选取数据,然后按照适合我分析的顺序将其放入新的工作表中。我不使用复制粘贴,我使用工作表(“A”).range(“…”).value=工作表(“B”).range(“…”).value。 这可以抓取我想要的列并按我想要的顺序放置它们。重组后,我尝试了以下方法来修剪列中的单元格: Worksheets("B").R

我有一份来自另一家公司的数据报告。我需要使用的一个字段在每行中有大约30个额外的尾随空格(我不知道为什么)。我只需要处理一些列,所以我所做的就是一次一列地从列中选取数据,然后按照适合我分析的顺序将其放入新的工作表中。我不使用复制粘贴,我使用
工作表(“A”).range(“…”).value=工作表(“B”).range(“…”).value
。 这可以抓取我想要的列并按我想要的顺序放置它们。重组后,我尝试了以下方法来修剪列中的单元格:

    Worksheets("B").Range("F2:F" & rw).Value = Trim(Worksheets("B").Range("F2:F" & rw).Value)
我曾尝试根据谷歌搜索调整这一行,但每次我在这里得到一个类型不匹配(错误13)。rw是我为数据所在的行数设置的变量。我做错了什么

编辑

我添加了一个循环:

myArr = Worksheets("B").Range("F2:F" & rw).Value
For i = LBound(myArr) To UBound(myArr)
    myArr(i, 1) = Trim(myArr(i, 1))
Next i
Worksheets("B").Range("F2:F" & rw).Value = myArr

它现在正符合我的要求。

导致类型不匹配(错误13)的原因是Trim()仅适用于字符串,但您正在尝试修剪数组

解决方案:

  • 如果要将字符串分配给单个单元格,则:

    a。连接所需的字符串变量,然后

    b。修剪()字符串,并将其分配给单元格

  • 否则,如果要将字符串集合从一个范围复制到另一个范围,则

    a。按照BigBen的建议做,并使用循环

  • 修剪
    • 您必须循环:
    选项显式
    子测试范围()
    常量FirstCellAddress为String=“F2”
    将ws设置为工作表
    设置ws=ThisWorkbook.Worksheets(“B”)
    将最后一个单元格设置为范围
    设置LastCell=ws.Cells(ws.Rows.Count_
    ws.Range(FirstCellAddress).Column.End(xlUp)
    变暗rng As范围
    设置rng=ws.Range(FirstCellAddress,LastCell)
    暗淡的cel As范围
    对于rng.单元格中的每个单元格
    单元值=修剪(单元值)
    下一个细胞
    端接头
    次测试()
    常量FirstCellAddress为String=“F2”
    将ws设置为工作表
    设置ws=ThisWorkbook.Worksheets(“B”)
    将最后一个单元格设置为范围
    设置LastCell=ws.Cells(ws.Rows.Count_
    ws.Range(FirstCellAddress).Column.End(xlUp)
    变暗rng As范围
    设置rng=ws.Range(FirstCellAddress,LastCell)
    作为变量的Dim数据
    数据=平均值
    我想我会坚持多久
    对于i=1到uBond(数据,1)
    数据(i,1)=微调(数据(i,1))
    接下来我
    rng.Value=数据
    端接头
    
    Trim
    应用程序。Trim
    (这是
    工作表函数.Trim
    的最新绑定版本)的工作方式不同。前者不会删除单词之间的额外空格。。。但是如果您不关心这一点,那么可以使用
    Application.Trim
    来代替这里的
    Trim
    。Trim()仅适用于字符串。我怀疑您的复杂表达式,
    工作表(“B”).Range(“F2:F”&rw).Value
    ,解析为非字符串的内容。建议:“分而治之”:将复杂表达式分解为更小的子变量,以确定问题的确切位置…@palsm4-是的,这是一个二维变量数组。@palsm4该列中的所有内容都是字符串。这是一堆lastname,firstname加了很多空格。这将如何产生非字符串的内容?@BrettRussellAce-因为多单元格范围的
    .Value
    是一个二维变量数组,而
    Trim
    将阻塞该数组。根据您的描述,尝试使用
    Application.Trim
    。很公平-我相应地更新了我的回复。关键的一点是OP需要理解字符串数组“string”