#excel #vba
#excel #vba
Вопрос:
Возникли небольшие проблемы с некоторым кодом. Я в основном хочу копировать и вставлять значения на основе ячейки заголовка столбца (статус высокого уровня), чтобы избавиться от присутствующих формул. Код приведен ниже
With ActiveWorkbook
With Worksheets(1)
For i = 20 To 1 Step -1
If cells(1, i) = "High Level Status" Then
.cells(1, i).EntireColumn.Copy
.cells(1, i).EntireColumn.PasteSpecial Paste:=xlPasteValues
End If
Next i
End With
End With
когда я запускаю код, он запускается без сообщений об ошибках, но не выполняется, как указано. Есть идеи, почему?
Комментарии:
1. На самом деле вы не ссылаетесь на
With ActiveWorkbook
иWith Worksheets(1)
.2. Ожидали ли вы, что этот код будет зацикливаться?
3. Я думаю, вам нужно добавить префикс with . При использовании с / End . Он должен читать .worksheets (1) и .cells (1, I)
4. проверенное решение. спасибо @ChrisKiniry
Ответ №1:
Назначение значений
Быстрое исправление
Option Explicit
Sub assignValuesQF()
Dim j As Long
With ActiveWorkbook.Worksheets(1)
For j = 20 To 1 Step -1
If .Cells(1, j) = "High Level Status" Then
With .Columns(j)
.Value = .Value
End With
End If
Next j
End With
End Sub
Более эффективно
Sub assignValues()
With ActiveWorkbook.Worksheets(1)
Dim j As Long
For j = 20 To 1 Step -1
If .Cells(1, j).Value = "High Level Status" Then
Dim LastRow As Long
LastRow = .Cells(.Rows.Count, j).End(xlUp).Row
' No need to paste values for header (Resize, Offset).
With .Cells(1, j).Resize(LastRow - 1).Offset(1)
.Value = .Value
End With
Exit For ' you have found it, no need to loop anymore.
End If
Next j
End With
End Sub