我想将一个电子表格中的所有已用单元格复制并粘贴到另一个电子表格中。我正在努力完成这项工作,以便在第一列添加/删除内容并粘贴之后,可以多次运行报告。
我正在尝试使用以下代码执行此操作,但它给出了运行时错误91 - 对象变量或未设置块变量。
以下是代码:
public Sheet1 as String, Sheet 2 as string
Sub PolicyLanguage()
Dim Range1 As Range
Set Range1 = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
ThisWorkbook.Worksheets(Sheet1).Activate
Range1.Copy Destination:=wb.Sheets(Sheet2)
End Sub
更新:我能够通过使用count函数来确定包含值的列中的单元格数,从而相对干净地解决问题,并使用该数字来确定我的复制范围。这在我的宏的许多其他部分都派上了用场,所以我想我会发布它,万一有人需要它。
Dim i As Integer, n As Integer
i = Worksheets("Sheet1").Range("B:B").Cells.SpecialCells(xlCellTypeConstants).Count
n = i + 1
Worksheets("Sheet1").Range("A1:A" & CStr(n)).Copy Destination:=Sheets(NewSheetName).Range("A1:A" & CStr(n))
答案 0 :(得分:0)
此解决方案应该适合您:
Option Explicit
Public Sheet1 As String, Sheet2 As String
Sub PolicyLanguage()
Dim Range1 As Range
Dim wb As Workbook
Set Range1 = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
Set wb = ThisWorkbook
wb.Sheets("Sheet1").Activate
Range1.Copy Destination:=wb.Sheets("Sheet2").Range("A1")
End Sub
我的示例假设您的工作表标题为Sheet1
和Sheet2
,因此如果不是,则需要相应地调整(Sheet1
是您的数据所在的位置{{1}成为你想要复制到的目的地。)
话虽如此,您也可以替代使用纸张的代号(这通常是优选的,因为它们不太可能被用户更改并且只能手动更改)。这是VBE中属性中(名称)下的名称。我不确定您的公共变量是用于什么的,但要确保两个表格的代号是不同的。
对于此示例,我将Sheet2
更改为Sheet1
,将SheetA
更改为Sheet2
:
SheetB
答案 1 :(得分:0)
您需要做的就是将代码包装在With语句中。
Dim Range1 As Range
Set Range1 = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
With ThisWorkbook
Range1.Copy Sheet2.Range("A1")
End With
如果你想保持简单,摆脱变量。
With ThisWorkbook
Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).Copy Sheet2.Range("A1")
End With
答案 2 :(得分:-1)
尝试以下方法:
Sub PolicyLanguage()
Dim Range1 As Range
Set Range1 = Worksheets("Sheet1").Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
ThisWorkbook.Worksheets("Sheet1").Activate
Range1.Copy Destination:=Worksheets("Sheet2").Range("A1")
End Sub
Sheet1和Sheet2应该是引号,因为它们是字符串。使用Public函数将它们定义为字符串使它们成为字符串变量,并且可以在Excel中访问其他模块。您可以在链接中阅读更多相关信息。
http://www.excelfunctions.net/VBA-Functions-And-Subroutines.html
我发现没有必要使用Public。此外,在最后一行中,wb无法调出您的工作表,您必须为目标指定一个起始范围。