gpt4 book ai didi

excel - 范围对象通过 "worksheet 1"而不是 "worksheet 2"

转载 作者:行者123 更新时间:2023-12-04 20:59:12 27 4
gpt4 key购买 nike

我在遍历 for 循环中的一系列项目时遇到问题:

该程序应该如何工作-

我从工作表 1(“跟踪电子表格”)开始,根据工作表 1 的变化(在单元格中选择"is"),它会将您转移到工作表 2(“延期提交”),然后遍历一系列工作表 2 中的单元格(例如 A1:A20)。for 循环将继续运行,直到它到达一个空的单元格,然后停止然后继续写入该单元格。

它现在如何工作-

我从工作表 1 开始,根据工作表 1 中的更改(在单元格中选择"is"),它会将您转移到工作表 2,然后从工作表 2 遍历一系列单元格(例如 A1:A20)。但是,它不会遍历工作表 2 的 A1:A20,而是遍历工作表 1 的 A1:A20。在工作表 1 的 A1:A20 范围中找到一个空单元格后,它将填写工作表 2 中的相应单元格(如果工作表 1 上的 A5 为空,则它将填写工作表 2 上的 A5)。

我希望获得帮助,让范围在当时(工作表 2)中迭代事件工作表,而不是迭代工作表 1。

到目前为止我的代码:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
' Deferred Submittal, Column C = 3
Dim cellTextDS As String
Dim deferredArray As Range, deferredCell As Range, deferredRowEmpty As Long
deferredRowEmpty = 1

' Deferred Submittal, Column C
If Target.Column = 3 Then
Row = Target.Row
cellTextDS = ActiveSheet.Range("C" & Row).Text
If cellTextDS = "Yes" Then
Sheets(3).Activate

Set deferredRange = Workbooks("BPS Tracking Sheet v6.xlsm").Worksheets("Deferred Submittals").Range("A1:A20")
For Each deferredCell In deferredRange
Sheets(3).Activate
MsgBox "inside deferredCell is " & deferredCell
MsgBox " active sheet currently is " & name
If IsEmpty(Range("A" & deferredRowEmpty).Value) = True Then Exit For

MsgBox " deferredRowEmpty is " & deferredRowEmpty
deferredRowEmpty = deferredRowEmpty + 1
Next deferredCell

MsgBox "Moving to 'Deferred Submittals' tab in order to input more information. row is " & deferredRowEmpty
ActiveSheet.Range("A" & deferredRowEmpty).Value = "empty"

End If
End If
End Sub

任何帮助将非常感激!

p.s.如果有任何区别,代码位于工作表 1 的 worksheet_change 部分。

p.s.s.我试过使用 this stackoverflow method for setting workbooks and worksheets, to no avail

p.s.s.为这部分发布了我的其余代码。本节中有更多代码,但实际上只是本节的复制和粘贴,但用于不同的列。我还编辑了工作表 1 和 2 是什么,但它们是本工作簿中不同的工作表选项卡,特别是工作表 1 =“跟踪电子表格”和工作表 2 =“延期提交”

最佳答案

好的-我认为这就是您正在寻找的那种东西。使用 worksheet_change 事件时,应该做一些事情。

禁用事件意味着宏可以运行而不会触发进一步的错误更改调用,因此需要进行一些错误管理。

我留下了一个可能有用的注释行,这样一次对多个单元格的任何更改都不会触发进一步的更改,只会退出子

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'If Target.Cells.Count > 1 Then Exit Sub
If Target.Column <> 3 Then Exit Sub

On Error GoTo ExitSub
Application.EnableEvents = False
Dim wsSource As Worksheet: Set wsSource = Me
Dim wsTarget As Worksheet: Set wsTarget = ThisWorkbook.Worksheets("Deferred Submittals")

Dim NextEmpty As Range
If wsSource.Cells(Target.Row, 3) = "Yes" Then
Set NextEmpty = wsTarget.Range("A1:A20").Find("", LookIn:=xlValues)
If Not NextEmpty Is Nothing Then
Debug.Print NextEmpty.Address ' Function check
NextEmpty.Value = Target.Row ' Or whatever you want the value to be
End If
End If

ExitSub:
Application.EnableEvents = True
End Sub

关于excel - 范围对象通过 "worksheet 1"而不是 "worksheet 2",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40748491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com