选择范围时,我遇到错误1004“应用程序定义或对象定义错误”的问题。
我仍然可以选择行(即Rows("21:21").select
)并在同一工作簿的其他工作表中选择范围。我不相信错误在代码中。也许是我不知道的一些设置?
之前我曾多次使用完全相同的代码,但出于某些原因我无法在此子函数中使用它(我已经评论了错误发生的位置)......
Sub CopySheet1_to_PasteSheet2()
Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer
'Finds last row of content
Windows("Excel.xlsm").Activate
Sheets("Sheet1").Activate
Range("C21").Select
'>>>Error 1004 "Application-defined or Object-defined error" Occurs
Selection.End(xlDown).Select
CLastFundRow = ActiveCell.Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1
'Copy Data
Range("A21:C" & CLastFundRow).Select
Selection.Copy
'Paste Data Values
Sheets("PalTrakExport PortfolioAIdName").Select
Range("A21").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Bring back to top of sheet for consistancy
Range("A21").Select
Range("A1").Select
End Sub
我需要对我的复制感兴趣,因为行数会经常变化。同样,下面的代码之前已经使用过,没有错误......但在这种情况下却没有。
Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer
'Finds last row of content
Windows("Excel.xlsm").Activate
Sheets("Sheet1").Activate
Range("C21").Select
'>>>Error 1004 "Application-defined or Object-defined error" Occurs
Selection.End(xlDown).Select
CLastFundRow = ActiveCell.Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1
答案 0 :(得分:22)
也许您的代码在Sheet1后面,所以当您将焦点更改为Sheet2时,无法找到对象?如果是这种情况,只需指定目标工作表可能会有所帮助:
Sheets("Sheet1").Range("C21").Select
我不太熟悉Select如何工作,因为我尽可能地避免它:-)。您可以在不选择范围的情况下定义和操作范围。同样明确你所引用的一切也是一个好主意。这样,如果您从一张工作表或工作簿转到另一张工作簿,则不会失去跟踪。试试这个:
Option Explicit
Sub CopySheet1_to_PasteSheet2()
Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer
Dim wksSource As Worksheet, wksDest As Worksheet
Dim rngStart As Range, rngSource As Range, rngDest As Range
Set wksSource = ActiveWorkbook.Sheets("Sheet1")
Set wksDest = ActiveWorkbook.Sheets("Sheet2")
'Finds last row of content
CLastFundRow = wksSource.Range("C21").End(xlDown).Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1
'Copy Data
Set rngSource = wksSource.Range("A2:C" & CLastFundRow)
'Paste Data Values
Set rngDest = wksDest.Range("A21")
rngSource.Copy
rngDest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'Bring back to top of sheet for consistancy
wksDest.Range("A1").Select
End Sub
答案 1 :(得分:11)
这有点晚,但可能有助于将来参考。我刚刚遇到了同样的问题,我认为这是因为宏是在工作表级别记录的。右键单击VBA项目窗口上的模块节点,单击插入模块,然后将宏粘贴到新模块中(确保删除工作表级别记录的宏)。
希望得到这个帮助。
答案 2 :(得分:5)
同样的事发生在我身上。在我的情况下,大多数工作表都处于保护模式(尽管与宏相关的单元格已解锁)。当我在工作表上禁用保护时,宏工作正常......看起来VBA不喜欢锁定的单元格,即使它们没有被宏使用。
答案 3 :(得分:2)
Excel中的某些操作受可用内存的限制。如果一遍又一遍地重复相同的过程,它可能会产生内存溢出,而excel将无法重复它。尝试在同一工作簿中创建多个工作表时,这发生在我身上。
答案 4 :(得分:2)
我可以通过将计数器定义为Single
来删除错误(运行时错误' 1004'。应用程序定义或操作定义的错误)答案 5 :(得分:2)
在Office Excel 2003中,当您以编程方式使用包含大字符串的数组设置范围值时,您可能会收到类似于以下内容的错误消息:
运行时错误' 1004'。应用程序定义或操作定义的错误。
如果数组中的一个或多个单元格(单元格区域)包含设置为包含911个以上字符的字符串,则可能会出现此问题。
要解决此问题,请编辑脚本,以使数组中的单元格不包含超过911个字符的字符串。
例如,下面示例代码块中的以下代码行定义了一个包含912个字符的字符串:
Sub XLTest()
Dim aValues(4)
aValues(0) = "Test1"
aValues(1) = "Test2"
aValues(2) = "Test3"
MsgBox "First the Good range set."
aValues(3) = String(911, 65)
Range("A1:D1").Value = aValues
MsgBox "Now the bad range set."
aValues(3) = String(912, 66)
Range("A2:D2").Value = aValues
End Sub
其他版本的Excel或alternatives免费Calc也可以正常使用。
答案 6 :(得分:1)
你必须转到db表获取第一个空白行,你可以尝试这种方法。
Sub DesdeColombia ()
Dim LastRowFull As Long
'Here we will define the first blank row in the column number 1 of sheet number 1:
LastRowFull = Sheet1.Cells(Rows.Count,1).End(xlUp).Offset(1,0).Row
'Now we are going to insert information
Sheet1.Cells(LastRowFull, 1).Value = "We got it"
End Sub
答案 7 :(得分:1)
我有类似的问题&修复它应用这些步骤:
我希望这会对某人有所帮助。
答案 8 :(得分:1)
我有一个类似的问题,但事实证明我只是引用一个离开页面的单元格(即细胞(i,1)。切割细胞(i-1,2)}
答案 9 :(得分:1)
我也遇到了同样的问题,差点疯了。解决方案出乎意料。
默认情况下,我的Excel出厂时,我在Excel单元格中输入公式,如下所示:
=COUNTIF(Range; Searchvalue)
=COUNTIF(A1:A10; 7) 'Example
请注意,参数用分号;
分隔。现在,如果您确切地将该字符串粘贴到VBA中的公式中,例如:
Range("C7").FormulaArray = "=COUNTIF(A1:A10; 7)" 'this will not work
您将收到此1004错误,绝对没有任何解释。我花了几个小时来调试它。您要做的就是用逗号替换所有分号。
Range("C7").FormulaArray = "=COUNTIF(A1:A10, 7)" 'this works
答案 10 :(得分:0)
您可以使用以下代码(例如,如果要将单元数据从Sheet2
复制到Sheet1
)。
Sub Copy
Worksheets("Sheet1").Activate
Worksheets("Sheet1").Range(Cells(i, 6), Cells(i, FullPathLastColumn)).Copy_
Destination:=Worksheets("Sheet2").Cells(Path2Row, Path2EndColumn + 1)
End Sub
答案 11 :(得分:0)
在尝试循环工作簿的每个工作表时,我遇到了类似的问题。 要解决它,我做了类似的事情
dim mySheet as sheet
for each mysheet in myWorkbook.sheets
mySheet.activate
activesheet.range("A1").select
with Selection
'any wanted operations here
end with
next
它运作得很好
我希望你能适应你的情况
答案 12 :(得分:0)
我遇到了同样的问题,发现创建工作表的个人已经锁定了几个列。我删除了保护,一切按设计工作。
答案 13 :(得分:0)
我也有同样的问题,我解决了以下问题
在宏中有一个名为rownumber的变量,最初我把它设置为零。这是错误,因为没有Excel工作表包含行号为零。当我设置为1并增加我想要的。
现在它的工作正常。
答案 14 :(得分:0)
我也有类似的问题。复制并粘贴到工作表后,我希望光标/选定单元格为A1,而不是我刚粘贴的范围。
Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)
wkSheet("A1").Select
但得到400错误,实际上是1004错误
您需要在更改所选单元格之前激活工作表 这工作
Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)
wkSheet.Activate
wkSheet("A1").Select
答案 15 :(得分:0)
您需要找出此常见错误代码的实际原因:1004。编辑您的函数/ VBA代码并在调试模式下运行程序以识别导致它的行。然后,添加下面的代码来查看错误,
On Error Resume Next
//Your Line here which causes 1004 error
If Err.Number > 0 Then
Debug.Print Err.Number & ":" & Err.Description
End If
注意: 我在PC中使用的调试快捷键: 单步执行(F8),单步执行(Shift + F8),单步执行(Ctrl + Shift + F8)
答案 16 :(得分:0)
在VBA开发/调试期间,我突然遇到了这个问题,因为某些(我不知道)功能(特性)导致单元被锁定(也许是renaming of named references at some problematic stage)。
手动解锁单元格效果很好:
选择所有工作表单元格(CTRL+A
)并通过 right click -> cell formatting -> protection -> [ ] lock
解锁(可能有所不同-翻译成德语:Zellen formatieren -> Schutz -> [ ] Gesperrt
)
答案 17 :(得分:0)
只是想添加一个额外的修复,因为我以前从未遇到过它:
我的一个用户在使用他从中提取信息的 Excel 工作簿时遇到了这个运行时错误,但仅限于他的台式计算机,即使它的硬件和软件与他的笔记本电脑几乎相同(相同数量的内存、操作系统、Office 配置)等)。
事实证明,连接到他的台式计算机的显示器太大了 - 解决方案/变通方法是打开一个空白的 Excel 文件,缩小 Excel 窗口,然后打开他遇到问题的文件。
由于这是由第三方生成的文件 - 我们无法编辑/实施任何先前建议的修复程序,更改宏或保护设置也没有做任何事情(并且他们在他的笔记本电脑上使用相同的设置工作无论如何)。