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

Страницы: 1 2 3 4 5 6 7 8 9 След.
Вертикальное и горизонтальное отражение
 
Ув. gling, спасибо. Ваш вариант работает вообще без торможения, но это все же диапазон, а не вся строка или столбец... Но возможно, что так тоже получится, буду думать в этом направлении. Еще раз спасибо!
Вертикальное и горизонтальное отражение
 
Ув. БМВ, спасибо. Вставил DoEvents - притормаживает, но в целом все идет значительно быстрее.
Вертикальное и горизонтальное отражение
 
Спасибо за ответы!

Вот собственно сам файл. В нем два первых макроса.

Ув. asesja, в этом случае мне прийдется каждый раз корректировать макрос.

У меня есть картинка, сделанная разноцветными ячейками. Мне нужно ее, например:

1 перевернуть;
2 сделать серой
3 а ячейки, изначально раскрашенные в разные цвета, отделить друг от друга границами.

Со второй и третьей задачей справляется третий макрос. А вот первая (точнее ее реализация) - вызывает торможение.
Изменено: vadi61 - 17.02.2025 22:44:49
Вертикальное и горизонтальное отражение
 
Ув. БМВ, спасибо за ответ.

К сожалению тормозит так же, но только из-за ScreenUpdating = False не отображает процесс. Проверил на двух компьютерах с разными офисами (2013 и 2019)
Вертикальное и горизонтальное отражение
 
Добрый день!
У меня есть рисунки сделанные с помощью закрашенных ячеек. Иногда мне нужно какой-нибудь рисунок изобразить либо слева-направо или вверх "ногами". Я написал два коротюсеньких макроса, которые работают:
Код
Sub HorizontalSpiegeln()
For i = 1 To 20
    With Worksheets("buch 1")
        .Columns(i).Select
        Selection.Copy
        .Cells(1, 45 - i).Select
        .Paste
    End With
Next i
End Sub

Sub VertikalSpiegeln()
For i = 1 To 20
    With Worksheets("buch 1")
        .Rows(i).Select
        Selection.Copy
        .Cells(45 - i, 1).Select
        .Paste
    End With
Next i
End Sub
НО, после быстрого прохождения первых 6 - 7 строк или 6 - 7 столбцов Excel начинает сильно тормозить.

Что у меня в макросе не так?
Почему не срабатывает ScreenUpdating = False
 
Попробую завтра...
Почему не срабатывает ScreenUpdating = False
 
Hugo, спасибо за ответ и за то, что потратили на меня время. У меня на Office 2013 мелькает курсор. Не сильно, очень кратковременно, но мелькает. Во всяком случае я это вижу. Попробую завтра на другом Excel.
Почему не срабатывает ScreenUpdating = False
 
Hugo, спасибо, что откликнулись. Ничего у меня ниже по коду нет ...

Вот файл.
Почему не срабатывает ScreenUpdating = False
 
Добрый день!
у меня есть есть несколько диапазонов из 4-х ячеек, в которые по клику ставятся крестики. В каждом диапазоне может быть только один крестик. Поэтому я сначала очищаю диапазон, а потом в нужную ячейку вношу крестик. Все работает, мелькает (как я понимаю при очищении ячеек)

Как это можно исправить? Или причина в чем-то другом?

Вот макрос:
Код
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim i As Integer
        Dim r As Integer
       
        If Target.Cells.Count > 1 Then Exit Sub
            ActiveSheet.Unprotect Password:=""

            If Not Intersect(Target, Range("C11:F11", "C12:F12")) Is Nothing Then
                r = Target.Row

                If Target = vbNullString Then
                    i = 0
                Else
                    i = 1
                End If

                Application.ScreenUpdating = False
                
                For Each Z In Range(Cells(r, 3), Cells(r, 6))
                    Z.Value = vbNullString
                Next
                
                Application.ScreenUpdating = True

                Target.Font.Name = "Wingdings 2"
                If i = 0 Then
                    Target = "Ð"
                Else
                    Target = vbNullString
                End If
            End If

             ActiveSheet.Protect Password:=""
Как разорвать связь Word-файла с таблицей Excel, создавшей этот файл
 
ув. andypetr, Спасибо, помогло!
Как разорвать связь Word-файла с таблицей Excel, создавшей этот файл
 
Добрый день!

Создаю Word-документ макросом из Excel-файла. Мне надо просто проверить правописание, после чего закрыть Word-файл без сохранения.

Файл создается. Но, после того, как я с ним поработал и хочу закрыть он сначала выдает запрос на сохранение, а когда я говорю "не сохранять" он пишет, что файл используется другим приложением или пользователем и в скобках пишет путь к Normal.dotm. Можно ли сделать так, чтобы этот созданный файл закрывался без запроса на сохранение или (если с запросом), чтобы по нажатию "не сохранять" он закрылся.

Вот текст макроса:

Код
Sub WordCreate()
    'On Error Resume Next

    Dim WordApp As Object
    Dim WordDoc As Object
    Dim ExcelTable As Range
    
    Dim i As Integer                       
    Dim Pos_Massnahme() As String          
    
    
    i = Sheets(ActiveSheet.Name).Cells(2, 2).Value
    
    
    Set ExcelTable = ThisWorkbook.Sheets("VD-LN").Range(Cells(8, 5), Cells(8 + i, 5))

    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True 

    Set WordDoc = WordApp.Documents.Add

    ExcelTable.Copy
    WordApp.Selection.PasteExcelTable LinkedToExcel:=False, WordFormatting:=False, RTF:=False

    Application.CutCopyMode = False

    Set WordDoc = Nothing
    Set WordApp = Nothing          
End Sub
Ошибки при копировании листов книги
 
ув. Sanja, спасибо Ваши советы сработали. Почему-то квадратные скобки ему не понравились
Ошибки при копировании листов книги
 

Добрый день!

Подскажите в чем ошибка.

Копирую два листа активной книги в новую:

Код
HomeDir = ThisWorkbook.Path
file_Prefix_name = "/2023-09-28"
file_name = HomeDir & file_Prefix_name & " VD-TestFile.xlsx"

Worksheets(Array("1 One", "2 Two")).Copy
With ActiveWorkbook
    .SaveAs Filename:= file_name
    .Close SaveChanges:=False
End With

Все работает. Теперь 2 проблемы.

Первая возникает на строке

Код
Worksheets(Array("1 One", "2 Two")).Copy

когда я скрываю копируемые листы. Пишет, что не может осуществить метод копирования.

Вторая – в строке

Код
.SaveAs Filename:= file_name 

если я вместо

Код
file_name = HomeDir & file_Prefix_name & " VD-TestFile.xlsx"

пишу

Код
file_name = HomeDir & file_Prefix_name & " VD-Newton, Isaac [130552].xlsx"

Пишет, что нет доступа к файлу.

Как мне избежать этих ошибок?
убрать предупреждение о персональных данных, как его убрать при сохранении
 
Спасибо!
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
ув. sokol92, ув. Marat Ta,спасибо ребята!!
Как все просто, когда знаешь. Мне теперь даже и именованные диапазоны удалять не надо, поскольку в диспетчере имен их нет изначально. Здорово!!

Пока не понял, что делает SaveData = False. Попробовал, вроде не на что не влияет. Диапазоны и подключения убирает . Delete
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
ув. sokol92, Спасибо, а как это сделать макросом, не подскажите?

Я сейчас удаляю только имена диапазонов, которые присваиваются автоматически при загрузке таблиц:
Код
Dim nName As Name

For Each nName In ActiveWorkbook.Names
    nName.Delete
Next nName

А как удалить подключения?
Изменено: vadi61 - 07.03.2021 15:47:48
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
Цитата
Marat Ta написал:
Думайте в этом направлении.
Буду думать. Во всяком случае появилась "зацепка". Спасибо, большое
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
Цитата
New написал:
Вот такой код
Да, спасибо. Действительно лишняя строка.

Спасибо, что ищете решение, но я уже исправил код записи в файл, так что все работает. Но вопрос остается: ПОЧЕМУ? это происходит из-за увеличения длины строки в текстовом файле.
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
Цитата
New написал:
Почему кнопки из-за этого уезжают правее - не знаю
Вот и я не знаю... Причем, алгоритм записи в файл в 9 случаях из 10 выдает правильный результат, а один раз вот такое удлинение. Но с алгоритмом я разберусь. Мне не ясно каков механизм влияния на смещение кнопок внутри Excel'я. Задача-то тривиальная строки с разделителями переносятся в Excel-таблицу. И какая разница сколько полей предопределено текстовым файлом.
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
Marat Ta, я так и делаю. Я просто для примера все выбросил оставил только ту часть, которая выдавала не то что хотелось.
На самом деле Excel файл только показывает расшифрованное содержимое текстового файлы, а в случае добавления записи - зашифровывает и сохраняет уже зашифрованный текст в текстовом файле (видимо при этой записи в файл у меня и ошибка - сейчас проверяю где именно). Сам же Excel ничего в Excel-файлах не сохраняет - он пустой.
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
Marat Ta,  спасибо за ответ! Да что-то очень длинно получилось. Проверю процедуру записи в файл.

Add. Но все равно не понятно, как длина (количество ячеек) может сдвигать кнопки
Изменено: vadi61 - 06.03.2021 21:52:12
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
Добрый день!
Подскажите если знаете в чем кроется причина. Макрос загружает из текстового файла, в котором поля разделены точкой с запятой, таблички на листы Excel. Макрос для всех листов один и тот же. Текстовые файлы однотипные. Ну текст он и в Африке текст...
Так вот, на одном листе все загружается нормально, а на другом, вроде как добавляются колонки слева, в которые и происходит запись (это видно по кнопкам, которые уезжают вправо).

Для примера удалил все, что можно. Оставил только сам макрос (который был записан средствами Excel, с последующими незначительными изменениями).
В файле два листа, на каждом кнопка "загрузить".Лист test1 грузит из файла test1.txt,  а лист test2 - из файла test2.txt (имена листов соответствуют названию файлов) с test2 все нормально, a test1 глючит.

Прикладываю сам excel файл и ещё оба текстовых файла - все должны лежать в одной папке.
Да, в текстовых файлах текст - это просто символы юникода, поскольку текстовое (читаемое) содержимое должно быть зашифровано.
Сам макрос:
Код
Dim file_name As String

file_name = ThisWorkbook.Path & "\" & ActiveSheet.Name & ".txt"
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & file_name, Destination:=Range("$A$4:$N$100"))
    .Name = "Vertragsansicht_1"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = False
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 65001
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = True
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

Вот, собственно и все. Ума не приложу в чем дело...
Как выбрать из массива случайным образом уникальные значения
 
ув. Kuzmich,  я вот так Вашим кодом воспользовался:
Код
Sub tt2()
   Dim i As Integer
   Dim max As Integer
   Dim r As Integer
   Dim sl: Set sl = CreateObject("Scripting.Dictionary")
   max = WorksheetFunction.CountA(Sheets("Main").Columns(1))
   Randomize
   i = 1
   With Sheets("Main")
   Do
      r = Int(Rnd * max + 1)
      If Not sl.exists(r) Then
         .Cells(i, 2).Value = .Cells(r, 1)
         .Cells(i, 3).Value = r
         sl.Add r, 1
         i = i + 1
      End If
   Loop While sl.Count < 5
   End With
   'Set sl = Nothing

End Sub

Вроде все работает.
Изменено: vadi61 - 14.12.2020 01:53:18
Как выбрать из массива случайным образом уникальные значения
 
Цитата
Kuzmich написал:
оно заносится в соответствующую ячейку
Спасибо, понял и так пять раз. Есть 3 вопроса.
1. А зачем массив, можно же непосредственно с колонкой А работать? Я читал, что Excel массивы обрабатывает быстрее, но сначала все скопировать в массив (а там может быть от 2000 слов и выше), а потом из него выбирать... и все из-за 5 выбранных слов?
2. Вы в конце пишете Set sl = Nothing. Как я понимаю - освобождаете память. А что при закрытии файла память не освобождается?
3. Вы Randomize вставили внутрь цикла. Я тоже так поступал (и в различных примерах видел), но Александр Моторин своем коде  вынес его за пределы цикла. Я сделал тестовый файлик и попробовал и так, и так (десять раз выбирал по 10 цифр из массива обеими способами). По-моему и за пределами цикла (то есть один раз) Randomize обеспечивает случайность всех последующих random'ов. Или это не так?

Ну, собственно, все. Еще раз спасибо!
Как выбрать из массива случайным образом уникальные значения
 
ув. Kuzmich, спасибо за ответ. Но я уже использовал решение Александра Моторина. Все работает быстро и, вроде, без сбоев.
Кроме того, оно мне понятнее. Я, к своему стыду, не очень понял, что в Вашей процедуре происходит :oops:

Но все равно, большое спасибо, за желание помочь.
Как выбрать из массива случайным образом уникальные значения
 
ув. Александр, спасибо. Замена Round на Int - очень понравилась.

А со словарями я никогда не встречался :), поэтому переменную t объявил как String. Это правильно или в словаре должен быть какой-то особый тип?

Но все вроде работает. Спасибо!
Как выбрать из массива случайным образом уникальные значения
 
Здравствуйте!
Колонка А заполнена словами. Выбираю случайным образом 5 слов и записываю в колонку В. Но иногда (поскольку выбор случаен) выбираются одинаковые слова.
Код
Sub aaa()
   Dim i As Integer
   Dim max As Integer
   Dim r As Integer

   max = WorksheetFunction.CountA(Sheets("Main").Columns(1))
   With Sheets("Main")
      For i = 1 To 5
         Randomize
         r = WorksheetFunction.Round(Rnd * (max - 1), 0) + 1
         .Cells(i, 2).Value = .Cells(r, 1)
         .Cells(i, 3).Value = r
      Next i
   End With
End Sub
Искал здесь и не только здесь - в основном приводится задача выбора из массива с повторами всех уникальных значений. А у меня в основном массиве повторов нет.
Я предполагаю, что сравнение надо делать не по словам, а по номеру строки, но... как-то у меня очень громоздко получается (и дополнительные массивы ввожу, и циклы в цикле в цикле...). Думаю есть какое-то простое решение.

Будьте добры, подскажите, как избежать повторов!
Как синхронизировать последовательность выполнение каоманд макроса и отображения их действия на листе?
 
ув. БМВ, ух ты, сработало!

С небольшой паузой, но отображается. Спасибо!
Как синхронизировать последовательность выполнение каоманд макроса и отображения их действия на листе?
 
Добрый день,

У меня программка-словарь отображает карточку с русским словом (в окне MsgBox) затем с его иностранным переводом (тоже в окне MsgBox, а затем вписывает эту пару в таблицу Excel. Написал так (If - потому что по случайному выбору сначала показывается либо русское слово, либо иностранное):
Код
    If l = 0 Then
        Msgbox De
        Msgbox Ru
    Else
        Msgbox Ru
        Msgbox De
    End If

    Sheets("Main").Cells(14 + i, 6).Value = De
    Sheets("Main").Cells(14 + i, 7).Value = "-"
    Sheets("Main").Cells(14 + i, 8).Value = Ru
Работает, но странно (во всяком случае для меня).
Сначала показывается первый Msgbox. После нажатия OK появляется второй Msgbox. После нажатия ОК, по идее в таблицу должны вписаться оба слова, но вписывается только одно (иностранное слово), в первую строку первой колонки. Затем после закрытия пары следующих Msgbox'ов - дописывается второе слово (русское из первой пары Msgbox'ов) в первую строку второй колонки и первое слово - во вторую строку первой колонки. И так все время. Ставлю точку прерывания - код отрабатывается правильно причем если программа останавливается на точке прерывания, то в таблицу все вносится корректно. Пробовал давать задержку в 1 сек. - не помогло.
Решил так:
Код
    If l = 0 Then
        Msgbox De
        Sheets("Main").Cells(14 + i, 6).Value = De
        Sheets("Main").Cells(14 + i, 7).Value = "-"
        Msgbox Ru
        Sheets("Main").Cells(14 + i, 8).Value = Ru
    Else
        Msgbox Ru
        Sheets("Main").Cells(14 + i, 7).Value = "-"
        Sheets("Main").Cells(14 + i, 8).Value = Ru
        Msgbox De
        Sheets("Main").Cells(14 + i, 6).Value = De
    End If
но как-то некрасиво получается одинаковые команды дублировать.

Подскажите, плз. как это исправить. Может это только у меня "кривой" Excel (или руки :)) Вот "облегченный" файл вкладываю. Посмотрите если не лень...
Вернуть кирилицу вместо вопросительных знаков в меседж-боксе
 
ув. sokol92, спасибо большое! Все работает!! Странно как-то в 21 веке иметь проблемы с кодировками...
Страницы: 1 2 3 4 5 6 7 8 9 След.
Наверх