Вы не можете «поднять» существующий процесс. Повышенные процессы в UAC имеют различный токен с другим LUID, другим обязательным уровнем целостности и различным членством в группе. Этот уровень изменений не может быть выполнен в текущем процессе - и это будет проблемой безопасности, если это может произойти.
Вам нужно запустить второй процесс, который будет работать, или создав COM-объект, который работает в повышенном dllhost.
http://msdn.microsoft.com/en-us/library/bb756922.aspx дает пример функции «RunAsAdmin» и функция «CoCreateInstanceAsAdmin».
EDIT: Я только что увидел «Delphi» в вашем названии. Все, что я перечисляю, очевидно, является родным, но если Delphi предоставляет доступ к функциям, подобным ShellExecute, вы должны иметь возможность адаптировать код из ссылки.
Вместо Delete
вы можете использовать Clear
или, если вы хотите сохранить форматирование ниже последней строки, вы можете использовать ClearContents
.
Option Explicit
Sub DelRows()
Const cSheet As Variant = "Sheet1" ' Worksheet Name/Index
Const cColumn As Variant = "G" ' Cirteria Column Letter/Number
Dim lastR As Long ' Last Row
With ThisWorkbook.Worksheets(cSheet)
lastR = .Cells(.Rows.Count, cColumn).End(xlUp).Row
.Range(.Cells(lastR + 1, 1), .Cells(.Rows.Count, 1)).EntireRow.Delete
End With
End Sub