首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Excel VBA编辑器会更改行连续自动换行?

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

Stack Overflow用户
提问于 2019-10-03 02:11:40
回答 1查看 174关注 0票数 2

我在Excel VBA中有一行很长的代码,我想使用行续行符将它分成两行。但是,在我将光标从该行代码移开后,编辑器会更改我喜欢的换行方式。我怎么才能让它停止这样做呢?

代码语言:javascript
运行
复制
If IsEmpty([Task].Cells(rowNo, [Task[SchedDateTime]].Column)) And _
   IsEmpty([Task].Cells(rowNo, [Task[DaysAlloc]].Column)) Then

由编辑器更改为:

代码语言:javascript
运行
复制
If IsEmpty([Task].Cells(rowNo, [Task[SchedDateTime]].Column)) And IsEmpty( _
   [Task].Cells(rowNo, [Task[DaysAlloc]].Column)) Then

我觉得更难读懂。

EN

回答 1

Stack Overflow用户

发布于 2019-10-03 02:36:00

停止使用带括号的标识符。此技巧适用于即时窗格中的一次性代码和快速调试器,而不适用于实际的生产代码。

当您执行[Task]时,您就走出了VBA的领域,并听从于主机应用程序- Excel -它将执行Application.Evaluate("Task"),并且可能还会获得一个Range对象。

从您的代码看,Task听起来像是某个表的名称。为什么不明确说明该表来自何处,而不是让Excel来解决它呢?

代码语言:javascript
运行
复制
Dim taskTable As ListObject
Set taskTable = Sheet1.ListObjects("Task")

不确定您到底想要做什么,但是您可以利用强大的VBA,而不是使用后期绑定的隐式代码,这些代码一半由ListObject解决,一半由VBA解决。

代码语言:javascript
运行
复制
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和显式的代码,它告诉你它做了什么,并做了它所说的事情--外加对所有东西的编译时验证!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58207067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档