VBA的新手。我在将变量声明为工作表上的特定单元格时遇到麻烦。
我尝试过按行和列定义单元格,但是当我把手表放在一行上时,它说Value不在上下文中。变量为testname,位于我设置为原始变量的工作表的单元格E2中。
Sub findcomponents()
Dim raw As Worksheet
Dim res As Worksheet
Dim temp As Worksheet
Dim testname As String
Dim finalrow1 As Integer
Dim finalrow2 As Integer
Dim i As Integer
Set raw = Worksheets("rawdata")
Set res = Worksheets("resultcomponents")
Set temp = Worksheets("uploadtemplate")
testname = raw.Range("E2").Value
finalrow1 = raw.Range("A10000").End(xlUp).Row
finalrow2 = res.Range("A10000").End(xlUp).Row
For i = 2 To finalrow2
If res.Cells(i, 4) = testname Then
Range(Cells(i, 2), Cells(i, 4)).Copy
temp.Range("A10000").End(xlUp).Cells("A2").Paste
End If
Next i
End Sub
我希望该值是E2单元格中的字符串 编辑:我添加了其余的代码。当我运行时,它什么也没做。 应该采用字符串testname并循环遍历res工作表上的列表,然后返回匹配项。我在testname行上放置了一块手表,因为我认为它将向我显示它正在比较正确的字符串,并且监视行中的Value表示
是,粘贴行不正确。我还尝试了temp.Range(“ A10000”)。End(xlUp).Offset(1、0).Paste,这也使它很生气。
此修复程序可以在工作表名称上进行编辑。但是res工作表上有1个以上的匹配项。这就是为什么我认为找到最后一行(但我应该有1行偏移量)会返回所有匹配项的原因。这确实可以返回所有值。 temp.Range(“ A10000”)。End(xlUp).Offset(1、0).PasteSpecial xlPasteValues
是否有更好的方法可以不使用Range(“ A10000”)。End(xlUp)?
答案 0 :(得分:0)
您可以使用以下两种方法之一进行粘贴(尽管应注意还有其他方法)
Range.Copy PasteRange
或
Range.Copy
PasteRange.PasteSpecial (paste type (values, formats, etc.))
对于Last Row
计算,它也更新了更多标准变量块/变量名。另外,请注意,我还更新了Last Row
计算,使其更加动态。最后,将Integer
换成Long
Option Explicit
Sub findcomponents()
Dim raw As Worksheet: Set raw = ThisWorkbook.Sheets("rawdata")
Dim res As Worksheet: Set res = ThisWorkbook.Sheets("resultcomponents")
Dim temp As Worksheet: Set temp = ThisWorkbook.Sheets("uploadtemplate")
Dim testname As String
Dim LR1 As Long, LR2 As Long, LR3 As Long, i As Long
LR1 = raw.Range("A" & raw.Rows.Count).End(xlUp).Row '<-- This variable is never used??
LR2 = res.Range("A" & res.Rows.Count).End(xlUp).Row '<-- Updated for standard Last Row (LR) calculation
For i = 2 To LR2
If res.Cells(i, 4) = raw.Range("E2") Then
res.Range(res.Cells(i, 2), res.Cells(i, 4)).Copy '<-- Qaulified Ranges!!
LR3 = temp.Range("A" & temp.Rows.Count).End(xlUp).Offset(1).Row
temp.Range("A" & LR3).PasteSpecial xlPasteValues '<-- Correct Paste Method
End If
Next i
End Sub
使用的命名约定只是我的偏爱。在某种程度上,您可以随意命名变量,但您认为合适