Это отдельный вопрос, вытекающий из этого сообщения: Как использовать имя файла Excel для изменения столбца ячеек?
Я заметил, что в коде последнего поста он ссылался на определенные ячейки (J2, K2). Однако при использовании кода я столкнулся с ошибкой при изменении столбцов. Итак, теперь я ищу способ изменить приведенный ниже код, чтобы использовать имена столбцов заголовков для заполнения второго столбца вместо ссылки на конкретные ячейки. Я думаю, что единственная строка, которую действительно нужно настроить, — это строка myRng, но я предоставлю весь код, который я пытаюсь использовать для справки.
Если вы не читаете другой пост, я опишу проблему. Я пытаюсь заполнить второй столбец (имя + тип) на основе столбца «имя» и имени файла. Когда я ссылался на строку K или J в коде, все работало нормально, но когда я загружаю другой файл и позиции столбцов меняются, все портится.
Мне нужно заполнить 2-й столбец (имя + тип), чтобы он был точно таким же числом или строками, что и 1-й столбец (имя), поэтому я использую формулу Range («K2: K» и lastCell).
Есть ли способ сделать это?
Текущий код попытки VBA:
' Insert Column after name and then rename it name+type
Rows(1).Find("name").Offset(0, 1).EntireColumn.Insert
Rows(1).Find("name").Offset(0, 1).FormulaR1C1 = "name+type"
Dim myRng As Range
Dim lastCell As Long
Dim myOtherRange As Range
Dim column2Range As Range
myOtherRange = Rows(1).Find("name")
column2Range = Rows(1).Find("name+type")
lastCell = Range(myOtherRange).End(xlDown).Row
Set myRng = Range("K2:K" & lastCell)
myOtherRange.FormulaR2C1 = "=LEFT(MID(CELL(""filename""),SEARCH(""["",CELL(""filename""))+1, SEARCH(""]"",CELL(""filename""))-SEARCH(""["",CELL(""filename""))-1),5)&RC[-1]"
myOtherRange.FormulaR2C1.Select
Selection.Copy
myRng.Select
ActiveSheet.Paste
Первый проект кода VBA:
' Insert Column after name and then rename it name+type
Rows(1).Find("name").Offset(0, 1).EntireColumn.Insert
Rows(1).Find("name").Offset(0, 1).FormulaR1C1 = "name+type"
'Add the contents to the name+type column
Range("K2").Select
ActiveCell.FormulaR1C1 = "=LEFT(MID(CELL(""filename"",RC[-1]),SEARCH(""["",CELL(""filename"",RC[-1]))+1,SEARCH(""]"",CELL(""filename"",RC[-1]))-SEARCH(""["",CELL(""filename"",RC[-1]))-1),5)&RC[-1]"
Range("K2").Select
Selection.Copy
Range("K2:K8294").Select
ActiveSheet.Paste
Set myRng = Range(Cells(2,column2Range.Column),Cells(lastCell,column2Range.Column)Это, безусловно, более чистый способ сделать это, но это должно правильно установить ваш диапазон, независимо от того, в каком столбце ваше имя + заголовок типа довольно легко находится в вашем текущем коде. - person Scott Holtzman   schedule 28.06.2012lastCell = Range(myOtherRange).End(xlDown).Rowдаст вам результаты, которые вам не нравятся, если в этом столбце есть пустые ячейки до окончания набора данных. Лучше сказать это, чтобы получить истинную последнюю ячейкуlastCell = Cells(Rows.Count, Range(myOtherRange).Column).End(xlUp).Row- person Scott Holtzman   schedule 28.06.2012myOtherRange = Rows(1).Find("name"). Это потому, что переменная не является диапазоном? - person Jonny   schedule 28.06.2012.Find, чтобы увидеть, как использовать его аргументы, особенноLookAtиLookIn. - person Scott Holtzman   schedule 28.06.2012Method 'Range' of object '_Global' failed- person Jonny   schedule 28.06.2012Set myOtherRange = Rows(1).Find("name"). Также смотрите мой последний комментарий. - person Scott Holtzman   schedule 28.06.2012