我一直在努力处理一段代码而我似乎无法找到正确的解决方案。
代码应该做什么:
我想在Excel中复制多行,基于'if'语句说: “如果C列为1,则从Excel工作表复制单元格Ax:Dx并将该数据粘贴到word文件中”
word文件通常在此部分之前的代码中生成。这没有任何问题。
代码是什么:
(Blad = sheet)
k = Blad2.Range("A1", Blad2.Range("A1").End(xlDown)).Rows.Count
Worksheets("Prijzen").Activate
For i = 1 To k
rij = worksheets("Prijzen").Range("C2").Offset(i - 1).Value
If rij >= 1 Then
Blad2.Range("A2:D2").Offset(i - 1).Copy
.PasteExcelTable False, True, False
End If
Next
代码实际执行的内容
示例结果
示例结果2
6行中有“1”,所以通常代码应生成6个代码。 因此,无论如何,代码只是跳过行或放置相同行的2倍。 当我使用F8进行调试时,everthing正确无误。
我尝试了什么
添加延迟,通过互联网阅读,更改表格格式,但遗憾的是不成功。
--- --- EDIT 我实施了Scott的建议并尝试对每一行进行调试。如果我在循环中调试,所有内容都会100%正确粘贴。当我删除该行以便全部自动时,它会再次开始跳过行或制作双行。
我尝试在copy语句周围添加一个DoEvents循环,但这仍然会产生相同的结果。
Dim tmpstart
For i = 1 To k
Ccol = ws2.Range("C2").Offset(i - 1).Value
If Ccol >= 1 Then
tmpstart = Timer
Do
DoEvents
ws2.Range("A2:D2").Offset(i - 1).Copy
Loop While (tmpstart + 1) > Timer
.PasteExcelTable False, True, False
End If
Next
真的很感激一些帮助。
非常感谢,
菲利普
答案 0 :(得分:0)
您正在引用两个不同的工作表。
Dim ws As Worksheet
Set ws = Worksheets("Prijzen") 'or Blad2 which ever is correct.
k = ws.Range("A1", ws.Range("A1").End(xlDown)).Rows.Count
For i = 1 To k
rij = ws.Range("C2").Offset(i - 1).Value
If rij >= 1 Then
ws.Range("A2:D2").Offset(i - 1).Copy
.PasteExcelTable False, True, False
End If
Next
答案 1 :(得分:0)
在确认您的代码在Debug.Print
循环中使用For ... Next
语句运行后,我认为我们可以放心地说代码没有任何问题。我出去了,建议你试试这个工具:http://cpap.com.br/orlando/VBADecompilerMore.asp
我有类似的经历,并且通过使用VBA反编译器获得了很多成功。
一些注意事项,AV软件似乎不喜欢这个下载,奥兰多是一个MS MVP,但该工具确实很棘手。您可能(可能会)需要禁用AV来下载它。
当然......还有其他方法可以测试这是否会产生影响......
创建一个新的FRESH文档并重新键入(或通过纯文本编辑器复制)代码 - 这使您可以在不应该损坏的文档中进行测试...
HTH
答案 2 :(得分:0)
在尝试修复它之后数小时,似乎从Excel复制到剪贴板,并从Word中的剪贴板粘贴,给出了太不确定和随机的结果。线条被张贴了两次,有些线条不会出现。
我的解决方法:
i = 1
Ccol = 1
ws2.Activate
'count rows in sheet, copy & paste title on a location "Budget" in Word.
k = ws2.Range("A1", Blad3.Range("A1").End(xlDown)).Rows.Count
.Goto what:=-1, Name:="Budget"
ws2.Range("A1:D1").Offset(i - 1).Copy
.BoldRun
.PasteExcelTable False, True, False
.BoldRun
For i = 1 To k
If ws2.Range("C2").Offset(i - 1) >= 1 Then
'Copy - Paste to different Excel sheet without using the clipboard
ws2.Range("A2:D2").Offset(i - 1).Copy Destination:=ws6.Range("A1:D1").Offset(Ccol - 1)
'Ccol is used to paste the copied data on rows 1, 2, ...
Ccol = Ccol + 1
End If
Next
' making sure columns/rows width/heigth is ok
ws6.Activate
ws6.Columns("A:D").AutoFit
ws6.Rows(1).AutoFit
'counting the amount of lines in the sheet and copying the complete table
k2 = ws6.Range("A1", ws6.Range("A1").End(xlDown)).Rows.Count
ws6.Range("A1", Range("D1").Offset(k2 - 1)).Copy
'Program pauze before pasting
tmpStart = Timer
Do
DoEvents
Loop While (tmpStart + 1) > Timer
.PasteExcelTable False, True, False
所以基本上,我只是在C列中用“1”覆盖每一行并将单元格粘贴在同一个Excel文件中。当所有内容都粘贴到1张(这似乎工作得很好)时,我会复制所有内容并将其粘贴到Word文件中。
虽然最初的解决方案对我来说似乎更合乎逻辑,但我终于可以继续工作了。