单步执行会产生与运行不同的结果

2024-06-24

我有一段代码用于拆分单元格中的文本。数据是由不使用任何有用的分隔符的调查程序输出的,因此不幸的是,将文本转换为列对我没有任何帮助。

我写了这段代码,但事实证明,两种情况下结果是不同的。

  1. 我一步步运行代码,直到添加第一列,然后让它完成

  2. 我从执行宏的菜单运行代码

在第一种情况下,输出是我设计的。在带有标题的列之后Crop: XXX(其中包含需要拆分的原始数据)每个单独的条目都有编号为 1 到 X 的列。每行的数据在 X 列中开始拆分,然后移动到有条目为止。像这样:

| Crop XXX    | 1  | 2  | 3  | 4  |
|-------------|----|----|----|----|
| X1,X2,X3    | X1 | X2 | X3 |    |
| X1,X2,X3,X4 | X1 | X2 | X3 | X4 |

在第二种情况下,所有列都编号为 1,并且每个新行在前一行的数据之前输入其数据。像这样:

| Crop XXX    | 1  | 1  | 1  | 1  | 1  | 1  | 1  |
|-------------|----|----|----|----|----|----|----|
| X1,X2,X3    |    |    |    |    | X1 | X2 | X3 |
| X1,X2,X3,X4 | X1 | X2 | X3 | X4 |    |    |    |

我用来输入和编号这些列的代码是这样的:

    If Not UBound(inarray) = 0 Then

        For i = UBound(inarray) To LBound(inarray) Step -1
            If ws.Cells(1, col + i).Value = i Then
                If i = UBound(inarray) Then
                    Exit For
                End If
                col_to_add = col + i + 1
                Exit For
            Else
                addcol = addcol + 1
            End If
        col_to_add = col + i
        Next i

        If Not i = UBound(inarray) Then
            col1 = ConvertToLetter(col_to_add)
            col2 = ConvertToLetter(col_to_add + addcol - 1)
            ws.Columns(col1 & ":" & col2).Insert shift:=xlToRight
        End If

        If Not addcol = 0 Then
            For j = 1 To addcol

                If col_to_add = col + j Then
                    If j = 1 Then
                        ws.Cells(1, col_to_add) = 1
                    Else
                        ws.Cells(1, col_to_add + j - 1) = Cells(1, col_to_add + j - 2).Value + 1
                    End If
                Else
                    ws.Cells(1, col_to_add + j - 1) = Cells(1, col_to_add + j - 2).Value + 1
                End If
            Next j
        End If

        For k = UBound(inarray) To LBound(inarray) Step -1
            ws.Cells(row, col + k) = inarray(k)
        Next k
    End If

在这个例子中Inarray()是一个一维数组,其中第一行包含以下值:

| Inarray() | Value |
|-----------|-------|
| 1         | X1    |
| 2         | X2    |
| 3         | X3    |

ConvertToLetter是以下函数:

Function ConvertToLetter(iCol As Integer) As String
Dim vArr
vArr = Split(Cells(1, iCol).Address(True, False), "$")
ConvertToLetter = vArr(0)
End Function

谁能指出为什么场景 1 和 2 之间会出现这种差异?通常这些事情发生在对象没有完全分类时,但我想这次我解决了这个问题。


差异是因为CellsRange不完全合格。因此,当您一步步进行时,您也选择了正确的工作表,但实际上您并没有选择正确的工作表。

每当你遇到这样的事情时:

ws.Cells(1, col_to_add + j - 1) = Cells(1, col_to_add + j - 2).Value + 1

确保你总是写Worksheet之前Cells()像这儿 -ws.Cells。或者在范围之前 -ws.Range()。否则需要ActiveSheet或代码所在的工作表(如果不在模块中)。

  • 类似问题截图说明 https://stackoverflow.com/a/50465557/5448626
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单步执行会产生与运行不同的结果 的相关文章

  • 错误:如何读取 Excel 中的空单元格

    我正在尝试使用 POI 从 Excel 读取数据 如何检查该单元格是否为空单元格 我不知道缺少什么我认为这应该有效 java util Iterator
  • Excel HTTP 获取超时

    我们有这个小子 它只是将数据泵入远程服务器 一切都按预期进行 前几天 网络服务器发生了一次持续大约一个小时的事件 我仍然可以 PING 服务器 但 IIS 没有响应 结果 宏只是挂起等待响应 关于快速通过 失败测试或超时有什么想法吗 Sub
  • 在 VBA 中声明字典

    我收到错误Run time error 424 Object required当我尝试在 VBA 中创建字典时 我的代码如下所示 Private Sub data Dim dicti As Object Set dicti CreateOb
  • 使用字符串数组作为子字符串参数的 VBA InStr 函数 (Excel)

    找了很久了 第一次提问 目标 循环遍历包含地址的列 根据单元格包含的邮政编码为单元格偏移 0 6 分配一个值 城市名称 这是我到目前为止所得到的 缩短的数组长度 Sub LabelCell Dim SrchRng As Range cel
  • VBA:如何从 MS Access 运行另一个应用程序

    我一直在试图解决这个问题 但似乎我在任何地方都找不到解决该问题的方法 这是第一部分 VBA Shell 命令始终返回 找不到文件 https stackoverflow com questions 10439024 vba shell co
  • Hyperlinks.add VBA [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在用 VBA 编程 我想使用创建超链接hyperlink addActiveSheet 对象的方法 但是它不起作用 这是我的代码 set
  • 使用 python 只读取 Excel 中的可见行

    我想只读取 python 中 Excel 工作表中的可见行 输入 Excel表 所以当我过滤时 作为 python 中的输出 在本例中我将仅获得可见数据 1 行 这是我的代码 from openpyxl import load workbo
  • 使用 php 和 symfony 从数组创建 Excel 文件

    我正在尝试使用 PHP 和 symfony 将数组导出为 XLS 文件 如下面的代码所示 创建 XLS 文件后 我只能获取数组的最后一行 并且它显示在文件的第一行中 似乎 lignes 变量没有增加 我不明白出了什么问题 有人可以帮忙吗 f
  • 修剪工作簿中的所有单元格(VBA)

    我尝试向一直在开发的 Excel 加载项添加功能 该功能会修剪已用单元格末尾的前导空格 甚至可能解析文本 我需要这样做的原因只是为了将其变成超链接我已经在工作了 但是那部分很好 这是我到目前为止所尝试的 我已经修剪了active works
  • 数据透视表、页面过滤器 - 使用日期过滤

    我正在尝试过滤具有日期值的页面过滤器 但我在使用时不断出现错误 PivotFilters Add type xlBefore value 5 1 2015 我还尝试了下面的代码 Dim nd As Long nd CLng Date 90
  • 在 Excel VBA 中,如何保存/恢复用户定义的过滤器?

    如何使用 VBA 保存并重新应用当前过滤器 在 Excel 2007 VBA 中 我试图 保存用户在当前工作表上拥有的任何过滤器 清除过滤器 做东西 重新应用保存的过滤器 看一下捕获自动筛选状态 http www mrexcel com f
  • 如何正确编写 CSS 属性选择器来提取所有 id 属性?

    情况 我目前正在尝试在 VBA 中使用语法重现属性选择器 attr 来自给出的 CSS 选择器练习here https www w3schools com cssref trysel asp 选择器旨在根据给定属性的值选择元素 预期结果 在
  • 对象“_Worksheet”的方法“复制”失败

    我第一次遇到这个错误 对象 Worksheet 的方法 复制 失败 我听说这是一个很常见的错误 但我无法找到解决方案 当我搜索时 我发现了很多关于 对象的 范围 失败 错误 此错误是由工作站的内存限制引起的还是与软件相关的错误 有人有办法解
  • EXCEL 索引通过多个条件和多个匹配类型进行匹配?

    所以我确信我只是语法错误 但情况是这样的 我的 Sheet2 有 3 列 point name x y 我有 Sheet3 其中包含 5 列的区域列表 area name x start x end y start y end 我试图将每个
  • 选择或复制三个不相邻的单元格 3

    如何使用复制 3 个不相邻的单元格ActiveCell Row Range A ActiveCell Row C ActiveCell Row E ActiveCell Row Copy Update 欲了解更多信息 请遵循 https y
  • 切换发件人收件箱

    我目前使用的代码可以生成带有某些字段 例如 收件人 抄送 密件抄送 的电子邮件 但我不确定如何自动切换电子邮件的 发件人 部分 Ie my email is here but I want to automatically switch t
  • 在不打开文件的情况下操作/复制 .CSV 数据?

    我正在尝试优化一些代码 这些代码使用存储在 CSV 文件中的一些测试数据进行一些分析并将其数据复制到 Excel 工作表中 此代码通常一次运行数百个测试 每个测试大约需要 4 5 秒 因此有时可能需要几个小时才能完成 我查阅了一些优化技术
  • 索引与行中的多个条件匹配

    我正在制作一个电子表格 其中 B 列中包含股票代码 ID I 列中包含与这些代码相对应的成员 J 列中包含费率 费率根据编号而变化 成员 因此一个股票代码 ID 可以位于多行中 在我的输出中 我需要特定股票 ID 和成员的费率 它应该查找确
  • 为什么即使代码运行良好,VBA 也会显示“(未响应)”?

    我在许多不同的 VBA 程序中都遇到过这个问题 所以我想我可能在 Excel 或 VBA 编辑器中设置了一些不正确的设置 老实说 在网上搜索了很多之后我还是一无所知 基本上 我将运行一段正常的代码 并且应用程序 Excel 和 VBA 编辑
  • 如何提取字符串中的一段字符串

    我有一个日志 我想从中提取 name 之后的任何内容 日志看起来像这样 BC WVM FAIL Rend wrong size for BCID 4608603 rend id 4608621 expected sz 220459951 a

随机推荐