【问题标题】:If string then paste the count value in an offset column and add one to count for next value如果是字符串,则将计数值粘贴到偏移列中,然后加一个计数以获取下一个值
【发布时间】:2020-06-01 17:07:16
【问题描述】:

希望这是一个简单的过程。在这个 For 循环中,我希望 VBA 读取字符串“Foot Strike”的第一个范围(LeftStrike),然后分配“1”的值并将该分配的值放入偏移单元格中。然后我希望它给分配的值加 1 并再次运行 For 循环,寻找下一个“Foot Strike”字符串。这样,我可以看到“第一次”脚击是哪一排,依此类推。我真的很难理解一件事的 .value = 另一件事的 .value 以便“复制和粘贴”可以这么说。

Private Sub CommandButton2_Click()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Sheet2")
Dim LeftStrike As Range, FrameLTD As Range, StepNum As Range
Dim lrL As Long, LastFrame As Long
Dim StepCount As Long
StepCount = 1


lrL = ws.Range("H" & ws.Rows.Count).End(xlUp).Row
LastFrame = ws.Range("A" & ws.Rows.Count).End(xlUp).Row

Set LeftStrike = ws.Range("H2:H" & lrL)
Set StepNum = ws.Range("J2:J" & lrL)

For Each FrameLTD In LeftStrike
   If InStr(FrameLTD, "Foot Strike") Then
           ' assign value of "1" to StepCount
           ' somehow get StepCount to = FrameLTD.Offset(0, 3).Value
           ' StepCount = StepCount + 1

    End If
Next FrameLTD

MsgBox "Steps Numbered"
End Sub

有人能告诉我我的代码行应该在 For 循环中什么来让我的“步数”进入偏移列吗???

【问题讨论】:

  • FrameLTD.Offset(0, 3).Value = StepCount
  • 我编辑了原始问题以包含我拥有的整个代码。
  • 如果我使用“FrameLTD.Offset(0, 3).Value = StepCount”,它不会在工作表中放入任何值。它只是说它运行并显示了消息框,但单元格中没有“StepCount”值。

标签: vba for-loop count return-value offset


【解决方案1】:

Tim Williams 的解决方案应该可行!

  • 仔细检查您是否正在查看/引用正确的工作表的代码(它将 在“Sheet1”中打印值)
  • 这些值将在 K 列中打印为 您引用的范围是 H 列,然后将其偏移 3 列。您没有运行任何其他会覆盖此列的代码?

代码:

Option Explicit

Private Sub CommandButton2_Click()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Sheet2")
Dim LeftStrike As Range, FrameLTD As Range, StepNum As Range
Dim lrL As Long, LastFrame As Long
Dim StepCount As Long

StepCount = 1

lrL = ws.Range("H" & ws.Rows.Count).End(xlUp).Row
LastFrame = ws.Range("A" & ws.Rows.Count).End(xlUp).Row

Set LeftStrike = ws.Range("H2:H" & lrL)
Set StepNum = ws.Range("J2:J" & lrL)

For Each FrameLTD In LeftStrike
   If InStr(FrameLTD, "Foot Strike") Then
           'assign value of "1" to StepCount
           'somehow get StepCount to = FrameLTD.Offset(0, 3).Value
           FrameLTD.Offset(0, 3).Value = StepCount
           StepCount = StepCount + 1
    End If
Next FrameLTD

MsgBox "Steps Numbered"
End Sub

结果:

【讨论】:

  • 你是对的,它有效!谢谢你。我认为它不起作用的原因是因为在今天早些时候的某个时候,我在不知不觉中删除了 H 列中的所有“Foot Strike”值,所以代码正在通读,没有找到任何“Foot Strike”,然后没有编号任何 3 列。哎呀。再次感谢您的帮助!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多