0

我有两个工作簿,一个包含代码 INSIDE Sheet1(这是我要从中复制值的工作表的代号),另一个工作簿在此示例中定义为“y”。我想将 Sheet1 中单元格“K1-K10”的值复制到工作簿 y 的单元格(“F1-F10”)中(例如,我想要 F1.Value=K1.Value,F2.Value = K2.Value, ETC...)。

两个工作簿都受密码保护,我只是想从 Sheet1 复制值(这就是我不取消保护它的原因),但是一旦所有值复制并粘贴,我想保存、关闭和保护工作簿“y”进去。

当我点击 Sheet1 中的 Activex 命令按钮时,代码冻结了我的工作簿。我也仔细检查了文件路径和工作表名称,它们是正确的。

我还在下面发布了代码和两个工作簿的屏幕截图:

Private Sub CommandButton1_Click()

Dim y As Workbook
Dim i As Integer

Set y = Workbooks.Open(Filename:="\\FILEPATH\Test 2.xlsm", Password:="Swarf")


    With y

        For i = 1 To 10

            Do While Cells(i, 11).Value <> ""

                .Sheets("MyTest2").Unprotect "Swarf"
                .Sheets("Mytest2").Cells(i, 6).Value = Sheet1.Cells(i, 11).Value

            Loop

        Next i

        .Password = "Swarf"
        .Save
        .Close False

    End With

    End Sub

代号 Sheet1 内的 VBA 代码(测试 1.xslm 工作簿)

代码所在的工作簿(Test 1.xslm)并且值是从代号 Sheet1 复制的

工作簿

4

2 回答 2

1

无需循环,您可以一次性传输完整范围的信息,例如:

    With y
        .Sheets("MyTest2").Unprotect "Swarf"
        .Sheets("Mytest2").Range("F1:F10").Value = Worksheets("Sheet1").Range("K1:K10").Value
    End With

如果您确实在复制空单元格时遇到问题,那么有很多关于查找列的最后一行的帖子

于 2019-11-29T19:51:38.157 回答
1

确实需要While Loop用于这种情况。

使用If将解决您的问题。

Private Sub CommandButton1_Click()

Dim y As Workbook
Dim i As Integer

Set y = Workbooks.Open(Filename:="\\FILEPATH\Test 2.xlsm", Password:="Swarf")


    With y

        For i = 1 To 10

            If (Cells(i, 11).Value <> "") Then

                .Sheets("MyTest2").Unprotect "Swarf"
                .Sheets("Mytest2").Cells(i, 6).Value = Sheet1.Cells(i, 11).Value

            End If

        Next i

        .Password = "Swarf"
        .Save
        .Close False

    End With

    End Sub

因为您的while loop语句会导致无限循环。例如:i=1, 那么语句Cells(i, 11).Value <> ""总是返回 true 并继续循环。

于 2019-11-29T19:45:27.187 回答