VBA-获取运行时错误';1004';运行此代码时
我是VBA新手,正在尝试将两个不同的列合并到另一个工作表中的一列中 我的问题是,我得到了一个“运行时错误'1004'应用程序或对象定义错误” 据我所知,这个错误很可能与VBA-获取运行时错误';1004';运行此代码时,vba,excel,Vba,Excel,我是VBA新手,正在尝试将两个不同的列合并到另一个工作表中的一列中 我的问题是,我得到了一个“运行时错误'1004'应用程序或对象定义错误” 据我所知,这个错误很可能与工作表(“Tabelle1”)有关,但我不知道如何修复它 代码如下: Sub test2() Dim name1 As Range, size As Integer size = WorksheetFunction.CountA(Columns(3)) With Sheets("Tabelle1")
工作表(“Tabelle1”)
有关,但我不知道如何修复它
代码如下:
Sub test2()
Dim name1 As Range, size As Integer
size = WorksheetFunction.CountA(Columns(3))
With Sheets("Tabelle1")
For Each name1 In Sheets("advprsrv").Range("D2:D" & size)
If Not (Trim(name1.Value & vbNullString) = vbNullString) Then
.Cells(name1.Row, 1).Value = LCase(name1.Value & " " & Range(Cells(name1.Row, name1.Column)))
End If
Next name1
End With
End Sub
编辑:我用
F8
检查了代码,似乎在这一行ws.Cells(name1.Row,1.Value=LCase(name1.Value&=“Range(Cells(name1.Row,name1.Column.Value))
尝试下面的代码,在代码注释中解释:
Option Explicit
Sub test2()
Dim name1 As Range, size As Long
Dim TblSht As Worksheet
Dim advpSht As Worksheet
' set the worksheet object and trap errors in case it doesn't exist
On Error Resume Next
Set TblSht = ThisWorkbook.Worksheets("Tabelle1")
On Error GoTo 0
If TblSht Is Nothing Then ' in case someone renamed the "Expense" Sheet
MsgBox "Tabelle1 sheet has been renamed", vbCritical
Exit Sub
End If
' set the worksheet object and trap errors in case it doesn't exist
On Error Resume Next
Set advpSht = ThisWorkbook.Worksheets("advprsrv")
On Error GoTo 0
If advpSht Is Nothing Then ' in case someone renamed the "Expense" Sheet
MsgBox "advprsrv sheet has been renamed", vbCritical
Exit Sub
End If
With advpSht
' safer way to get the last row from column "D" (since later on you use it in a Range in Column "D")
size = .Cells(.Rows.Count, "D").End(xlUp).Row
For Each name1 In .Range("D2:D" & size)
If Trim(name1.Value2) <> "" Then
' ***** Not sure about the connection between the 2 sheets *****
TblSht.Cells(name1.Row, 1).Value = LCase(name1.Value2 & " " & TblSht.Cells(name1.Row, name1.Column))
End If
Next name1
End With
End Sub
选项显式
子测试2()
尺寸名称1为范围,尺寸为长度
将TblSht设置为工作表
Dim advpSht As工作表
'设置工作表对象并在不存在时捕获错误
出错时继续下一步
设置TblSht=ThisWorkbook.Worksheets(“表1”)
错误转到0
如果TblSht不算什么,那么“如果有人重命名了“费用”表
MsgBox“Tabelle1工作表已重命名”,vbCritical
出口接头
如果结束
'设置工作表对象并在不存在时捕获错误
出错时继续下一步
设置advpSht=thispoolk.Worksheets(“advpsrv”)
错误转到0
如果advpSht不算什么,那么“如果有人重命名了“费用”表
MsgBox“advprsrv工作表已重命名”,vbCritical
出口接头
如果结束
用advpSht
'从列“D”中获取最后一行的更安全的方法(因为以后您会在列“D”的范围内使用它)
大小=.Cells(.Rows.Count,“D”).End(xlUp).Row
对于1英寸范围内的每个名称(“D2:D”和尺寸)
如果修剪(名称1.Value2)”,则
“******不确定两张图纸之间的连接*****
TblSht.Cells(name1.Row,1.Value=LCase(name1.Value2&&&TblSht.Cells(name1.Row,name1.Column))
如果结束
下一个名字1
以
端接头
将Option Explicit
放在模块的最顶端,这将极大地帮助您解决此类问题。我认为您需要在name1.value&=“Range(Cells(name1.Row,name1.Column)))的末尾添加一个.value,因为您连接的是一个范围,而不是范围中的值。我没有看到缺少一个.value
,刚刚尝试过,但不幸的是它没有解决主要问题可能范围(单元格(name1.Row,name1.Column))
应该在范围和单元格中都有一个点,比如:.Range(.Cells(name1.Row,name1.Column))
,或者它应该符合特定的工作表。谢谢您的帮助。它将name1中的值写入新工作表,但它不连接其他单元格。您出现了“错误”,因为您不知道列之间的连接。我把它修好了,现在它工作得很好。谢谢你的帮助。@fscopulovic我不知道这两者之间的联系,不客气:)