Кнопка макроса VBA Excel для копирования и вставки, которая увеличивается при каждом нажатии

Я пытаюсь создать кнопку для автоматического заполнения ячейки B5 информацией из другого листа A1: A10,

каждый раз, когда кнопка нажата, я хочу, чтобы B5 имел информацию из ячейки A1, затем, как только кнопка снова нажата информация из A2 и так далее, нужно, чтобы она шла в порядке

17
задан angelofdev
12.02.2023 10:48 Количество просмотров материала 3153
Распечатать страницу

2 ответа

вот короткий простой метод.

вам понадобится счетчика с каждым нажатием кнопки. Вам нужно куда-то положить этой таблицы, в данном примере это под кнопкой.

  1. сначала решить, где ваш счетчик будет идти, для этого примера он будет находиться непосредственно под кнопкой.

Counter will increment

  1. вставьте кнопку.

Insert Button (Form Control)

  1. назначить макрос для кнопки, убедитесь, что вы сохраните его в Книгу.

Assign Macro

  1. вставьте код ниже в Редактор VBA для нажатия кнопки.

код

Sub Button1_Click()

    Dim CopySheet As Worksheet, PasteSheet As Worksheet
    Dim xFrom As Integer, xTo As Integer, i As Integer
    Dim pasteCell As String, cCell As String

    'Sheets
    Set CopySheet = Worksheets("Sheet2") 'Sheet you are copying from.
    Set PasteSheet = Worksheets("Sheet1")  'Sheet you are pasting into.

    'Rows, range of rows start from row rStart to rEnd
    rStart = 1 'Start of Row you want to copy from.
    rEnd = 10 'End of Row you want to copy from.

    'Cells
    pasteCell = "B5" 'Cell we will paste data from CopySheet.

    'Counter will increments with each button press.
    cCell = "E5" 'Change "E5" to reference cell on your spreadsheet.
    i = Range(cCell).Value

    Application.ScreenUpdating = False 'We disable Screen Updating to prevent interruption.

    'Update Counter
    i = i + 1
    If (i > rEnd) Then
        i = rStart
    End If
    Range(cCell).Value = i

    'Copy/Paste Functions
    CopySheet.Select
    Range("A" & i).Select
    Selection.Copy
    PasteSheet.Select
    Range(pasteCell).Select
    ActiveSheet.Paste

    Application.ScreenUpdating = True 'Enable Screen Updating at end of operation.
End Sub

VBA Editor

кнопка скопирует основанный на встречном номере плюс 1, так если номер 0 на кнопке нажмите макрос будет добавить получить 0 + 1, а затем начать копировать и вставлять функции.

enter image description here

2
отвечен angelofdev 2023-02-13 18:36

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



Вставьте следующий код в любой модуль, не относящийся к классу:

'============================================================================================
' Module     : <any non-class module>
' Version    : 0.1.0
' Part       : 1 of 1
' References : N/A
' Source     : https://superuser.com/a/ANSWER_ID/763880
'============================================================================================
Option Explicit

Public Sub Next_Click()

  Const s_DestSheet As String = "Sheet1"
  Const s_DestRange As String = "B5"
  Const s_SrcSheet As String = "Sheet2"
  Const s_SrcCell As String = "A1:A10"

  Static sidxCurrentCell As Variant: If IsEmpty(sidxCurrentCell) Then sidxCurrentCell = -1

  With Worksheets(s_SrcSheet).Range(s_SrcCell)
    sidxCurrentCell = (sidxCurrentCell + 1) Mod .Cells.Count
    .Cells(sidxCurrentCell + 1).Copy Destination:=Worksheets(s_DestSheet).Range(s_DestRange)
  End With

End Sub

затем назначить его на кнопку.



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

1
отвечен robinCTS 2023-02-13 20:53

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх