У меня проблема. На моей работе мы часто получаем таблицы с указанием местоположения. Нам нужно разложить каждое из мест на разные рабочие листы. Потому что тогда мы перечисляем близлежащие предприятия для рекламы. Это не было большой проблемой, когда нам давали электронные таблицы с 5 местоположениями, но совсем недавно мы получали листы с более чем 100 местоположениями на одном листе.

Я хочу сделать функцию, которая принимает данную строку, принимает первое значение и превращает ее содержимое (номер местоположения) в новый лист. Скопируйте эту строку на лист, названный для нее, и вставьте ее. Это мой текущий код. У меня проблемы с "Несоответствие типов" и "Требуется объект". Есть предложения по этим вопросам?


Sub TestRowThree()
    Dim row As Integer
    row = 3
    CopyRow (row)
End Sub

Sub CreateNewSheet(strName As String)
    Sheet.Add.Name = strName
End Sub

Sub CopyRow(rowNum As Integer)
    Dim mainSheetName As String
    mainSheetName = ActiveWorkbook.ActiveSheet.Name
    Dim newSheetName As String
    newSheetName = Sheets(mainSheetName).Range("$A$" & rowNum).Value
    Sheets(mainSheetName).Select
    Range("A" & rowNum & ":H" & rowNum).Cut
    CreateNewSheet (newSheetName)
    Sheets(newSheetName).Select
    Range("A" + rowNum + ":H" + rowNum).Select
    ActiveSheet.Paste
End Sub

1 ответ1

0

Нашел несколько небольших, но важных ошибок в коде.

  1. В "CreateNewSheet" Sheet должен был быть Sheets Sheet не ссылался ни на что, следовательно ошибка "Требуется объект"
  2. При выборе нового диапазона для вставки я ошибочно использовал + вместо & Yielding моего несоответствия типов. Примечание. После того, как я смог выполнить свой код, я понял, что копирую их в исходную строку "Скорее раздражает". Исправил это путем копирования в ту же строку.

Я разместил мой измененный код ниже.


Sub TestRowThree()
    Dim row As Integer
    row = 3
    CopyRow (row)
End Sub

Sub CreateNewSheet(strName As String)
    Sheets.Add.Name = strName
End Sub

Sub CopyRow(rowNum As Integer)
    Dim mainSheetName As String
    mainSheetName = ActiveWorkbook.ActiveSheet.Name
    Dim newSheetName As String
    newSheetName = Sheets(mainSheetName).Range("$A$" & rowNum).Value
    Sheets(mainSheetName).Select
    Range("A" & rowNum & ":H" & rowNum).Copy
    CreateNewSheet (newSheetName)
    Sheets(newSheetName).Select
    Range("A1:H1").Select
    ActiveSheet.Paste
End Sub

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