为何Range("B3").Value为"Car Park"时givingType变量仍为空?
问题解答
不需要用Set函数解决这个问题。Set仅用于给对象类型变量(比如Workbook、Worksheet、Range这类)赋值,而givingType是字符串类型(值类型),直接赋值即可,用Set反而会触发语法错误。
导致givingType为空的可能原因及解决办法
- 工作表引用不明确:代码里用
Sheets(1).Activate后取Range,但若此时激活的不是你打开的目标工作簿的工作表(比如之前打开的另一个工作簿处于激活状态),就会取错单元格。建议直接明确引用目标工作簿和工作表,避免依赖Activate:Dim targetWb As Workbook ' 打开文件时直接赋值给变量 Set targetWb = Workbooks.Open("I:\Calendar 2023\2023 Budget\2023 Working Budget\3. Other Revenue\" & fileName & ".xlsx") ' 直接通过变量引用工作表和单元格 givingType = targetWb.Sheets(1).Range("B3").Value - 文件名输入问题:如果输入的
fileName包含多余空格、或者已经带了.xlsx后缀,会导致打开错误的文件(甚至打不开,但代码里关了提示可能没察觉)。可以给输入框加格式处理:fileName = Trim(Application.InputBox("Please copy and paste the Other Revenue Filename here")) ' 可选:自动移除后缀(如果用户输入了) If Right(fileName, 5) = ".xlsx" Then fileName = Left(fileName, Len(fileName)-5) - 单元格内容异常:看起来单元格是"Car Park",但可能是公式返回空值、或者包含不可见的空白字符。可以在代码里加调试语句,查看实际值:
打开VBA编辑器的立即窗口(Ctrl+G)就能看到输出,判断单元格是不是真的有有效内容。Debug.Print targetWb.Sheets(1).Range("B3").Value Debug.Print "长度:" & Len(targetWb.Sheets(1).Range("B3").Value)
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

