【问题标题】:VBA Excel Autoincrement the string value when loopingVBA Excel在循环时自动增加字符串值
【发布时间】:2020-12-04 15:31:32
【问题描述】:

我有一份包含公寓数量的清单。

我想在这里填充字符串

现在我想让它为每个要通过循环生成的工作表增加 1,如下所示:

 Sub otdr()

 Dim i As Long
 Dim xNumber As Long
 Dim otdr As Range
 Dim xName As String
 Dim ws As Worksheet

 Application.ScreenUpdating = False

 Set ws = Sheets("OTDR TRACE - 1")
 Set otdr = ws.Range("Q46")
 xNumber = Sheets("Frontsheet").Range("D32").Value


 For i = 1 To (xNumber - 1)
 otdr = "OT " & (i + 1) & " of " & Number
 ws.Copy After:=ActiveWorkbook.Sheets(ws.Index + i - 1)
 ActiveSheet.Name = "OTDR TRACE - " & (i + 1)
 Next

 ws.Activate
 otdr = "OT 1 of " & Number

 Application.ScreenUpdating = True

 End Sub

在执行现有代码后,它停止工作。我创建了第二个循环,但复制了字符串,但没有更改数字。

  Dim i As Long, j As Long
  Dim xNumber As Long, yNumber As Long
  Dim otdr As Range, desc As Range
  Dim xName As String
  Dim ws As Worksheet, wk As Worksheet

 Application.ScreenUpdating = False

 Set ws = Sheets("OTDR TRACE - 1")
 Set wk = Sheets("Fibre drop release sheet")
 Set otdr = ws.Range("Q46")
 Set desc = ws.Range("N7")
 xNumber = Sheets("Frontsheet").Range("D32").Value
 yNumber = Sheets("Fibre drop release sheet").Range("E3").Value

 For i = 1 To (xNumber - 1)
 otdr = "OT " & (i + 1) & " of " & xNumber
 ws.Copy After:=ActiveWorkbook.Sheets(ws.Index + i - 1)
 ActiveSheet.Name = "OTDR TRACE - " & i + 1
 Next

 For j = 1 To Number
 desc = "FIBRE TRACE @ 1310 & 1550 - F1 - Flat " & j    ' copying only the string without the increment numeration
 ws.Copy After:=ws.Range("N7")(ws.Index + i) ' this line generates an error

 Next


 ws.Activate
 otdr = "OT 1 of " & xNumber

添加后

    ws.Copy After:=ws.Range("N7")(ws.Index + i)

我收到以下错误:

方法“对象复制”工作表失败

解决方法如下:

Method 'Copy' of object '_Worksheet' failed

对我没有帮助

有没有机会让这个数字按张递增?

更新:

现在我的代码如下所示:

  Sub otdr()

  Dim i As Long, j As Long, Lastrow As Long
  Dim xNumber As Long, yNumber As Long
  Dim otdr As Range, desc As Range
  Dim xName As String
  Dim ws As Worksheet, wk As Worksheet

  Application.ScreenUpdating = False

  Set ws = Sheets("OTDR TRACE - 1")
  Set wk = Sheets("Fibre drop release sheet")
  Set otdr = ws.Range("Q46")
  Set desc = ws.Range("N7")
  xNumber = Sheets("Frontsheet").Range("D32").Value
 
  Lastrow = wk.Cells(wk.Rows.Count, "E").End(xlUp).Row

  For i = 1 To (xNumber - 1)
  otdr = "OT " & (i + 1) & " of " & Number
  ws.Copy After:=ActiveWorkbook.Sheets(ws.Index + i - 1)

  ActiveSheet.Name = "OTDR TRACE - " & i + 1

  Next

  For j = 1 To Lastrow
  desc = "FIBRE TRACE @ 1310 & 1550 - F1 - Flat " & j

  Next


  ws.Activate
  otdr = "OT 1 of " & Number

  Application.ScreenUpdating = True



  End Sub

更新二

适用于以下情况:

   For i = 1 To (xNumber - 1)
   otdr = "OT " & (i + 1) & " of " & Number
   ws.Copy After:=ActiveWorkbook.Sheets(ws.Index + i - 1)

   ActiveSheet.Name = "OTDR TRACE - " & i + 1
   For j = 1 To Lastrow
   desc = "FIBRE TRACE @ 1310 & 1550 - F1 - Flat " & j
   Worksheets("OTDR TRACE - 1").Range("N7").Copy Destination:=Sheets("OTDR TRACE - " & j + 1).Range("N7")

   Next

 Next

我收到以下行的“我们不能为合并的单元格执行此操作”:

      Worksheets("OTDR TRACE - 1").Range("N7").Copy Destination:=Sheets("OTDR TRACE - " & j + 1).Range("N7")

【问题讨论】:

  • 如果您查看“帮助”,您会发现您在另一个工作表之前或之后复制了一个工作表。您无法在范围之后复制工作表,您要做什么?

标签: excel vba loops


【解决方案1】:

您的代码中有错字。我认为您的第二个循环应该是:

For j = 1 To yNumber

你有没有:

Option Explicit

在你的模块顶部?如果没有,请添加它(并养成这样做的习惯),然后 VBA 将要求您声明变量并抛出变量拼写错误(拼写错误导致变量未声明)。

然后我不确定失败的行的意图:

ws.Copy After:=ws.Range("N7")(ws.Index + i)

但这肯定是不正确的。如果您尝试在其中一个工作表中设置 Range("N7") 的值,那么您应该直接执行此操作,而不是使用 ws.Copy。如果那 你正在尝试做的,那么语法是这样的:

Worksheets("<name>").Range("<range>").Value = <value>

编辑,2020 年 12 月 8 日:

进一步说明您的 cmets 和说明,您仍在尝试一次性完成复制和粘贴,这就是您在调试它时遇到问题的原因。使用变量将失败的行分成两部分(尽管在顶部声明):

Dim strValue As String ' Or whichever type is appropriate

...

strValue = Worksheets("OTDR TRACE - 1").Range("N7").Value
Sheets("OTDR TRACE - " & j + 1).Range("N7").Value = strValue

我怀疑您在尝试设置值时仍然会遇到合并单元格错误,但是您很清楚问题是什么并且可以制定解决方案。我目前不在使用 Excel 的机器上,但您可能会发现您需要使用另一种典型的方式来获取单元格值:

Cells(row, col)

所以,在你的情况下:

Worksheets("OTDR TRACE - 1").Cells(7, 14).Value

【讨论】:

  • 好地方和好建议,虽然不是 OP 报告问题的原因。他没有报这个错误,说明OE肯定没有被使用。
  • 我拥有所有这些东西。我真的很抱歉我忘了添加号码。尽管如此,错误还是出现了。
  • 已编辑答案以询问失败行的意图。
  • 我想直接做,但要循环。我试过这样的东西,但没有用: desc = "FIBRE TRACE @ 1310 & 1550 - F1 - Flat " & Index + j
  • @MKR,你还没有解释那一行的意图是什么——失败的那一行。如果您用文字解释该行试图做什么,我们就有更好的机会为您修复它。
猜你喜欢
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
相关资源
最近更新 更多