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

Страницы: 1
Заполнение таблицы маской
 
Казанский,большое спасибо, теперь понял
Заполнение таблицы маской
 
Казанский, БМВ, большое спасибо, про выделить столбец F5-выделить, раньше не знал
Сейчас корректно определился диапазон, но ошибка 1004 на 16 строке осталась. Сваливаюсь в дебаг, выделяю таблицу которую нужно заполнить и тогда все нормально заполняется дальше. Я так понимаю Excel не понимает с какой книгой я работаю, хотя она явно указывается в форме.
Заполнение таблицы маской
 
БМВ, пробовал ставить xlCellTypeLastCell , но считывает только первую строку
В дальнейшем вместо цифр в 3 столбце будут слова, поэтому вариант числовой константы не подходит.
Для меня странно то что эта же конструкция перебора диапазона отлично работает в других моих скриптах, а тут нет...
Заполнение таблицы маской
 
Здравствуйте, написал скрипт со следующей логикой. Пользователь открывает свою таблицу (test во вложении), затем открывает файл со скриптом, запускается форма в которой он выбирает нужный документ (test). нажимает выполнить и таблица test заполняется готовой маской в зависимости от того какие значения в 3 и 9 столбцах. Проблема в том, что на рабочем компьютере вываливается ошибка 1004, а на домашнем Excel просто зависает. На сколько я понял проблема в определении диапазона. Подскажите, где может быть ошибка?
Код
For Each Tcell In wb.Worksheets(1).Columns(3).SpecialCells(xlVisible)
Перекрестный выбор в двух ComboBox
 
Здравствуйте, вопрос в следующем, есть 2 ComboBoxа заполненных двумя параллельными столбцами таблицы. если (пример во вложении) выбрать во втором ComboBox2 значение то должно выбраться соответствующее ему (по порядку) значение в первом ComboBox1. Сейчас у меня это работает, но при изменении второго вызывается событие Change первого и выполняется весь его код, можно ли просто указывать его listIndex без вызова события Change?
Видимый диапазон в ListBox
 
Dima S, вы правы, спасибо за ответ
В результате переписал все в виде функции, заполнить listBox видимыми ячейками без цикла так и не вышло.
Видимый диапазон в ListBox
 
Почему-то заполнение массива выдает ошибку subscript out of range. что я делаю не так?
Код
Sub Filling()
Dim arrKP() As Variant
Dim Rcnt As Range
For Each Rcnt In Worksheets("TKP").Columns(2).SpecialCells(xlVisible)
    arrKP(Rcnt.Row - 1) = Rcnt.Value
Next
End Sub
Видимый диапазон в ListBox
 
Юрий М, Михаил С., была такая идея, думал может получится обойтись без цикла)
Раз так будем делать цикл, спасибо за ответ!
Видимый диапазон в ListBox
 
Добрый вечер! Подскажите каким способом лучше поместить видимые ячейки столбца после фильтрации в ListBox? Использую умные таблицы.
Код
Me.Tag_List.List = Application.Transpose(Worksheets("TKP").Range("B2", "B" & (Cells(Rows.Count, 1).End(xlUp).Row)))
Попробовал так, но вылетает ошибка application defined or object defined error
Код
Me.Tag_List.List = Worksheets("TKP").Columns(2).SpecialCells(xlVisible).Value
так тоже ошибка...  
Удаление повторяющихся столбцов (по значению в ячейках одной строки) - какой способ быстрее?
 
Юрий М, Да, осечка с названием, думал он будет оптимален, оказалось не так
Удаление повторяющихся столбцов (по значению в ячейках одной строки) - какой способ быстрее?
 
БМВ, ну если ~5000 столбцов это не много, то рассмотрю и другие методы
Цитата
БМВ написал:
основное время уйдет на удаление столбцов если UNION не прокатит
А что Columns(A).Delete будет медленно работать?
Удаление повторяющихся столбцов (по значению в ячейках одной строки) - какой способ быстрее?
 
У меня в голове есть примерный алгоритм
В цикле заносить по одной ячейке в словарь, и так как в нем не могут повторяться ключи, то при добавлении повторяющегося слова он даст об этом знать, следовательно удалить этот столбец. Но как это реализовать не особо понимаю. Как сделать так чтобы скрипт среагировал на это...
Удаление повторяющихся столбцов (по значению в ячейках одной строки) - какой способ быстрее?
 
БМВ, например в первой строке с A1 по CL1 в каждой ячейке есть слова "Яблоки"; "Груши"; "Бананы"; "Яблоки"; "Сливы"; и тд
Нужно убрать все повторения, в данном случае Яблоки 2 раза, нужно оставить только одно слово Яблоки, остальные удалить.
Юрий М, нужен скрипт
Hugo, Если так, то буду рад примеру.
Забыл сказать что если в какой-то колонке находится повторяющееся значение, нужно удалить всю эту колонку.
Удаление повторяющихся столбцов (по значению в ячейках одной строки) - какой способ быстрее?
 
Добрый день, как лучше всего искать повторяющиеся значения в ячейках одной строки? Количество ячеек в строке меняется. Искал методы, понял что быстрее всего будет работать словарь. Но не совсем понимаю как это реализовать.
csv разделители строк кавычки, Сохранение csv в кавычках
 
Добрый день, столкнулся с такой же проблемой, нужно чтобы в csv файле с разделителем точка с запятой (;) данные были в кавычках, например "1, 2, 3";"1, 2, 3";"итд"
пробовал соединять строки с Chr(34), в результате получаю по 3 двойных кавычки с каждой стороны """1, 2, 3""";"""1, 2, 3""";
Также пробовал приведенный здесь скрипт, но данные с листа после него заменяются на две кавычки
Код
Sub save(bn As String) 'bn имя и путь моего csv файла
Dim r As Range, c As Range, s As String
Open bn For Output As #1
For Each r In ActiveSheet.UsedRange.Rows
   s = ""
   For Each c In r.Cells
       s = s & ";" & """" & c & """"
   Next
   Print #1, Mid$(s, 2)
Next
Close #1
End Sub
Как поместить таблицу в переменную для сохранения в csv utf-8
 
sokol92, спасибо, это работает,  но думал можно сразу перекодировать текст и только потом сохранить
Как поместить таблицу в переменную для сохранения в csv utf-8
 
sokol92, да благодарю за ответ, думал правильней будет создать новую тему. 2.6. Один вопрос - одна тема.
этот код как раз из вашей ссылки.
Вернее из ссылки в той теме на которую вы указали
В той теме был код перекодировки уже закрытого файла, я подумал логичнее сразу изменить кодировку текста и только потом сохранять файл, я ошибаюсь?
Изменено: Neyrovision - 30.08.2018 16:51:08
Как поместить таблицу в переменную для сохранения в csv utf-8
 
Добрый день! Есть скрипт который парсит данные из одной таблицы в другую. Вторую таблицу нужно сохранить в csv utf-8 , с помощью SaveAs так не получается.
Нашел код который сохраняет текст с помощью библиотеки ADO. Вопрос в том как поместить уже сформированную таблицу в поток?
Код
Public oWb As Workbook
Public newWb As Workbook
Public TUrng As Integer
Public avFiles
Sub Main()
    
Dim FSName
Set oWb = Application.Workbooks.Open(avFiles)
Set newWb = Workbooks.Add
<<<<<< Запись данных в таблицу newWb >>>>>>
filename$ = ActiveWorkbook.Path & "MyFile.csv"
                            'newWb.SaveAs filename:="MyFile.csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True
newWb.Close False
oWb.Close False

If SaveTextToFile(txt$, filename$) = True Then
MsgBox "UTF-8"
Else
MsgBox "Windows-1251"
End If

'--------------------------------------------------------------------------------------------------------------------------------------
Function SaveTextToFile(ByVal txt$, ByVal filename$) As Boolean
    On Error Resume Next: Err.Clear

            With CreateObject("ADODB.Stream")
                .Type = 2: .Charset = "utf-8": .Open
                .WriteText txt$
                .SaveToFile filename$, 2
                .Close
            End With
 
    SaveTextToFile = Err = 0: DoEvents
End Function
Сохранение таблицы в CSV
 
Спасибо за помощь, сейчас сделал так, кавычки убрались и вместо запятых- точки с запятой, все как надо
Код
FSName = Application.GetSaveAsFilename

newWb.SaveAs FileFormat:=xlCSVMSDOS, CreateBackup:=False, local:=True
newWb.Close false
oWb.Close False
Но выяснилась проблема с кодировкой, кирилица отображается не верно, нужно сохранять в UTF-8, видимо придется переделывать сохранение...
Изменено: Neyrovision - 29.08.2018 17:54:13
Сохранение таблицы в CSV
 
Испробовал разные комбинации сохранения файлов
Записал скрипт через запись макросов, все равно это отличается от ручного сохранения
Есть ли другие методы сохранения файла?
Код
FSName = Application.GetSaveAsFilename

newWb.SaveAs Filename:=FSName, FileFormat:=xlCSV, CreateBackup:=False
newWb.Close True
Изменено: Neyrovision - 29.08.2018 13:42:18
Сохранение таблицы в CSV
 
ПО в которое буду импортировать этот CSV не поймет, нужно именно точка с запятой и без кавычек.
Когда сохраняю в ручную то все как надо, а через скрипт по другому
Сохранение таблицы в CSV
 
Код
"1,2,3,4","1,2,3,4","1,2,3,4"  'сохраняет CSV с разделителем запятая, вместо точки с запятой и появились кавычки, если отрывать в Notepad++

1,2,3,4;1,2,3,4;1,2,3,4        'должно быть так
Изменено: Neyrovision - 29.08.2018 11:54:05
Сохранение таблицы в CSV
 
так и есть, файл со скриптом, это отдельный файл, файл из которого беру данные и в который сохраняю, это все разные файлы.
Сейчас попробовал заменить activeworkbook на newWb, кажется заработало как надо, но почему то файл CSV в разных кодировках..
Сохранение таблицы в CSV
 
Добрый день, есть макрос, который открывает один файл, и создает второй, парсит в него данные и сохраняет второй файл в формате CSV.
Проблема в том что после диалога выбора имени и места сохранения файла newWb, это имя присваивается не ему, а файлу в котором работает скрипт. Как сослаться именно на нужный файл?
Код
Public oWb As Workbook
Public newWb As Workbook
Public WsCnt As Integer
Public iColF As Integer
Public TUrng As Integer
Option Base 1


Sub Main()
    
Dim i As Integer, j As Integer, k As Integer, iColNum As Integer, iHollow As Integer    'счетчики

Dim FSName

Set newWb = Workbooks.Add                                       'создание новой Книги
Application.WindowState = xlMinimized

<<<< Парсим данные из oWb в newWB >>>>

Application.Visible = True
Application.StatusBar = True

    FSName = Application.GetSaveAsFilename(fileFilter:="Text Files (*.csv), *.csv")

    ActiveWorkbook.SaveAs Filename:=FSName, FileFormat:=xlCSV, CreateBackup:=False   '<<<---------на этом этапе после выбора имени и расположения файла
                                                                                                  имя присваивается не файлу newWb, а Файлу скрипа        

newWb.Close True
oWb.Close False
Application.Visible = False
Application.StatusBar = False
UserForm1.Show
------------------------------------------------------------UserForm1-----------------------------------------------------------------------
Sub Command_Open_Click()
Dim avFiles

    avFiles = Application.GetOpenFilename _
                ("Excel files(*.xls*),*.xls*", 1, "Âûáðàòü Excel ôàéëû", , False)
    If VarType(avFiles) = vbBoolean Then
        Exit Sub
    End If
    TextBox1.Text = avFiles

'Application.WindowState = xlMinimized
Set oWb = GetObject(avFiles)
End Sub
Изменено: Neyrovision - 29.08.2018 11:00:36
Option Base 1, но массив с нуля
 
Дмитрий(The_Prist) Щербаков, ivanok_v2, Спасибо за разъяснение
То есть даже если я жестко задам arrPA(1 to 4) то Split все равно сделает Redim с нуля?
Option Base 1, но массив с нуля
 
Может быть из-за Split
Option Base 1, но массив с нуля
 
Добрый день!
Выставил в модуле Option Base 1, во всех процедурах этого модуля массивы  инициализируется  с 1, но в третьей массив arrPA с нуля.
Код
Public oWb As Workbook
Public newWb As Workbook
Public WsCnt As Integer
Public iColF As Integer
Option Base 1


Sub Main()
    
Dim i As Integer, j As Integer, k As Integer, iColNum As Integer, iHollow As Integer    'счетчики
iColNum = 1                                                     'номер колонки OutputTable
Dim FSName

Set newWb = Workbooks.Add  
.......<Код>........      
End Sub
'--------------------------------------------------------------------------------------------Третья процедура--------------------------------------------
Sub TRI(j As Integer, iColNum As Integer)
Dim sID As String, sNumPNA As String, sQtPNA As String
Dim arrPA() As String
Dim CountPNS1 As Integer, CountPNS2 As Integer, count As Integer
CountPS1 = 0
CountPS2 = 0
count = 0
sNumPS = oWb.Sheets(WsCnt).Cells(j + 1, iColF + 1).Value
arrPA() = Split(sNumPS, ",")                                      '
If UserForm1.iT = 1 Then                                           '

    sID = "1,2"
    For count = LBound(arrPA) To UBound(arrPA)

        If arrPA(count) >= 5 And arrPA(count) <= 9 Then           '
            CountPS1 = CountPS1 + 1
        ElseIf arrPA(count) >= 11 And arrPA(count) <= 12 Then     '
            CountPS2 = CountPS2 + 1
        End If
    Next count
        sQtPA = CountPS1 & "," & CountPS2
        newWb.Sheets(1).Cells(7, iColNum).Value = sQtPA            '
        sID = "1,2"

ElseIf UserForm1.iTU = 2 Or UserForm1.iTU = 3 Then                  '
    newWb.Sheets(1).Cells(7, iColNum).Value = oWb.Worksheets(Wshcnt).Cells(j, iColFind + 1).Value
    sID = "1"
End If

newWb.Sheets(1).Cells(6, iColNum).Value = sPNSID                    '


End Sub
Изменено: Neyrovision - 28.08.2018 15:03:49
Не работает маска
 
оказалось что проблема в обьединенных ячейках, Find не ищет по ним
Не работает маска
 
маску знаю, сам ее и написал, проблема в Find
Не работает маска
 
Необходимо сделать поиск по маске "*.*.*.*" , например 2.1.1.1 , 6.2.3.793 и тд
Опробовал разные варианты, но ищет все подряд, или не ищет совсем, в чем может быть ошибка?
Скрипт должен искать строки по такой маске и если находит, то перекидывать в OutputTable
Изменено: Neyrovision - 29.08.2018 13:52:20
Страницы: 1
Наверх