Я написал следующие строки кода в VBA, и я новичок в VBA.
Sub move_content()
'declaration
Dim srcrow, srccol, destrow, destcol As Integer
Dim lastrow As Long
'intialization
srcrow = 4 ' source row
srccol = 7 ' source column
destrow = 3 ' destination row
destcol = 8 ' destination column
'finding out the last row in the data - Column G has the data
lastrow = Cells(ActiveSheet.Rows.Count, "G").End(xlUp).Row
For i = 1 To lastrow
'Cut the contents of the source cell
Cells(srcrow, srccol).Select
Selection.Cut
'paste the contents in destination cell
Cells(destrow, destcol).Select
ActiveSheet.Paste
'Delete the entire row after the cut-paste operation
Rows(srcrow).EntireRow.Delete
srcrow = srcrow + 1
' If the next source cell is blank exit for loop
If Cells(srcrow, srccol).Value = "" Then
Exit For
End If
destrow = destrow + 1
i = i + 1
Next
End Sub
Я помню, как кто-то говорил мне, что я должен включить проверку ошибок в свои процедуры. Я не понимаю, что мне нужно делать.
Примечание. Код выполняется и выполняет то, для чего предназначен
microsoft-excel
vba
Prasanna
источник
источник
<!-- language: lang-vbs -->
в начале своего кодаОтветы:
Обработка ошибок в VBA, к сожалению, не так грациозна, как могла бы быть. Там, где большинство языков генерируют исключения, которые могут быть перехвачены с помощью
try
...catch
блоков, в VBA нет ничего более изящного.Просматривая ваш код, вы обнаружите, что точек сбоев не так много, поэтому вам не нужно слишком беспокоиться об обработке ошибок. Однако к обработке ошибок можно подойти одним из двух способов:
или же
On Error Goto ...
функции, переходя к указанной метке или номеру строки. Например:В случае возникновения ошибки она переходит к вашему обработчику ошибок и в этом случае отображает окно сообщения об ошибке, не прерывая отладчик.
On Error Resume Next
делает именно то, что говорит - если в строке выдается ошибка, она просто пропускает ее и продолжает. В зависимости от того, чего вы пытаетесь достичь, это поведение может быть полезным, например, если вы просто хотите проверить, существует ли что-то в массиве, вы можете вернуться,true
если это произойдет, иfalse
если выдается ошибка.Чтобы сделать эту обработку ошибок полезной, вам действительно нужно абстрагировать разные ее части в более мелкие подпрограммы, чтобы вы могли правильно обрабатывать каждый тип ошибки.
С точки зрения простой проверки на ошибки, обычно
IF .. THEN
можно использовать операторы для проверки того, что значения введены так, как ожидается сценарием. Например, вы можете захотеть иметь,IF ... THEN
чтобы убедиться, что srccol, srcrow, destcol и destrow все выше 0, чтобы быть действительными. Простая проверка, такая как:удостоверится, что ошибок не было допущено, прежде чем пытаться выполнить и, возможно, вывести ошибку для обработки.
В дополнение к вашему коду, вам не нужно вырезать и вставлять, вы можете просто сделать что-то вроде:
Дальнейшее чтение:
В заявлении об ошибке
Err Object
источник