【发布时间】:2019-05-13 13:17:22
【问题描述】:
我有以下代码:
Dim WS1, WS2 As Worksheet
Dim chatRange As Range
Dim cell As Range
Dim txt As String
Sub NameTest()
Set WS1 = ActiveWorkbook.Sheets("Page 1")
Set WS2 = ActiveWorkbook.Sheets("Sheet1")
x = 2
lRow1 = WS1.Cells(Rows.Count, "B").End(xlUp).Row
Set chatRange = WS1.Range("B" & x, "B" & lRow1)
For Each cell In chatRange
If cell.Offset(0, 11).Value = "Accepted" Then
txt = cell.Offset(0, 18).Value
NameSplit
End If
Next cell
End Sub
Sub NameSplit()
Dim i As Integer
Dim FullName As Variant
Dim x As String, cell As Range
Dim lRow2 As Long
FullName = RemoveBlankLines(Split(txt, vbLf))
lRow2 = WS2.Cells(Rows.Count, 2).End(xlUp).Row + 1
WS2.Cells(lRow2, 1).Value = cell.Value '<===================
WS2.Cells(lRow2, 2).Value = cell.Offset(0, 2).Value '<===================
WS2.Cells(lRow2, 3).Value = cell.Offset(0, 6).Value '<===================
WS2.Cells(lRow2, 4).Value = cell.Offset(0, 18).Value '<===================
End Sub
这是读取一张纸然后将信息传递给另一张纸的测试代码的一部分。
我想使用第一个 sub 中设置的范围内的“单元格”中的信息来传输第二个 sub 中的详细信息。它适用于在顶部声明的 WS1 和 WS2,但它对范围的作用不同。
带箭头的四行是我正在努力解决的部分。 cell.value 回来了:
运行时错误“91”:对象变量或未设置块变量
我知道最好的办法是把它全部放在一个潜艇上,但如果可能的话,我想把它分开。
【问题讨论】:
-
您将
cell声明为范围(在 NameSplit 函数中第二次),但从未设置它。这就是您至少收到错误的原因。我会尝试修复您的代码并作为答案发布。 -
您需要将
cell作为范围参数传递给您的Namesplit子。 -
旁注:您的
WS1变量是Variant,您的行应如下所示:Dim WS1 as Worksheet, WS2 as Worksheet -
如果这些宏是同一模块的一部分,您可以使用
Public变量将您声明的内容传递给其他宏。另请注意,单元格很容易与单元格混淆!