我已经阅读了其他帖子,但我仍然对我试图应用它的具体应用程序感到不满。
问题:
我正在尝试从关闭到我当前工作簿的excel文件中复制数据。我希望能够浏览该文件,然后让宏完成剩下的工作。
解决方案尝试:
我在目标工作簿中收到错误,指出"应用程序定义或对象定义错误。"这是非常简陋的,但下面是我到目前为止。目标是我正在打开的工作簿,y是当前的工作簿,或者至少应该是!
Option Explicit
Sub getfilename()
Dim myFilePath As String
Dim target As Workbook, y As Workbook
myFilePath = Application.GetOpenFilename()
'copying
Set target = Workbooks.Open(myFilePath)
target.Sheets("Sheet1").Range("R9C2:R20C2").Copy
'pasting
Set y = ActiveWorkbook
y.Sheets("Adjustment").Cells("R57C4").PasteSpecial
'close
target.Close
End Sub
这只是这个项目的开始。我真的需要存储数据并在粘贴之前对其进行一些操作,但我试图看看我是否能够先弄明白这一点。任何和所有帮助表示赞赏!
答案 0 :(得分:4)
RANGE对象需要A1表示法而不是R1C1表示法。 CELLS对象可以使用行号和列号(虽然你也不需要R..C ..结构。
Sub getfilename()
Dim myFilePath As String
Dim target As Workbook, y As Workbook
myFilePath = Application.GetOpenFilename()
Set y = ActiveWorkbook
'copying
Set target = Workbooks.Open(myFilePath)
'Here we're using the A1 notation
target.Sheets("Sheet1").Range("B2","B9").Copy
'Here we're using the Row & Column numbers notation
y.Sheets("Adjustment").Cells(57, 4).PasteSpecial
'close
target.Close
End Sub
此外,您实际上并不需要使用Copy和PasteSpecial方法来复制值。在这样的小型宏中,这并不算太大,但在更大的过程中,您会发现使用以下内容直接复制值更有效: target.Range(&#34; A1&#34;,&#34; A10&#34;)。value = source.Range(&#34; A1&#34;,&#34; A10&#34;)。value < / p>