gpt4 book ai didi

excel - 为什么 Excel VBA 编辑器会更改续行自动换行?

转载 作者:行者123 更新时间:2023-12-03 00:38:54 25 4
gpt4 key购买 nike

我在 Excel VBA 中有一行代码很长,我想使用行延续将其分成两行。但是,当我将光标从该行代码移开后,编辑器会更改我首选的自动换行。我怎样才能让它停止这样做?

If IsEmpty([Task].Cells(rowNo, [Task[SchedDateTime]].Column)) And _
IsEmpty([Task].Cells(rowNo, [Task[DaysAlloc]].Column)) Then

被编辑更改为:

If IsEmpty([Task].Cells(rowNo, [Task[SchedDateTime]].Column)) And IsEmpty( _
[Task].Cells(rowNo, [Task[DaysAlloc]].Column)) Then

我认为这更难阅读。

最佳答案

停止使用括号标识符。这个技巧对于一次性代码和直接 Pane 中的快速调试器内容很有用,但不适用于实际的生产代码。

当您执行[Task]时,您将走出 VBA 领域并遵循主机应用程序 - Excel - 它将执行 Application.Evaluate("Task") code> 并且大概会获取一个 Range 对象。

从代码的外观来看,听起来Task是某个表的名称。为什么不明确说明该表的来源,而不是让 Excel 计算出来?

Dim taskTable As ListObject
Set taskTable = Sheet1.ListObjects("Task")

不确定您到底想做什么,但您可以利用强大的 ListObject API,而不是使用一半由 Excel 解析、一半由 VBA 解析的后期绑定(bind)隐式代码。

Dim scheduleTimestampColumn As Long
scheduleTimestampColumn = taskTable.ListColumns("SchedDateTime").Index

Dim daysAllocColumn As Long
daysAllocColumn = taskTable.ListColumns("DaysAlloc").Index

Dim currentRow As ListRow
For Each currentRow In taskTable.ListRows
If IsEmpty(currentRow.Range.Cells(ColumnIndex:=scheduleTimestampColumn).Value) And _
IsEmpty(currentRow.Range.Cells(ColumnIndex:=daysAllocColumn).Value) _
Then
'...do stuff...
End If
Next

VBA 支持括号表达式作为 Application.Evaluate(或 Worksheet.Evaluate,具体取决于上下文)的速记代理...所以,它实际上比我更隐式写在这个答案的顶部附近)。在某些上下文中,它还支持括号内的标识符,用于其中可能包含空格的名称,否则会产生非法的 VBA 标识符。

但是[TableName[ColumnName]]完全是Excel-land(表格公式表示法)-VBA不知道这意味着什么,并且方括号内部括号表情都彻底困惑了。如果没有嵌套括号,VBE 就不会混淆,也不会破坏您的缩进。但是如果没有括号表达式,您将获得一个不混淆的 VBE 显式代码,它说明了它的作用,并且执行了它所说的 - 加上对所有内容进行编译时验证!

关于excel - 为什么 Excel VBA 编辑器会更改续行自动换行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58207067/

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