excel - VBA 行为怪异,无法获取存储在变量中的值
问题描述
我有一个非常奇怪的问题。如果返回值超过一个字符,我无法获得从如下简单函数返回的值。现在第二个问题是以下代码没有将“WTH”分配给 sheetName 变量。请参阅屏幕截图 2. CYRIL 评论后更新
Public Sub WTHFormatter()
Dim sheetName As String
sheetName = "WTH"
Dim rng1 As Range
'delete empty rows
lastRowWTH = getLastRow(sheetName, 2)
'Delete rows below the last Row
Worksheets(sheetName).Rows(lastRowWTH + 1 & ":" & Worksheets(sheetName).Rows.Count).Delete
' build first range
Set rng1 = Worksheets(sheetName).Range("B11:F" & lastRowWTH)
Call setCellBorders(rng1)
Set rng1 = Worksheets(sheetName).Range("H11:K" & lastRowWTH)
Call setCellBorders(rng1)
'determine the range for months
For i = 13 To 24
If Cells(7, i) = "" Then
lastCol = i - 1
Exit For
End If
lastCol = i
Next
ColLetter = returnLabel(lastCol)
ColLetter2 = returnLabel(lastCol + 2)
ColLetterX = returnLabel(lastCol + 14)
Set rng1 = Worksheets(sheetName).Range("K17:" & ColLetter & lastRowWTH)
Call setCellBorders(rng1)
Set rng1 = Worksheets(sheetName).Range(ColLetter2 & lastRowWTH & ":" & ColLetter3 & lastRowWTH)
Call setCellBorders(rng1)
End Sub
Function returnLabel(num1 As Long) As String
Dim ColumnLetter As String
ColumnLetter = Split(Cells(1, num1).Address, "$")(1)
returnLabel = ColumnLetter
End Function
上述函数执行后返回空白,varTest 没有任何内容。如果我逐行执行,我看到函数中的 test1 不是“空”。如果我中断执行并探测变量,我只会按照下面的屏幕截图看到“test1 =”。这破坏了我的代码。
奇怪的是,如果我从“立即窗口”调用该函数,它会返回预期值。
我已经做过的事情:
- 我已经使用上面的简单代码在一个新文件中进行了测试。
- 在不同的 PC 上测试,相同的代码在相同版本的 Windows 10 和 Office 365 上运行良好。
- 更新/重新安装 MS Office 365
- 重新启动电脑
- 如果返回值是像“A”这样的单个字符,则代码工作正常。
无法理解这里的原因。任何帮助表示赞赏。
UPDATE1 我在上面的代码工作时尝试了一个新文件,但主要代码有一个新的类似问题。这已经开始发生了。它没有为变量分配字符串值。请参阅随附的屏幕截图。VBA 代码的屏幕截图。我假设系统或某些病毒存在问题。
解决方案
推荐阅读
- python - Python在找到关键字后提取句子
- java - 索引超出范围,IF 代码行出错
- java - Java 8 代码在 intellij 中自动转换为其他格式
- r - 从 96 孔板执行和保存图形
- c++ - 如何在 Qt 中收听“菜单打开”事件?
- reactjs - 测试调用另一个钩子的自定义反应钩子
- google-apps-script - 使用 Google Apps 脚本获取 Telegram Post 的视图
- javascript - JavaScript删除模态onclick并减少计数器
- java - RC2 加密结果在 Python 和 Java 中的差异
- c++ - C++ 派生类无法访问受保护的成员,除非使用默认构造函数