Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Дублирование строк на основе данных в столбцах
 
Цитата
Prosvetov написал:
Вариант через PQ

Прикрепленные файлы
Книга1.xlsx  (18.25 КБ)

Вроде бы разобрался. В вашем примере вы подключаете источник в PQ и выбираете опцию unpivot other columns, верно?
Дублирование строк на основе данных в столбцах
 
Цитата
Prosvetov написал:
Вариант через PQ

Прикрепленные файлы
Книга1.xlsx  (18.25 КБ)
Спасибо, это то, что нужно. Только не понял, как вы это сделали. Если не сложно, киньте ссылку на описание.

Цитата
Пытливый написал:
Добрый день. Если вы покажете в файле-примере как есть сейчас и как надо получить в результате (небольшой пример, строк на 10-15), то скорость подготовки правильных советов возрастет в разЫ.В текстовом режиме очень неудобно помогать.
Вот ссылка с примером:
https://docs.google.com/spreadsheets/d/1omkT6GKffhxuW-JpbbNet2CqAY7U_J8nlm_pRZYZpJc/edit?usp=sharing
Дублирование строк на основе данных в столбцах
 
Добрый день,

не могу решить такую задачу. Имеется таблица с уникальным id и некоторыми его признаками (от одного до 7). Нужно, чтобы ID продублировался, но каждый раз с одним из признаков от 1го до 7ми. Как можно это сделать? спасибо. Поиском искал, но не нашёл. Спасибо

Как есть:
ID1234567
ID1123322
ID2 2334
ID323331354553
Как должно быть:
ID1
ID1123
ID1322
ID2 2334
ID323
ID3331
ID3354553
То есть строк с ID должно быть столько же, сколько запоненых значений в колонках.
Изменено: cooltouch - 15.10.2019 01:06:56
Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
Здравствуйте,
спешу сообщить, что решил свою проблему. Изменил
Код
Set rng = .find(What:=txt, LookIn:=xlValues)
на
Код
Set rng = .find(What:=txt, LookIn:=xlValues, LookAt:=xlPart)
и ошибка ушла. Спасибо The_Prist. Видимо действительно проблема была в
Цитата
The_Prist пишет:
а то во время работы эти настройки могут быть изменены и не указывая их принудительно Вы ищите с теми параметрами, которые были установлены по время работы с листом/книгой.
Дьявол кроется в деталях. Сам я был уверен до этого, что пробовал такой вариант, так как в процессе отладки использовал миллион разных комбинаций. Оказалось, что нет.

Попутный вопрос... удален
Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
Извините, кнопка "Цитировать" у меня почему-то корректно не работает (по нажатию ничего не происходит, Chrome Версия 38.0.2125.104 m)
Отвечаю по пунктам:
Цитата
1. а если на листе Report 2 не будет найдено соответствующее значение txt, чему будет равняться rng?
Выдаёт ту же ошибку, что и в топике. Я немного ковырял в эту сторону. После повторного запуска макроса после строчки
txt = CStr(Regions(I))  добавлял MsgBox txt.
Код
txt = CStr(Regions(I))
MsgBox "txt = " txt  'Сообщение успешно отображало нужное значение. Но сам я склонен думать, что проблема где-то здесь
Set rng = .find(What:=txt, LookIn:=xlValues) 'это отрабатывает 
If rng.Value Like txt & "*" Then ' а здесь ошибка
2. Про
Код
If rng.Value Like txt & "*" Then
Это мой частный случай. На всякий случай убрал & "*", но результата это не дало. Оно и понятно, эта строчка стоит ниже строчки кода, на которой отваливается макрос.
Цитата
3. Кстати, по вопросу в первый раз находит, во второй нет: может следует явно указать по целой ячейке ищете или по части?
Опять же, это мой частный случай. Пробовал играться, но результата это не принесло.
4. Про подсказку
Код
If Not rng is nothing then
не понял. В первом моём сообщение как раз аналогичная структура.
Код
      If txt <> "Russia|B2B Partner Support" Then
      MsgBox "txt = " & txt         'для тестов
      If rng Is Nothing Then       'для тестов
      MsgBox "Nothing"       'для тестов =========>>>> срабатывает это условие. То есть переменной rng при повторном запуске не присваивается 'значение.
      Else: MsgBox "" & rng.Value   'для тестов
      End If
К сожалению, не могу выложить файл по соображениям корпоративной политики. Понимаю, что без этого проблему найти намного труднее. В любом случае, спасибо за советы. Если удастся найти проблему - отпишу.
Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
Исправил отображение. К сожалению, не могу выложить этот файл на форум. Суть в следующем:
1. Открываю файл.
2. Запускаю процедуру, которая вызывает функцию открытия другого файла. Копирую из этого файла два листа в исходный файл.

Код
Option Explicit 
Код
Option Base 1 
Код
Sub Count()
'выбираем файл отчёта и копируем листы "Report 2" и "Data"
Dim FileNameWI As String 'путь к файлу отчёта 
   FileNameWI = GetFilePath("Select WI report", , "Excel", "*.xls"                   'запрашиваем имя файла function GetFilePath
   If FileNameWI = "" Then Exit Sub                                                   'выходим, если пользователь отказался от выбора файла
   'MsgBox "You selected: " & FileName, vbInformation
   With Workbooks.Open(FileNameWI, ReadOnly:=True)                                    'копируем лист
    .Sheets("Report 2".Copy Before:=ThisWorkbook.Sheets(1)
    .Sheets("Data".Copy Before:=ThisWorkbook.Sheets(2)
    .Close
  End With
На листе "Report 2" в столбике A:A находится список неких групп. Мне необходимо для каждой такой группы создать лист в исходном файле с названием, близким к названию этой группы. Названия листов хранятся в массиве.
Код
Dim Regions As Variant
Regions = Array("имя 1", "имя 2")
а далее сам код, где возникает ошибка:
Код
Dim txt As String, rng As Range, I As Integer, n As String, ws As Worksheet
 
n = ActiveSheet.Name
For I = 1 To UBound(Regions)
    With Worksheets("Report 2").Range("A:A")
     txt = CStr(Regions(I))
     Set rng = .find(What:=txt, LookIn:=xlValues)
     If rng.Value Like txt & "*" Then      '<<<<============ Если открыть файл и сразу выполнить макрос, всё в порядке. Если запустить макрос повторно вылезет ошибка в этом месте. Если файл снова переоткрыть, макрос сработает. При повторном запуске макроса переменной rng не присваивается значение. Почему?
          Set ws = Worksheets.Add
          ws.Name = txt
          ws.Move After:=Worksheets(n)
     End If
    End With
Next I
Изменено: cooltouch - 24.10.2014 13:07:19
Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
Спасибо. Попробую сформулировать проблему понятнее. Убрал лишнее из макроса, чтобы было нагляднее
Код
Dim txt As String, rng As Range, I As Integer, n As String, ws As Worksheet

n = ActiveSheet.Name
For I = 1 To UBound(Regions)
    With Worksheets("Report 2" .Range("A:A" 
        txt = CStr(Regions(I))
        Set rng = .find(What:=txt, LookIn:=xlValues)
        If rng.Value Like txt & "*" Then         '<<<<============ Если открыть файл и сразу выполнить макрос, всё в порядке. Если запустить макрос повторно вылезет ошибка в этом месте. Если файл снова переоткрыть, макрос сработает. При повторном запуске макроса переменной rng не присваивается значение. Почему?
                Set ws = Worksheets.Add
                ws.Name = txt
                ws.Move After:=Worksheets(n)
        End If
    End With
Next I
Изменено: cooltouch - 24.10.2014 23:46:09
Run-time error '91 Object variable or With block variable not set, ошибка возникает только при повторном запуске макроса
 
Добрый день, уважаемые форумчане.

Столкнулся со следующей проблемой. Если я запускаю макрос сразу после открытия файла, в котором он содержится - всё работает как часы. Но если я его повторно запущу, то возникает ошибка: Run-time error '91 Object variable or With block variable not set' в строчке  If rng.Value Like txt & "*" Then. Вопрос: почему ошибка возникает ТОЛЬКО при повторном запуске макроса? Почему переменной rng при повторном запуске не присваивается значение? Объясните, пожалуйста.

Часть макроса, в котором появляется ошибка:

Код
Dim txt As String, rng As Range, I As Integer, n As String, ws As Worksheet
Application.ScreenUpdating = False

n = ActiveSheet.Name
For I = 1 To UBound(Regions) 
    With Workbooks("имя_файла"    .Worksheets("Report 2"    .Range("A:A"    
        txt = CStr(Regions(I))
        Set rng = .find(What:=txt, LookIn:=xlValues)
        If txt <> "Russia|B2B Partner Support" Then
            MsgBox "txt = " & txt               'для тестов
            If rng Is Nothing Then             'для тестов
            MsgBox "Nothing"          'для тестов =========>>>> срабатывает это условие. То есть переменной rng при повторном запуске не присваивается 'значение.
            Else: MsgBox "" & rng.Value   'для тестов
            End If
        Else
            Set rng = .find(What:=txt, LookIn:=xlValues, LookAt:=xlWhole)   
            MsgBox "" & rng.Address    'для тестов ===========================> здесь валится. Оно и понятно, так как rng = Nothing
        End If
        If rng.Value Like txt & "*" Then   '<=====================================или здесь
                Set ws = Worksheets.Add
                ws.Name = txt
                ws.Move After:=Worksheets(n)
        End If
    End With
Next I
Изменено: cooltouch - 24.10.2014 12:45:11
Страницы: 1
Наверх