我有一个vba代码,可以将值复制/粘贴到我用于作业的格式中。这一切都按预期工作,但我必须运行两次才能完美。
如何修复此问题并运行一次才能正常工作?
Sub WellLogAutomator()
Dim i As Integer
Dim n As Integer
Dim x As Integer
Dim y As Integer
n = Worksheets("Info").Range("C10:C100").Cells.SpecialCells(xlCellTypeConstants).Count
Sheets("Type Data Here").Select
Range("A1:B5").Select
Selection.Copy
For i = 1 To n - 1
ActiveCell.Offset(rowOffset:=0, columnOffset:=2).Activate
ActiveSheet.Paste
Next i
Sheets("Info").Select
Cells(10, 3).Select
For x = 0 To n - 1
Sheets("Data").Select
Cells(2, 11).Select
ActiveCell.Offset(rowOffset:=x, columnOffset:=0).Activate
Selection.Copy
Sheets("Type Data Here").Select
Cells(1, 2).Select
ActiveCell.Offset(rowOffset:=0, columnOffset:=2 * x).Activate
ActiveCell.PasteSpecial Paste:=xlPasteValues
'ActiveSheet.PasteSpecial Paste:=xlPasteValues
Next x
Sheets("Data").Select
Range("H2:H65").Select
Selection.Copy
Sheets("Data").Select
Range("I2:I65").Select
ActiveCell.PasteSpecial Paste:=xlPasteValues
With Selection
.NumberFormat = "General"
.Value = .Value
End With
End Sub
答案 0 :(得分:-1)
试试这个,它将使用计数器运行你的代码两次:
Sub WellLogAutomator()
Dim i As Integer
Dim n As Integer
Dim x As Integer
Dim y As Integer
Dim counter as Integer
counter = 0
DoAgain:
n = Worksheets("Info").Range("C10:C100").Cells.SpecialCells(xlCellTypeConstants).Count
Sheets("Type Data Here").Select
Range("A1:B5").Select
Selection.Copy
For i = 1 To n - 1
ActiveCell.Offset(rowOffset:=0, columnOffset:=2).Activate
ActiveSheet.Paste
Next i
Sheets("Info").Select
Cells(10, 3).Select
For x = 0 To n - 1
Sheets("Data").Select
Cells(2, 11).Select
ActiveCell.Offset(rowOffset:=x, columnOffset:=0).Activate
Selection.Copy
Sheets("Type Data Here").Select
Cells(1, 2).Select
ActiveCell.Offset(rowOffset:=0, columnOffset:=2 * x).Activate
ActiveCell.PasteSpecial Paste:=xlPasteValues
'ActiveSheet.PasteSpecial Paste:=xlPasteValues
Next x
Sheets("Data").Select
Range("H2:H65").Select
Selection.Copy
Sheets("Data").Select
Range("I2:I65").Select
ActiveCell.PasteSpecial Paste:=xlPasteValues
With Selection
.NumberFormat = "General"
.Value = .Value
End With
If counter = 0 then
counter = counter + 1
goto DoAgain
else
exit sub
end if
End Sub