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

Страницы: 1
Не работает макрос с поиском
 
Добрый день!
Не могу понять, почему не работает макрос.
Вроде бы и форматы пытался менять, но всё равно не получается. При этом  если сам ввожу какое-то значение на обоих листах, а не использую выгрузку из 1С, то макрос находит нужное значение.

Код
Sub FindValueFromActiveCell()
    Dim SearchValue As String
    Dim FoundCell As Range
    Dim SearchRange As Range
    Dim SalesSheet As Worksheet
    
    ' Проверяем, существует ли лист "Продажи"
    On Error Resume Next
    Set SalesSheet = Worksheets("Продажи")
    On Error GoTo 0
    
    If SalesSheet Is Nothing Then
        MsgBox "Лист 'Продажи' не найден!", vbExclamation
        Exit Sub
    End If
    
    ' Значение для поиска берется из активной ячейки
    SearchValue = Replace(ActiveCell.Value, " ", "")
    
    ' Если ячейка пустая, выходим из макроса
    If SearchValue = "" Then
        MsgBox "Активная ячейка пуста!", vbExclamation
        Exit Sub
    End If
    
    ' Задаем область поиска - весь лист "Продажи"
    Set SearchRange = SalesSheet.UsedRange
    
    ' Ищем значение на листе "Продажи"
    Set FoundCell = SearchRange.Find(What:=SearchValue, LookIn:=xlFormulas)
    
    ' Проверяем, найдено ли значение
    If Not FoundCell Is Nothing Then
        ' Активируем лист "Продажи" и переходим к найденной ячейке
        SalesSheet.Activate
        FoundCell.Select
        MsgBox "Значение '" & SearchValue & "' найдено в ячейке: " & FoundCell.Address & " на листе 'Продажи'"
    Else
        MsgBox "Значение '" & SearchValue & "' не найдено на листе 'Продажи'!", vbInformation
    End If
End Sub
Подтягивание действующих цен
 
Есть выгрузка следующего формата, где, 000001037898000000 и 000346621240104000 - номера изделий. Действующие цены по этим изделиям всегда будут в дату последней отгрузки, т.е. действующие цены в данном примере - 1,22 и 8,3. Можно ли как-то подтягивать действующие цены по номерам изделий?
Макрос с Alt+TAb
 
Постоянно приходится выполнять следующую последовательность действий:
Книга1 → Alt+Tab → Скопировать информацию из листа Full в Книге2 → Alt+Tab → Скопировать информацию в Книгу1. Книги всегда разные, поэтому как-то заранее прописать название книг не вариант, приходится использовать ALt+Tab.
Получился следующий макрос:
Код
Sub КопироватьFull()
'Копирование нужной информации в Книге2
    Sheets("Full").Select
    ActiveSheet.Protect Password:="1111", UserInterfaceOnly:=True
    Range("A4:P5000").Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
End Sub

Sub Hotkeys()
Application.OnKey "^+X", "КопироватьFull"
End Sub

Sub RunMacroAndPaste()
    Application.SendKeys "%{TAB}", True
    Application.Wait Now + TimeValue("00:00:01")
    Application.SendKeys "^+X", True
    Application.Wait Now + TimeValue("00:00:01")
    Application.SendKeys "%{TAB}", True
    Application.Wait Now + TimeValue("00:00:01")
    Range("A35").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
End Sub

1) Код корректно работает до момента, когда в возвращаюсь в Книгу1 через ALt+Tab. Т.е. после добавления в макрос второго "Application.SendKeys "%{TAB}", True" почему-то перестаёт работать "КопироватьFull".

2) Пробовал выполнить отдельно вторую часть макроса:
Код
    Application.SendKeys "%{TAB}", True
    Application.Wait Now + TimeValue("00:00:01")
    Range("A35").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
Выдаёт ошибку 1004 "Метод select из класса Range завершен неверно". При этом, если проделывать всё самому, то никаких проблем не возникает.

Помогите, пожалуйста, скорректировать код.  
Изменено: Dobbisvoboden - 05.02.2025 06:37:17
Скорректировать макрос, работающий только на активную ячейку.
 
Понимаю, что вопрос крайне простой, но работа прибавляется быстрее, чем я изучаю VBA.
Есть следующий код:
Код
Sub Reverse_Word()
 On Error Resume Next
 ActiveCell.Value = StrReverse(ActiveCell.Value)
End Sub
Подскажите, пожалуйста, как скорректировать код, чтобы он работал либо на несколько выделенных ячеек, либо до последней заполненной строки в таблице.
Скорректировать макрос, работающий только на активную ячейку.
 
Нашёл следующий макрос:
Код
    Dim s$, I&, j&
     s = Selection
    
  For I = 1 To Len(s)
   j = AscW(Mid$(s, I, 1))
   If j < 256 Then
       Mid$(s, I, 1) = Chr(j)
       Debug.Print I & vbTab & Mid$(s, I, 1) & vbTab & j & vbTab & Chr(j)
   End If
   Next
 
   ActiveCell.Value = s
End Sub

Он работает только на активную ячейку. Нужно скорректировать его так, чтобы он работал либо на несколько выделенных ячеек, либо до последней заполненной строки в таблице.

Изменено: Dobbisvoboden - 17.01.2025 16:41:34
Макрос в зависимости от названия листа
 
Нужен макрос, чтобы в зависимости от названия листа копировались разные области. Например:
Если название листа Full, то скопировать A1:A10
Если название листа Basic, то скопировать B1:B10.
Вывести адрес найденной по тексту ячейки
 
Добрый день!
Нужно найти ячейку, содержащую, определенный текст, например, "Материалы" и вывести адрес этой ячейки (например, A1).
Вроде бы задача не сложная, но решение найти так и не смог.
Макрос с использованием СЖПРОБЕЛЫ
 

Нужно написать макрос с формулой СЖПРОБЕЛЫ. Может быть по несколько тысяч кодов в разных столбиках, между ними могут быть пробелы, поэтому условно указал на 5000 строк. После все значения нужно перевести в текстовый формат. Написал макрос. Проблема в том, что Excel при его использовании будет учитывать этот столбик (в данном случае C) до 5000 строки, что в дальнейшем может мешать работе. Можно ли как-то избавиться от этого или скорректировтать сам макрос?

Сам макрос:

Код
    ActiveCell.Columns("A:A").EntireColumn.Select
    Selection.Insert Shift:=xlToRight
    ActiveCell.Select
    ActiveCell.FormulaR1C1 = "=TRIM(RC[1])"
    Selection.AutoFill Destination:=ActiveCell.Range("A1:A5000")
    ActiveCell.Range("A1:A5000").Select
    ActiveCell.Columns("A:A").EntireColumn.Select
    Selection.Copy
    ActiveCell.Offset(0, 1).Columns("A:A").EntireColumn.Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveCell.Offset(0, -1).Columns("A:A").EntireColumn.Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    ActiveCell.Columns("A:A").EntireColumn.Select
    Selection.NumberFormat = "@"
Страницы: 1
Наверх