我在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我觉得更难读懂。
发布于 2019-10-03 02:36:00
停止使用带括号的标识符。此技巧适用于即时窗格中的一次性代码和快速调试器,而不适用于实际的生产代码。
当您执行[Task]时,您就走出了VBA的领域,并听从于主机应用程序- Excel -它将执行Application.Evaluate("Task"),并且可能还会获得一个Range对象。
从您的代码看,Task听起来像是某个表的名称。为什么不明确说明该表来自何处,而不是让Excel来解决它呢?
Dim taskTable As ListObject
Set taskTable = Sheet1.ListObjects("Task")不确定您到底想要做什么,但是您可以利用强大的VBA,而不是使用后期绑定的隐式代码,这些代码一半由ListObject解决,一半由VBA解决。
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
NextVBA支持将括号中的表达式作为Application.Evaluate (或Worksheet.Evaluate,取决于上下文...因此,它实际上比我在这个答案的顶部写的更隐含)。在某些上下文中,它还支持带括号的标识符,用于其中可以包含空格的名称,或者使其成为非法的VBA标识符。
但是[TableName[ColumnName]]完全是Excel-land (表公式表示法)- VBA不知道这是什么意思,括号内的方括号完全混淆了它。没有嵌套的括号,VBE不会混淆,也不会破坏缩进。但是如果没有括号中的表达式,你就会得到一个清晰的VBE和显式的代码,它告诉你它做了什么,并做了它所说的事情--外加对所有东西的编译时验证!
https://stackoverflow.com/questions/58207067
复制相似问题