gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:40:06 26 4
gpt4 key购买 nike

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

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

  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

确保您始终在 Cells() 之前编写 Worksheet,如下所示 - ws.Cells。或者在范围之前 - ws.Range()。否则,它将采用 ActiveSheet 或代码所在的工作表(如果不在模块中)。

关于excel - 单步执行会产生与运行不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53061169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com