Nano Hash - криптовалюты, майнинг, программирование

Копирование и вставка VBA, форматирование и формулы

Я новичок в VBA, приведенный ниже код - это то, что мне удалось до сих пор, но я хотел бы спросить, может ли кто-нибудь помочь с форматированием и копированием формул, пожалуйста?

У меня есть приведенный ниже код, работающий в моем проекте, который передает данные с листа под названием «Обновить данные проверки качества» на другие листы на основе имен пользователей одним из двух способов:

  • Увидев, что имя пользователя рабочего листа уже существует, и просто скопировав соответствующие данные; или,
  • Создав новый рабочий лист с именем пользователя в качестве имени ws и скопировав данные из листа данных.

Что я хотел бы добавить, так это то, что при создании нового пользовательского листа формат и форумы из первого пользовательского листа копируются в новые листы и каждый дополнительный созданный пользовательский лист.

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

Public Sub transfer() 


Dim ws As Worksheet, wsName As Worksheet 
Dim lRow As Long, lPaste As Long 
Dim sName As String 


Set ws = Worksheets("Update Quality Check Data") 


With ws 
    For lRow = 2 To .Cells(Rows.Count, 1).End(xlUp).Row 
        sName = .Cells(lRow, 2) 
        On Error Goto NoSheettFound 
Jumper: 
        Set wsName = Worksheets(sName) 
        On Error Goto 0 
        lPaste = wsName.Cells(Rows.Count, 3).End(xlUp).Row + 1 
        .Cells(lRow, 1).Copy Destination:=wsName.Cells(lPaste, 3) 
        .Cells(lRow, 3).Copy Destination:=wsName.Cells(lPaste, 4) 
    Next lRow 
End With 


Exit Sub 


NoSheettFound: 
Set wsName =    ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) 
wsName.Name = sName 
ws.Select 
Goto Jumper 
End Sub 

С уважением

Джон


Ответы:


1

Я сделал это двумя способами. Во-первых, создайте шаблон со скрытой вкладкой, из которой я скопирую свой формат.

Или два, вы можете похоронить формат КАЖДОЙ ячейки в своем коде и вызвать его для каждого диапазона, который вы хотите. Пример:

Sub format1(r As Range)

    With r
        .Interior
        .Interior.Pattern = xlSolid
        .Interior.PatternColorIndex = xlAutomatic
        .Interior.ThemeColor = xlThemeColorAccent1
        .Interior.TintAndShade = 0.799981688894314
        .Interior.PatternTintAndShade = 0

        .Font.ThemeColor = xlThemeColorAccent2
        .Font.TintAndShade = 0.399975585192419
        .Font.Size = 12
        .Font.Bold = True
        .Font.Italic = True

        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone
        .Borders(xlEdgeLeft).LineStyle = xlNone
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeTop).ColorIndex = 0
        .Borders(xlEdgeTop).TintAndShade = 0
        .Borders(xlEdgeTop).Weight = xlThin
        .Borders(xlEdgeBottom).LineStyle = xlDouble
        .Borders(xlEdgeBottom).ColorIndex = 0
        .Borders(xlEdgeBottom).TintAndShade = 0
        .Borders(xlEdgeBottom).Weight = xlThick
        .Borders(xlEdgeRight).LineStyle = xlNone
        .Borders(xlInsideVertical).LineStyle = xlNone
        .Borders(xlInsideHorizontal).LineStyle = xlNone
    End With
End Sub
17.07.2016
  • Спасибо, Керри, это выглядит великолепно. Извините за невежество, но не могли бы вы подсказать, как это сделать? Допустим, например, что мой рабочий лист шаблона называется Боб, а матирование и формулы находятся в диапазоне D5:G10. 18.07.2016
  • @JohnWilliams, вы можете сделать это так: Sub TestBob() Dim ws As Worksheet Set ws = Worksheets("Bob") Call format1(ws.Range("D5:G10")) End Sub ... это, конечно, при условии, что в вашем шаблоне есть те же ячейки, отформатированные так, как вы хотите. 21.07.2016
  • @JohnWilliams, если я был полезен, не забудьте проголосовать за мой ответ. 21.07.2016

  • 2

    вот один из шаблонов:

    Sub FormatNewSheet(ws As Worksheet)
    
    Dim wsTemplate As Worksheet
    Set wsTemplate = Worksheets("Bob")
    
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Application.CutCopyMode = False
    
    'Copy the range from the template
    wsTemplate.Range("D5:G10").Copy
    
    
    'Paste the format to the new range
    ws.Select
    ws.Range("D5:G10").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    
    Application.EnableEvents = True
    Application.CutCopyMode = xlCopy
    Application.ScreenUpdating = True
    
    
    End Sub
    

    Вот простой тест для этого, передавая имя рабочего листа в подпрограмму формата:

    Sub TestFormat()
    
    Dim ws As Worksheet
    Set ws = Worksheets("my new sheet")
    
    Call FormatNewSheet(ws)
    
    End Sub
    

    Надеюсь, это поможет!

    18.07.2016
  • Спасибо, Керри, это идеально подходит для вашей помощи 20.07.2016
  • Если это поможет вам, пожалуйста, не забудьте проголосовать за решение. Благодарю вас! 20.07.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..