excel - 对象“_Worksheet”的方法“范围”在 VBA 中失败,但在使用“选择”时没有
问题描述
我正在尝试加快我的宏,它将一系列列中的公式复制并粘贴到相邻的列中。最初代码运行使用
For i = 1 To j
ActiveSheet.Range(Columns(NumofResultsLineNamesRange), Columns(NumofResultsLineNamesRange + 119)).Select
Selection.Copy
Selection.Insert Shift:=xlToRight
Next i
但是我正在复制数百列,这运行起来很慢。我试图摆脱使用“选择”来加速宏并像这样重新编码:
Dim ResultTemplateSheet As Worksheet
Set ResultTemplateSheet = Sheets("01")
Dim i As Long
Dim j As Integer
j = Sheets("Input").Range("C16").Value - 2
Dim LineNameFormula As Range
Dim NumofSummaryLineNamesRange As Integer
ResultTemplateSheet.Range("A4").Calculate
NumofSummaryLineNamesRange = ResultTemplateSheet.Range("A4").Value
Set LineNameFormula = ResultTemplateSheet.Range(Columns(NumofSummaryLineNamesRange), Columns(NumofSummaryLineNamesRange + 3))
LineNameFormula.Copy Destination:=ResultTemplateSheet.Range(Columns(NumofSummaryLineNamesRange + 4), Columns(NumofSummaryLineNamesRange + 4 * (j + 1)))
现在我收到此行的“对象'_Worksheet'的方法'范围'失败”错误消息:
Set LineNameFormula = ResultTemplateSheet.Range(Columns(NumofSummaryLineNamesRange), Columns(NumofSummaryLineNamesRange + 3))
我尝试Set
从行中删除,我仔细检查了它NumofSummaryLinesRange
是一个整数,但我不禁觉得这是一个语法错误,但我不知道在哪里?
最令人困惑的是,如果我恢复到Select
. 但是,如果可能的话,我想避免这种情况。
解决方案
使用该With
语句并.
在您的引用之前添加将使用您的工作表类型对象Columns
完全限定它。ResultTemplateSheet
With ResultTemplateSheet ' <-- Use With Statement
.Range("A4").Calculate
NumofSummaryLineNamesRange = .Range("A4").Value
Set LineNameFormula = .Range(.Columns(NumofSummaryLineNamesRange), .Columns(NumofSummaryLineNamesRange + 3))
LineNameFormula.Copy Destination:=.Range(.Columns(NumofSummaryLineNamesRange + 4), .Columns(NumofSummaryLineNamesRange + 4 * (j + 1)))
End With
推荐阅读
- c# - 使用 C# 读取特定字符串并创建表
- ruby-on-rails - 什么可以在 Rails 中创建线程?
- javascript - javascript水平滚动日期时间选择器,当前时间始终位于中心
- python - 如何使用 ID 整数跟踪 Django 中的请求?
- php - 脚本无法找到或执行文件夹文件
- azure - Azure Durable Functions 中的依赖项调用失败
- google-cloud-platform - 我们如何为 Google Cloud Functions 代码动态部署更新版本的代码?
- c# - C# - 将 RTF 格式的字符串获取到 RichTextBox
- tensorflow - Python - 一种训练 softmax keras 模型的方法?
- java - Recyclerview 项目没有以相同的高度显示