-1

У меня есть макрос, и он работает, вроде. Проблема в том, что она захватывает абсолютную ячейку, а не динамическую ячейку. Позволь мне объяснить.

У меня есть оценочная страница, на которую я копирую данные. В одной из ячеек это будет либо A, либо B, либо C ... и т.д. Когда я записываю макрос, он захватывает абсолютные данные (например, A), когда я на вкладке A, но когда Я загружаю вкладку B, макрос вставляет "A". Так что рутина ниже. Я выделю то, что мне нужно, чтобы быть динамичным.

Sub FixColumns() ' ' FixColumns Macro '

'
    Range("A1").Select
    ActiveCell.Offset(1, 15).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=Estimating1!R[3]C[-10]"
    ActiveCell.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = **"C"**
    ActiveCell.Select
    Selection.AutoFill Destination:=ActiveCell.Range("A1:A38"), Type:= _
        xlFillDefault
    ActiveCell.Range("A1:A38").Select
    ActiveWindow.SmallScroll Down:=-45
    ActiveCell.Offset(0, -14).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=Estimating1!R[8]C[3]"
    ActiveCell.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = **"His Dressing"**
    ActiveCell.Select
    Selection.AutoFill Destination:=ActiveCell.Range("A1:A38"), Type:= _
        xlFillDefault
    ActiveCell.Range("A1:A38").Select 
    End Sub

Таким образом, в приведенном выше макросе "C" и "Его одевание" были захвачены на вкладке C, когда я записал макрос. поэтому, когда я загружаю вкладку "D", она должна захватывать "D" и "Его ванна", но это не делает этого. Он запоминает, когда я записал макрос, когда я загрузил вкладку C. Так, где это говорит ActiveCell.FormulaR1C1-"A" , мне нужно, чтобы захватить любую загруженную вкладку A/B/C/D. Я правильно объясняю это? Где написано "A" или "C" или что-то еще в макросе, должно быть динамическим на том, что ячейка на самом деле.

Вот ссылка на файл с макросом fixcolumns файл Excel с макросом fixcolumn

1 ответ1

0

Я не могу получить доступ к файлу, на который вы ссылаетесь, но я бы посоветовал вам взглянуть на Worksheet.Name чтобы получить имя листа (вкладка на вашем языке).

Затем вы можете использовать это, чтобы получить значение из столбца на этом листе.

С другой стороны, это может быть просто, что вам нужно использовать что-то вроде

With ActiveSheet
    .Range("A1:A38") = .Name
End With

Трудно увидеть без оригинальной рабочей книги.

Я бы сказал, однако, что код, который создает макрос-рекордер для такого рода операций, обычно является многословным и тупым, и что то же самое часто может быть достигнуто всего лишь несколькими строками хорошо написанного VBA.

Я ценю, что это может показаться большим шагом по сравнению с тем, где вы находитесь, но в Интернете есть большая помощь по использованию Excel VBA, поэтому, вероятно, будет полезно получить дивиденды, чтобы посмотреть на то, что вы делаете, и попытаться создать подходящий код.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .