我正在尝试将一个表的内容复制到另一个表中。在这个过程中我只复制一些列。很抱歉,如果我的问题太基础了,我不熟悉Excel VBA
Dim tableName As ListObject
Set tableName = Worksheets("DataSource").ListObjects(1)
[Table1[TaskUID]].Copy [tableName[TaskUID]]
第3行抛出错误" Object Required"
任何人都可以请求语法
答案 0 :(得分:1)
它不起作用的原因是因为使用括号Application.Evaluate()
就像在括号内的表达式上调用tableName
一样,所以你不能在那里使用你的局部变量名,因为将评估表达式不知道他们。它找不到名为Dim tableName As ListObject
Set tableName = Worksheets("DataSource").ListObjects(1)
ListObjects("Table1").ListColumns("TaskUID").DataBodyRange.Copy tableName.ListColumns("TaskUID").DataBodyRange
的列表对象。
你可以避开括号(可以说,你总是应该):
fact:
slti $t0, $a0, 1 # test for n < 1
beq $t0, $zero, L1 # if n >= 1, go to L1
li $v0, 1 # return 1
jr $ra # return to instruction after jal
L1:
addi $sp, $sp, -8 # adjust stack for 2 items
sw $ra, 4($sp) # save the return address
sw $a0, 0($sp) # save the argument n
addi $a0, $a0, -1 # n >= 1; argument gets (n – 1)
jal fact # call fact with (n – 1)
lw $a0, 0($sp) # return from jal: restore argument n
lw $ra, 4($sp) # restore the return address
addi $sp, $sp, 8 # adjust stack pointer to pop 2 items
mul $v0, $a0, $v0 # return n * fact (n – 1)
jr $ra # return to the caller
.text
main:
la $a0, greet # display greetings
li $v0, 3
syscall # syscall on print greetings
dri:
la $a0, enter # display message that asks reader
li $v0, 3
syscall # system call on print question
li $v0, 6 # value of n is read
syscall # system call
slt $t0, $v0, $zero # condition of program end
bne $t0, $zero, close # if user types a number less than zero it closes
move $s0, $v0 # save value of n move $a0, $v0 # place value of n in $a0
jal fact # call fact function
move $s1, $v0 # fact value is saved
move $a0, $s0 # result is displayed
li $v0, 1 # value of n is printed
syscall # system call
la $a0, answer # displays the textual portion of the answers
li $v0, 3
syscall # system call
move $a0, $s1 # print factorial
li $v0, 1
syscall # system call
la $a0, newline # display newline
li $v0, 3
syscall # system call
j dri # process is repeated until user decides
close:
la $a0, bye # farewell message
li $v0, 3
syscall # system call
li $v0, 10 # exit from the program
syscall
.data
greet: .asciiz "Welcome to the factorial tester!\n"
enter: .asciiz "Enter a value for n (or a negative value to exit): "
answer: .asciiz "! is "
newline: .asciiz "\n"
bye: .asciiz "Come back soon!\n"
# end fact.s
答案 1 :(得分:0)
使用实际的表名:
您可以使用Range进行换行并使用实际表名称。您正在有效地调用命名范围上的.Copy方法。因此,如果他们在同一张纸上,例如:
With ActiveSheet
.Range("Table1[TaskUID]").Copy .Range("Table2[TaskUID]")
End With
如果目标位于另一个工作表中,您始终可以使用工作表名称限定目标。
或(按表变量的列号):
由于您需要一个范围用于复制目标,如果您知道要粘贴的表变量的列号,您还可以使用表变量名称来编写如下内容:
.Range("Table1[TaskUID]").Copy tableName.DataBodyRange.Columns(2) 'or which ever column
或(按表变量的列名称):
.Range("Table1[TaskUID]").Copy tableName.ListColumns("TaskUID").DataBodyRange
您可以将tableName.ListColumns("TaskUID").DataBodyRange
放在自己的变量中,然后参考它。例如。
Dim rng As Range
Set rng = tableName.ListColumns("TaskUID").DataBodyRange
.Range("Table1[TaskUID]").Copy rng
编辑:正如GSerg指出的那样,你不能在里面使用变量名。 “Range将无法找到名为tableName的表,因为这是变量的名称,而不是表的名称”