vba - Excel VBA - 表达式值在真 IF 语句后丢失类型和值

标签 vba excel

我在隐藏/取消隐藏行时遇到问题。出于某种原因,如果任一 IF 语句最终为真,则表达式值“i”会丢失其值和类型,并且会出现类型不匹配错误。如果我在代码中没有 i 并且只使用直数,那么一切都会运行得很好。我似乎无法弄清楚如何解决这个问题,有什么建议吗?谢谢!

这是有问题的代码

Sub Macro1()
Dim i As Integer
Dim j As Integer

'Initial Conditions
i = 4
j = 184

If Range("A2").Value = "ONLINE" Then
ActiveSheet.Rows("i:184").EntireRow.Hidden = False
End If

If Range("A2").Value = "OFFLINE" Then
ActiveSheet.Rows("i:184").EntireRow.Hidden = True
End If

End Sub​

最佳答案

尝试这个:

 'provide the correct Column names as per your needs
 ActiveSheet.Range("A" & i & ":C" & j).EntireRow.Hidden

ActiveSheet.Rows() property 不采用在您的代码中生成的字符串值参数。例如Rows("i:184"),这是一个无效类型的无效参数。因此 类型不匹配错误 .

如果事件工作表不再指向您最初指向的内容,则这些 Rows(4:184) 之类的将不起作用。因此,您应该始终使用 Range 的显式声明。工作表的对象。

对于更简洁的代码,您可以像这样使用它。
Option Explicit

Public Sub Hide_Seek
Dim ws As Worksheet
Dim rng As Range
Dim checkVal as String

Set ws = ActiveWorkbook.Sheets("Sheet 1") 'whatever your sheet is
Set rng = ws.Range("A4") 'whatever starting cell, in your case it's D

'assuming these values do change    
i = 4
j = 184

'this is now resizing the range to your desired range, starting from the 
'initial range you defined
'Resize(Row, Column)
Set rng = rng.Resize(i, j)

checkVal = ws.Range("A2").Value
If checkVal = "ONLINE" then
   rng.EntireRow.Hidden = False
Elseif checkVal = "OFFLINE" then
   rng.EntireRow.Hidden = True
End If

End Sub

关于vba - Excel VBA - 表达式值在真 IF 语句后丢失类型和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31248326/

相关文章:

c# - 如何在不显示与 Excel 互操作的保存对话框的情况下保存工作簿?

excel - 使用 Excel VBA 和 XML 抓取网站

performance - 多用户情况下重新链接数据库缓慢

vba - 在 Outlook 2016 中添加上下文菜单项

excel - 添加已安装和引用

excel - 在 VBA Excel 中创建插入语句

java - 使用java从e​​xcel中获取图像

vba - Excel VBA 计时器不断停止

excel - 为什么我不能设置工作簿变量,如果它已经打开 vba

excel - 如何使用定时器触发器在azure函数应用程序中创建excel文件